DisplaySensor-Anomaly-Analysis
DisplaySensor-Anomaly-Analysis
├── 📁 data
| ├── 📃 factory_all_columns.txt # 모든 컬럼명
| └── 📃 right_columns.txt # 오른쪽공정 컬럼명
├── 📃 1-1_컬럼명_구분.ipynb
├── 📃 1_결측치처리와_상관계수저장.ipynb
├── 📃 2_PCA와_RandomForest(VIF).ipynb
├── 📃 3_PCA와_RandomForest(noVIF).ipynb
└── 📁old # 주차별 수행한 소스파일
생산공정 중 양품/불량품에 큰 영향을 미치는 저수율 요인 5개를 찾아내는 것을 목표로 함
- 웨이퍼 식각 후 테스트 단계에서 센서 측정값의 1시간 평균 데이터를 분석하여 저수율 요인을 찾고자 함
- 웨이퍼 식각이란?
- 반도체 공정 중 하나로 TFT(박막트랜지스터)의 회로 패턴을 만들기 위해 웨이퍼의 필요한 부분만 남기고 불필요한 부분은 깎아내는 공정
- 웨이퍼 식각이란?
- 테스트 과정에서 웨이퍼 상태의 반도체 칩의 불량여부를 선별 가능함
- 저수율 요인을 찾아 설계상의 문제점이나 제조상의 문제점을 발견해 수정 가능함
- 저수율 웨이퍼 발생하는 원인은 반도체 공정의 각 프로세서에서 레시피(온도,압력,가공 시간 등)대로 작업이 이루어지지 않았기 때문임.
- 공정 중 저수율 요인을 찾아내면 해당 프로세서의 집중적인 관리를 통해 고수율 웨이퍼의 생산효율을 극대화 할 수 있음.
- 최적의 Etching 공정 레시피를 제공하고자 함
2021/7/26 ~ 2021/8/26
- Language : python 3.7 ver
- Hardware / Server : ubuntu / windows
- IDE : Colab, Jupyter lab
- Tools : github, Google Drive, slack
- Analysis Library : matplotlib, pandas, NumPy, scikit learn, seaborn
- 초기 데이터 shape : 8145 x 841
- 데이터의 정보 : 2016/ 1/ 1 부터 2016/ 12/ 31 까지 매 시간마다 측정된 불량 탐지 센서의 데이터. 컬럼명을 통해 생산라인이 왼쪽과 오른쪽으로 나누어져 있다는 것을 알 수 있음.
- 1번째 컬럼은
YYYY-mm-dd hh
형태의 날짜 시간정보이므로 인덱스로 지정하였음 - 레이블은 L.RD , L.Vac, R.RD , R.Vac으로 왼쪽과 오른쪽 생산 라인의 RollDown, Vaccum공정의 폐기율을 의미함
- 모든 행이 결측치인 피처 7개 제거
- 나머지 결측치가 3개의 행에 존재 => 시계열 데이터이므로 ffill로 결측치를 채움
- 분산을 출력하여 분산 값이 0에 수렴하는 피처 7개 제거 특정 컬럼의 분산이 0이라는 것은 해당 컬럼의 데이터가 거의 변하지 않는다는 의미이므로 불량률에 영향을 주고 있다고 보기 어려움
- 피처명에 L, R이 반복 등장함 -> L-왼쪽 생산라인, R-오른쪽 생산라인일 것이라 추측 -> 동일한 공정을 수행하는 별개의 라인이라면 두 라인의 데이터를 모두 사용하는 것은 동일한 데이터가 최종 분류 모델에 중복하여 영향력을 주게 됨
- Left, Right 컬럼별로 분류하여 상관관계 히트맵을 그려본 결과, 두 라인에서 피처간 관계는 비슷한 것을 알 수 있음
- 두 생산 라인 중 하나만 선택하여 피처의 영향력을 조사하도록 함
- 그 중 피처 수가 더 적은 Right 라인의 피처를 제외하였음
- 상관계수가 0.9이상인 피처를 401개 제거
- 두 피처 간의 상관관계가 높다는 것은, 하나의 피처 값이 다른 피처의 값에 큰 영향을 주고있음을 의미함
- 모델링에 영향을 미치는 원인들이 모두 비슷한 중요도로 반영되게 하려면 종속성이 낮은 피처들만을 이용하여 모델을 만드는 것이 타당함
- VIF계수가 30이하가 될 때까지 VIF계수가 높은 피처을 제거하였음
- 30이라고 정한 이유는 피처의 수가 너무 많아 10은 너무 낮은 것 같아 30으로 지정함. 숫자의 의미는 딱히 없음
- 이 방법으로 피처를 제거하여 XBGoost 분류를 한 결과, 남은 피처가 모델을 충분히 설명하지 못하는 것 같음 => 순차적으로 진행되는 작업으로 수행 시간이 오래 걸리는 작업인 것에 비해 중요 피처가 삭제된 것 같아서 생략
4) 상관계수를 이용한 피처 제거까지의 전처리 수행한 피처를 대상으로 PCA주성분 분석을 진행하여 누적 기여율과 Elbow Point를 확인하였음
- 누적 기여율 : 누적 기여율이 0.9이상이 되는 피처의 개수는 24개로 전체 데이터의 90%설명 가능함
- Elbow Point : 전체 데이터에 대해 가장 잘 설명하는 주성분의 설명 변수는 0.7로 설명변수의 Scree plot을 그려본 결과, 감소폭이 완만해지기 전까지 7개의 주성분으로 전체 데이터를 전반적으로 설명할 수 있음 👉중요한 피처는 7개일 것으로 추축됨.
레이블 분류 기준은 폐기율 레이블의 값이 0.01보다 큰 데이터를 불량품, 0.01이하인 데이터를 양품으로 지정하였음
불량품 선정 기준을 폐기율 레이블의 상위 5%인 데이터에 대해 불량품으로 지정하여 XGBoost Classiffier 모델을 수행하여 재현율을 확인하였으나, 불균형한 Decision Tree가 그려지고, 불량품에 영향을 줄 수 있다고 판단되는 피처를 찾기 어려웠음
따라서 , 양품과 불량품의 비율이 불균형한 것으로 판단되어 레이블 값이 0.01이상인 데이터를 불량품으로 지정하면 불량에 영향을 주는 피처를 찾을 수 있을 것이라 판단함.
분류 모델 알고리즘인 SVM, Ensemble의 Random Forest와 XGBoost를 수행하였음
- 모델 훈련
- 하이퍼파라미터 조정
- feature_importance로 24개의 피처 확인
- 3에서 확인한 24개의 피처로 Decision Tree모델 훈련 수행
- 트리구조 탐색하여 5개의 중요 피처 선정
양품이라고 판정했지만 실제 불량이 발생한 경우를 예방해야 하므로 재현율(recall)이 적절한 평가지표라고 판단하였음 FP가 높고, FN이 낮은지 중점적으로 살펴야 함
- 최상단에서 가장 먼저 노드를 나누는 피처
- 지니계수가 낮고, 샘플 수가 많고, 불량으로 많이 분류한 노드의 피처
- 어떤 노드에서 피처를 기준으로 다음 노드에서 클래스의 개수가 확연히 분류되는 피처
XGBoost를 이용한 모델링 방식이 제일 재현율이 우수하였으며, DecisionTree로부터 5개의 중요 피처를 선정하여 레이블과 피처와의 관계를 확인하였음
- 중요피처 5개
LOWER.AB6.Z83.TMP.1TIC41656.PV
TMP.TIN..BAY.5.LEFT.1TI30205.PV
X.1.LEHR.O2.ANALYZER.1AI44111.PV
ROOF.HEATING.Zone63.1JIC31163.PV
S_AB10_AB11_L_L
- 피처와 레이블과의 관계
y값의 0:양품, 1:불량품이며, x값은 피처의 값이라고 할 때 x의 특정값을 기준으로 불량과 양품의 발생 빈도가 나누어지는 것을 확인할 수 있다.
- 피처 값의 범위에 따른 양품/불량품 확률로부터 불량품에 가장 큰 영향을 미치는 피처 5개를 도출함
- 불량품을 검출하는 분류 모델을 수립함
- 불량품에 영향을 주는 피처 5개 검출함
- 피처 조건에 따른 불량률 판단기준 확립함
데이터 분석 결과를 생산시스템에 적용하면 다음과 같은 측면에서 현장운영이 수월해질 것으로 기대됨
- 수율안정화
- 현장관리 수준향상
- 지속적으로 불량요인을 발생시키는 피처 데이터를 축척함으로써 지도학습 모델을 이용한 불량탐지 자동 검출 시스템 구축가능