오늘 한거
# TIL — Unified Features 기반 FDC 조기경보 시스템 재구축 및 기존 방식 비교
## 오늘 한 일
오늘은 기존에 진행했던 `metal_etch_fdc` 방식과 별도로, `unified_features.csv`를 기반으로 FDC 조기경보 시스템을 처음부터 다시 구축했다. 기존 방식은 EV/OES/RFM 원본 데이터를 직접 정렬하고 bin 단위 anomaly score를 계산하는 구조였다면, 이번 방식은 이미 wide-format으로 펼쳐진 `unified_features.csv`의 컬럼명을 파싱해 source / sensor / time index 구조를 복원하는 방향으로 진행했다.
즉, row 방향의 시계열이 아니라 컬럼 방향에 펼쳐진 시계열 구조를 다시 해석하고, 이를 기반으로 통계 검정, fault type별 이탈도 분석, 머신러닝, MPCA, EWMA/CUSUM, 최종 경고 정책, Streamlit 대시보드까지 구성했다.
---
## 1. Unified 데이터 구조 해석
`unified_features.csv`는 단순 통계 요약 데이터가 아니라, 컬럼명에 source, sensor, time index가 포함된 wide-format 시계열 데이터로 해석했다.
예시는 다음과 같다.
```text
EV__Pressure_t00
EV__Pressure_t01
OES__395.8_t00
OES__395.8_t01
RFM__S1V1_t00
RFM__S1V1_t01
```
이를 통해 EV, OES, RFM의 시계열 구조를 복원했다.
| Source | Sensor 수 | Time index 수 | Feature 수 |
| ------ | -------: | -----------: | --------: |
| EV | 17 | 100 | 1,700 |
| OES | 129 | 38 | 4,902 |
| RFM | 67 | 28 | 1,876 |
전체 wafer는 123개였고, calibration은 103개, fault는 20개였다.
fault는 20종이 각각 1개씩 존재하는 구조였다.
---
## 2. 통계 검정 결과와 한계
처음에는 calibration 103개와 fault 전체 20개를 비교하는 방식으로 Mann-Whitney U test, Welch t-test, FDR 보정을 수행했다.
결과적으로 FDR 보정 후 유의 feature는 0개였다.
이 결과는 “정상과 fault 차이가 없다”는 의미가 아니라, fault 20개가 서로 다른 fault type으로 구성되어 신호가 희석된 결과로 해석했다.
예를 들어 RF 계열 fault는 RFM에서 강하게 나타날 수 있고, BCl3 계열 fault는 EV gas flow 쪽에서 나타날 수 있으며, Pr 계열 fault는 OES에서 나타날 수 있다. 그런데 이들을 모두 하나의 fault 그룹으로 묶으면 각 fault별 특성이 평균화되어 단변량 검정에서 뚜렷하게 드러나지 않는다.
따라서 fault 전체 통계 검정만으로 feature를 고르는 방식은 한계가 있었다.
---
## 3. fault type별 정상 기준 이탈도 분석
이 문제를 보완하기 위해 3-B 단계에서 fault type별로 calibration 분포와 비교하는 이탈도 분석을 진행했다.
중요한 점은 fault type별 샘플이 1개뿐이므로 이 분석은 가설검정이 아니라는 것이다. p-value나 유의성으로 해석하지 않고, calibration 기준에서 얼마나 벗어났는지를 z-score, ±3σ 초과 여부, RMS-z로 확인했다.
주요 결과는 다음과 같다.
| Fault 계열 | 두드러진 Source | 해석 |
| --------------- | ----------- | --------------------------- |
| RF/TCP 일부 fault | RFM | RF 전압/전류/고조파 계열 신호 이탈 |
| BCl3 -5 | EV | BCl3 Flow 관련 이탈 |
| Pr +2 / Pr +3 | OES | 특정 OES 파장대 이탈 |
| Cl2 계열 일부 | OES | 플라즈마 emission profile 변화 후보 |
특히 `RF +10`, `TCP +30`에서는 RFM `S3I2` 관련 이탈이 매우 크게 나타났다. 다만 z-score가 수천 단위로 커진 값은 calibration 표준편차가 매우 작아서 과대평가되었을 가능성이 있으므로, 실제 원인으로 단정하지 않고 이상 후보 변수로 해석했다.
---
## 4. 머신러닝 모델 비교
다음으로 정상/fault 이진 분류 모델을 비교했다.
사용한 모델은 다음과 같다.
```text
Logistic Regression
RandomForest
ExtraTrees
LightGBM
XGBoost
CatBoost
```
검증 방식은 StratifiedKFold를 사용했고, feature selection은 fold 내부에서 수행하여 leakage를 줄이는 방향으로 설계했다.
최선 모델은 `RandomForest, k=100`이었다.
| 지표 | 값 |
| --------- | -----: |
| Accuracy | 0.9106 |
| Precision | 0.9091 |
| Recall | 0.5000 |
| F1 | 0.6452 |
| ROC-AUC | 0.8830 |
| PR-AUC | 0.7767 |
| FN | 10 |
| FP | 1 |
정상 wafer는 잘 구분했지만, fault 20개 중 10개를 놓쳤다.
즉, 머신러닝 단독 모델은 오경보는 적지만 fault 미탐지가 많아 FDC 조기경보 시스템으로는 부족했다.
이 결과를 통해 ML 모델은 최종 판단용 단독 모델이 아니라, `fault_probability`를 제공하는 보조 신호로 활용하는 방향이 적절하다고 판단했다.
---
## 5. MPCA T²/Q score 적용
ML 모델이 놓친 fault를 보완하기 위해 EV, OES, RFM을 각각 block으로 보고 MPCA를 적용했다.
PCA는 calibration wafer 103개만 사용해 학습했고, fault wafer는 학습에 사용하지 않았다. 정상 기준 PCA 모델을 만든 뒤, 각 wafer가 정상 패턴에서 얼마나 벗어났는지 T² score와 Q residual score로 계산했다.
* T² score: PCA score 공간에서 정상 패턴과 얼마나 멀리 떨어졌는지
* Q score: PCA가 설명하지 못한 잔차 에너지
결과적으로 Q score가 T² score보다 fault 탐지에 더 민감했다.
| Score | fault 초과 수 |
| --------- | ---------: |
| EV_Q 95% | 18/20 |
| OES_Q 95% | 19/20 |
| RFM_Q 95% | 15/20 |
가장 중요한 결과는 ML에서 놓친 FN wafer 10개를 MPCA가 모두 탐지했다는 점이다.
즉, ML 단독 분류에서는 놓친 fault도 정상 PCA 패턴에서 벗어난 잔차 기반 이상으로는 잡을 수 있었다.
---
## 6. EWMA / CUSUM 조기경보
MPCA raw score는 fault 탐지는 잘했지만, calibration false alarm이 너무 높았다.
특히 raw_Q와 raw_any는 fault recall은 100%였지만 calibration 오탐이 99~100% 수준으로 나타났다. 즉, fault는 다 잡지만 정상도 거의 다 잡는 문제가 있었다.
이를 보완하기 위해 EWMA와 CUSUM을 적용했다.
* EWMA: 최근 이상 추세를 부드럽게 추적
* CUSUM: 작은 이상 신호가 지속적으로 누적되는지 감지
결과적으로 CUSUM Q가 가장 현실적인 후보였다.
| 방법 | Fault Recall | Calibration FAR |
| ------- | -----------: | --------------: |
| raw_Q | 1.000 | 0.990 |
| raw_any | 1.000 | 1.000 |
| ewma_Q | 1.000 | 0.175 |
| cusum_Q | 1.000 | 0.165 |
CUSUM Q는 fault 탐지율을 유지하면서 calibration 오탐을 크게 줄였다.
---
## 7. 최종 경고 정책 선택
최종적으로 ML fault probability와 CUSUM Q, warning/critical ratio를 결합한 `E_ml_cusum` 정책을 선택했다.
최종 성능은 다음과 같다.
| 항목 | 결과 |
| ----------------------- | -----: |
| Fault 탐지 | 20/20 |
| Fault recall | 1.000 |
| Critical recall | 1.000 |
| Calibration false alarm | 9/103 |
| Calibration FAR | 8.7% |
| ML FN 보완 탐지 | 10/10 |
| 평균 lead_time_ratio | 0.9926 |
이 정책은 ML 단독 모델의 낮은 recall 문제를 MPCA-CUSUM으로 보완했고, raw score 방식의 과도한 오탐 문제는 ML probability와 ratio 조건으로 줄였다.
따라서 최종 구조는 다음과 같이 정리할 수 있다.
```text
ML fault_probability
+
MPCA Q residual score
+
CUSUM trend accumulation
+
warning / critical ratio
↓
NORMAL / WARNING / CRITICAL 최종 판정
```
---
## 8. 기존 metal_etch_fdc와 비교
기존 `metal_etch_fdc`는 EV/OES/RFM 원본 데이터를 bin 단위로 통합하고, 정상 기준 z-score RMS 방식으로 anomaly score를 계산했다.
이번 `unified_features_fdc`는 wide-format time-index 구조를 복원한 뒤 MPCA, Q residual, EWMA/CUSUM, 최종 정책 결합까지 적용했다.
비교 결과는 다음과 같다.
| 항목 | 기존 metal_etch_fdc | 이번 unified_features_fdc |
| ----------------------- | ----------------: | ----------------------: |
| Fault warning 탐지 | 16/20 = 80.0% | 20/20 = 100% |
| Fault critical 탐지 | 15/20 = 75.0% | 20/20 = 100% |
| Calibration false alarm | 26/104 = 25.0% | 9/103 = 8.7% |
| ML FN 보완 | 제한적 | 10/10 보완 |
| 이상탐지 방식 | z-score RMS 기반 | MPCA Q + CUSUM 기반 |
| 대시보드 방향 | 분석 결과 중심 | 운영형 FDC 모니터링 중심 |
최종 FDC 성능 기준으로는 이번 unified 방식이 더 우수했다.
탐지율은 높아졌고, calibration false alarm은 크게 줄었다.
다만 기존 방식은 구조가 단순해서 설명이 쉽다는 장점이 있었다. 반면 unified 방식은 MPCA, Q residual, CUSUM, ratio 조건까지 들어가므로 성능은 좋지만 해석과 설명은 더 복잡하다.
---
## 9. Streamlit 대시보드 개선 방향
이번에는 최종 결과를 바탕으로 Streamlit 대시보드도 구성했다. 처음에는 분석 결과를 많이 담으려다 보니 화면이 복잡해질 수 있었다. 이후 reference 이미지를 참고해 밝은 테마의 업무형 대시보드로 새로 구성하기로 했다.
방향은 다음과 같다.
* 밝은 회색 배경
* 흰색 카드형 KPI
* 파란색 포인트 컬러
* NORMAL / WARNING / CRITICAL 색상 구분
* 너무 많은 차트를 한 화면에 넣지 않고 페이지별 그룹화
* Overview에서는 전체 상태와 정책 성능만 표시
* Wafer Monitoring에서는 선택 wafer의 시계열 score 중심 표시
* Source & Feature에서는 원인 확정이 아닌 이상 후보 source로 표현
대시보드는 분석용 화면이 아니라, 공정 상태를 빠르게 확인하는 FDC 모니터링 화면처럼 구성하는 것이 더 적절하다고 판단했다.
---
## 오늘 배운 점
오늘 가장 크게 배운 점은, 같은 데이터를 사용하더라도 **시계열 구조를 어떻게 복원하고 이상 score를 어떻게 설계하느냐에 따라 FDC 성능이 크게 달라진다**는 것이다.
처음에는 ML 모델 성능을 높이는 것이 중요하다고 생각했지만, 실제로는 ML 단독 모델의 recall이 0.50에 그쳤다. 그런데 MPCA Q residual score와 CUSUM을 결합하자 ML이 놓친 fault를 모두 보완할 수 있었다.
즉, 공정 FDC에서는 단순 분류 모델보다 정상 패턴을 기준으로 한 이탈도, 잔차, 누적 변화 감지가 중요할 수 있다.
또한 fault type이 각각 1개뿐인 데이터에서는 일반적인 통계 검정이나 supervised learning만으로는 한계가 크다. 이런 경우 fault 전체를 하나로 묶기보다, fault type별 정상 기준 이탈도와 block-level anomaly score를 함께 보는 방식이 더 적절했다.
---
## 한계
이번 결과가 좋아 보이지만 그대로 일반화하면 안 된다.
* fault wafer가 20개뿐이다.
* fault type별 샘플이 1개씩이다.
* calibration false alarm이 0은 아니다.
* lead_time_ratio는 실제 초 단위 시간이 아니라 normalized progress 기준이다.
* source별 기여도는 실제 root cause 확정이 아니다.
* 독립 test set 검증이 없다.
* 실제 streaming 환경에서 검증된 것은 아니다.
따라서 이번 결과는 production 적용 성능이 아니라, 탐색적 FDC 조기경보 시스템 구축 결과로 보는 것이 맞다.
---
## 최종 정리 문장
오늘은 `unified_features.csv`를 기반으로 EV/OES/RFM의 time-index 구조를 복원하고, 통계 검정, fault type별 이탈도 분석, 머신러닝, MPCA T²/Q, EWMA/CUSUM, 최종 경고 정책까지 다시 구성했다. 머신러닝 단독 모델은 fault recall이 0.50으로 부족했지만, MPCA Q residual score와 CUSUM을 결합한 `E_ml_cusum` 정책은 fault 20건을 모두 탐지하고 calibration false alarm을 8.7%로 낮췄다. 기존 `metal_etch_fdc`보다 최종 탐지율과 오탐률 모두 개선되었으며, FDC 조기경보 시스템에서는 ML 단독보다 정상 패턴 이탈도와 누적 이상 score를 결합하는 하이브리드 접근이 더 적합하다는 점을 확인했다.
'QAQC_5기 부트캠프 > 실전 프로젝트' 카테고리의 다른 글
| [내일배움캠프] QA/QC_5기 본캠프(0608) (0) | 2026.06.08 |
|---|---|
| [내일배움캠프] QA/QC_5기 본캠프(0604) (0) | 2026.06.04 |
| [내일배움캠프] QA/QC_5기 본캠프(0602) (1) | 2026.06.02 |
| [내일배움캠프] QA/QC_5기 본캠프(0601) (0) | 2026.06.01 |
| [내일배움캠프] QA/QC_5기 본캠프(0529) (0) | 2026.05.29 |