개발자로 후회없는 삶 살기
데이터 청년 캠퍼스 PART.프젝 10, 11, 12일차(데이터 병합, EDA) 본문
서론
데이터 청년 캠퍼스 project 10, 11, 12일차 내용입니다.
본론
10일차
이제 교수님께 받은 자문을 토대로 데이터의 컬럼을 만들 차례입니다. 팀원분들이 컴공의 실력을 믿겠다고들 하십니다. 마음껏 내가 그동안 연습했던 pandas, numpy를 뽐내보겠습니다!
※ 이제부터 각 공정 이름이 나옵니다. 대표적으로 CNC, MCT, 세정 등입니다. 공정 이름이 나온다면 '공정 이름이구나'하고 넘어가면 될 것입니다.
전에 받은 경영지표, 생산실적조회 외에 각 공정 RUN time가 하나의 제품이 생상 되는데 걸리는 평균 리드타임이 들어있는 데이터를 추가로 받았습니다.
- 교수님의 자문 정리
인풋으로 품목, 공정, 라우트를 넣으면 리드타임이 나옵니다. 그러면 리드타임을 최소화하는 방향으로 가보자 > 근데 리드타임을 최적화하려면 재공정보나, 설비 배치등이 필요합니다. 혹은 설비, 공정의 연결 네트워크 정보가 필요합니다. > 이거를 알면 어떠한 제품의 리드타임 이 총합 얼마 나왔을 때 어떤 부분에서 병목이 일어났는지 설비 배치를 어떻게 개선할 것인지 알 수 있습니다. > 이때 어떻게 배치하고 병목을 해결하기 위해 공정의 개수를 늘리고는 의사결정의 문제입니다.
> 근데 1. 배치 최적화는 어렵고, 2. 병목 최적화는 각 공정의 처리 능력을 알아야 합니다. 둘 다 의사결정문제로 어렵습니다. > 그래서 현실적인 수준은 현재 있는 데이터로 프로세스 마이닝을 돌려서 sequence를 분석하거나 Apriori로 sequence 분석을 하라 그러면 기업의 공정을 분석해 보니 이런 식으로 이루어지더라를 알 수 있습니다. > 특정 제품이 인풋으로 들어왔을 때 우리가 어떤 식으로 대응을 해야 한다를 정리할 수 있습니다. >
>
에이프릴을 돌리면 cnc를 선행으로 하고 세정하고 인풋처리하는 경우는 어떠할 확률이 굉장히 높고 그 룰에 의해서 나올 평균 소요 시간은 A 제품은 평균 이만큼 되고, B 제품은 평균 이만큼 된다라는 재밌는 사실이 나올 수 있습니다.
>
근데 내가 이해한 건 sequence를 구해야 선후 관계를 집어봤더니 어떠어떠해서 리드타임 예측이 되는 건데 교수님은 1명은 seq 에이프릴, 1명은 회귀분석을 하라고 하시는 것 같습니다.
=> 결론 :
1. 기업에서 모은 데이터를 시각화해주고 어떤 특성이 있는지 분석을 해라
2. sequence로 프로세스 마이닝을 하여 선후관계를 파악하고 이 사실을 리포트로 기업에 보여줘라
3. 리드 타임 예측을 위한 독립변수를 찾아서 새로운 데이터의 예측을 해라(예측은 라우팅의 카테고리, 제품의 큰 카테고리 등을 독립변수로 넣어라 + EDA로 독립변수를 찾아봐라)
+ 1, 2를 통해서 리드타임에 대한 풍부한 해설 + EDA 결과를 보여줘라, 마지막으로 해결 방안은 스토리 정도로 보여라
- 자문에 대한 내 생각
1. 기업에서 모은 데이터를 시각화해 주고 어떤 특성이 있는지 분석만 해줘도 좋아할 거다.
2. 현재 있는 데이터로 프로세스 마이닝을 돌려서 seq를 분석한다.
3. 새로운 제품에 니즈가 생겼을 때 리드 타임을 예측한다.
4. 시각화, EDA를 리포트에 총 동원하라(현황분석)
5. 최적화는 이렇게 할 수 있다 정도의 스토리로 보이자
- 오해를 한 사실이 있다. (데이터 구축을 하기 전에 확실히 하고 가야 할 문제입니다.)
1. CNC 파일에는 "CNC를 거치는 제품(작업항목1)"과 "개당시간"이 있습니다.
2. 우리가 원하는 것은 MCT와 CNC 공정을 둘 다 거치는 제품이 있을 텐데 그 제품을 MCT셀과 CNC셀에서 동시에 찾아서 동시에 찾은 제품의 이름을 똑같은 거로 바꾸고 그 제품의 MCT 개당시간과 CNC 개당시간을 더하면 CNC와 MCT를 같이 거친 제품의 개당시간입니다.
3. MCT와 CNC를 동시에 거치는 제품은 Apriori에서 1 1 000이 됩니다. 원핫 인코딩처럼 되는 것을 원하는 것이 아니라 동시에 거친 제품이 연관성이 높다는 사실을 도출하기 위한 방법입니다. 등장하는 공정은 모두 1로 만듭니다.
4. MCT 파일에는 "MCT를 거치는 제품(품명)"과 "개당시간"이 있습니다. 근데 CNC 파일에는 "개당시간"은 있는데 "CNC를 거치는 제품"이 품명이 아니라 작업 항목으로 되어있어서 개당시간이 제품을 만드는 소요시간인지 작업 소요시간인지 확실히 단정 짓기 어렵습니다. > 따라서 CNC를 거치는 "품명"과 "개당시간"을 구하기 위해 MCT 파일에 있는 제품(품명)과 비슷해 보이는 품명을 CNC의 작업항목에서 찾고 비슷한 작업항목은 작업이 아닌 제품이라고 봐서 해당 제품의 개당시간을 CNC의 소요시간이라고 보겠습니다.
+ 이를 위한 오픈리파인
① 7월달 MCT의 품명열을 한 줄로 합칩니다.
② 거기서 오픈리파인을 돌려서 비슷한 키워드를 가진 품명끼리 합칩니다.
③ CNC도 제품항목열로 동일한 과정을 거칩니다.
④ 마지막에 MCT와 CNC를 한 줄로 합쳐서 둘이 비슷한 제품명을 찾습니다.
-> 오픈리파인을 사용하면 비슷한 단어를 찾아줍니다. 그러면 MCT와 CNC가 같은 품명을 다르게 표시한 것인지 알 수 있을 것입니다.(이래서 처음부터 기업에서 데이터를 깔끔하게 관리하는 것이 중요합니다.)
https://www.youtube.com/watch?v=oRH-1RG8oQY
11일차
- 프로젝트 이해 : 이번에 프로젝트를 하면서 느꼈습니다. 오랜 기간 프로젝트를 하면 우리가 처음에 무엇을 하려고 했는지 정체성을 잃게 되는 경우가 많습니다. "엄청나게 한 것은 많고 또 결과를 낸 것도 많은데 그래서 우리가 뭘 한 거지?"라는 질문을 서로에게 하게 되더라 이를 위해 프로젝트를 이해해 보겠습니다.
=> 전체 목적
제품 ID, MCT 설비명, CNC 사이클타임, MCT 사이클타임, 사상 사이클타임 등등의 모든 공정의 사이클 타임, 생산량, 버퍼, 유실시간, 양품수, 설비수 등의 독립변수를 잡아서 새로운 데이터가 들어왔을 때 리드타임을 구하자
-> 질문 리스트
1 : 지금은 제품이 주어졌을 때 리드타임을 모르나? 새로운 제품이 들어왔을 때 각 공정별 사이클 타임이 달라진다. 따라서 리드타임을 예측하고 합니다.
ex) 18년 Triton Ch Slid Lift Base Under AL6061각재(제품명)의 MCT/밀링/TAP 공정의 사이클 타임이 5702초입니다. 19년에는 27398초입니다.
4 : 공정별 타임스탬프는 왜 필요한가? sequence 마이닝을 돌리면 sequence 다이어그램이 나옵니다. 이것으로 공정별 사후관계를 시각화해서 어디, 어디에서 병목이 일어나고 어떠한 이유로 이런 리드타임이 나오고의 리드타임에 영향을 미치는 것을 알 수 있습니다.
> 근데 sequence 마이닝을 하면 그것을 그래프로 보여줍니다. 그래서 sequence 마이닝을 하는 건데 이때 타임스탬프가 필요합니다.
+ 리드타임 추출원본을 보면 라우트에 2,3,4행이 제품 Triton Ch Slid Lift Base Under AL6061 각재를 만드는데 필요한 각 공정이 있고 공정의 소요시간이 있습니다.
> 근데 MCT/밀링/TAP공정은 MCT 따로 밀링 따로 있는 게 아니고 큰 틀로 볼 수 있는 3개 공정의 합이 있는데 후처리, 용접은 소요시간이 따로 있습니다. > 그러므로 SEQ를 볼 때 세세하게 어떤 공정이 병목을 일으키라는 볼 수 없지만 큰 틀의 시작시간 끝시간으로 큰 틀의 병목 여부는 알 수 있습니다.
5 : 오픈리파인으로 묶는 이유가 리드타임 파일의 제품명과 CNC 파일의 작업항목이 비슷한지 보기 위함이라는 것이 무슨 말인가?
MCT는 품명이 있다. 근데 CNC는 품명이 아니고 작업 항목이 있습니다. 따라서 작업 항목을 제품명이라고 보기 어렵습니다. 실제로 MCT의 품명을 복사해서 리드타임 파일에서 찾을 수 있습니다. > 근데 CNC의 작업 항목은 리드타임에 없습니다. > 근데 우리는 리드타임 데이터에 있는 제품을 새로운 입력으로 넣을 거기 때문에 리드타임 파일의 제품명에 해당하는 MCT 사이클타임, CNC 사이클 타임이 필요합니다.
> 근데 또 MCT와 CNC는 비슷한 키워드의 제품이 있습니다. > MCT와 CNC에서 비슷한 키워드의 제품이 있다면 CNC의 작업항목을 MCT의 품명으로 바꾸고(오픈리파인으로 묶고) MCT의 품명과 리드타임의 품명은 비슷하니 새로운 입력이 리드타임의 품명으로 들어왔을 때 MCT 사이클 타임은 MCT파일의 소요시간에서 가져오고 CNC 사이클 타임은 CNC파일의 소요시간에서 가져와서 CNC, MCT 소요시간 열을 채울 수 있습니다.
- 역할 분담
일단 데이터를 합칩니다. > 그리고 몇 명은 sequence 프로세스 마이닝을 합니다. > 그리고 몇명은 EDA를 하고 > 통계 전공 팀원은 회귀 분석에서 종속변수에 영향을 많이 미칠 변수를 찾아보겠습니다.
-> 이것을 하면 얻을 수 있는 것
1. EDA를 통해서 의미를 만들 수도 있고 통합 데이터를 더 추릴 수 도 있습니다.
2. SEQ를 통해서 공정별 네트워크의 사후관계를 따져서 어느 공정에서 병목이 많이 일어나는지 알아볼 수 있습니다.
3. 선형회귀 분석으로 예측값을 찾을 수 있습니다.
- 느낀점
종합 데이터의 독립변수를 정하는데 많은 조언을 받았습니다. > 교수님의 조언도 받고 회사 측의 조언도 받았습니다. 내가 프로젝트 초반에 저장해 둔 실제 데이터 활용 프로젝트의 초기 과정을 한 번만 하는 게 아니고 계속 반복하며 새로운 인사이트를 얻고 계속 새롭게 할 수 있는 것을 도출해야 합니다.
> 그리고 그 과정에서 데이터에서 몰랐던 점을 계속해서 깨닫고 목표(리드타임 예측)을 위한 것들을 더 추가할 수 있는 것을 계속 생각해야 합니다. 엑셀보기+데이터 확인 등등 데이터 분석 기초통계 분석 전에 거치는 과정입니다.
∴ 이제부터 할 일 1. 데이터를 합쳐보자, 2. EDA, 3. sequence 마이닝
> 데이터를 합치는 작업은 리드타임 예측과 병목현상 파악을 위한 것으로 리드타임 예측에 필요하다고 생각되는 컬럼들을 다 모으는 작업입니다. 이 과정에서 groupby와 merge로 인한 데이터 중복과 병합 문제를 깊게 이해할 수 있었습니다.
- 배운 점
1. 회귀는 서로 다른 행이 1천개는 돼야 합니다.
2. 군집화도 500개는 되야합니다.
3. 회귀문제는 오차를 계산하여야 하기 때문에 범주형 독립변수는 영향을 별로 안 줍니다.
4. 간단한 데이터 전처리는 엑셀, 워드가 훨씬 편합니다.
+ 지금 우리는 회귀 문제를 하기 위해서 데이터를 모으고 모은 결과 데이터가 1천 개가 넘기를 바라는 것입니다.
'[대외활동] > [데이터 청년 캠퍼스]' 카테고리의 다른 글
데이터 청년 캠퍼스 PART.project 마무리 (0) | 2022.12.15 |
---|---|
데이터 청년 캠퍼스 PART.project 13, 15, 16, 17일차(EDA) (0) | 2022.12.08 |
데이터 청년 캠퍼스 PART.19, 20일차 Clustering (0) | 2022.11.22 |
데이터 청년 캠퍼스 PART.18일차 MongoDB (0) | 2022.11.22 |
데이터 청년 캠퍼스 PART. 11, 12일차 신경망 기반 알고리즘 (0) | 2022.11.18 |