TIL(Today I Learned)
1️⃣최종 프로젝트(13)
통계 검정 (유의수준 α = 0.05)
| 검정 | 목적 | 결론 |
|---|---|---|
| Shapiro–Wilk (정규성) | 모수 vs 비모수 검정 선택 근거 | 정규성 기각 → 비모수 검정 채택 |
| Mann–Whitney U | 제품군 A vs TO 품질 차이 | 수준(중앙값) 차이는 유의하지 않음 |
| Kruskal–Wallis | 생산라인 간 품질 차이 | 라인 효과 유의 (공정 관리 인자) |
| Spearman + FDR 보정 | 센서–타깃 상관 유의성 | 다중검정 거짓양성을 q-value로 통제 |
| Kruskal–Wallis | 센서의 등급 판별력 | 막두께·습도·온도·압력 계열이 핵심 |
제품군 A와 TO는 중앙값 차이는 없지만, 분산(A가 약 2배로 넓음)과 센서 구성이 크게 달라 분리 모델링이 타당
상관 구조 · 덴드로그램
거리 = 1 − |상관| 로 센서를 계층 군집하면 같은 물리량(진공 베이스압력 계열 등)끼리 뭉칩니다. → 피처선택에서 대표만 남기는 근거.


2. 전처리 — STEP 1~10
트리 모델에 넣을 수 있는 깨끗한 피처 행렬로 정리.
| STEP | 하는 일 | 파라미터 |
|---|---|---|
| 1 | 제품군 분리 (A_31 / T_31·O_31→TO) | — |
| 2 | 누수 컬럼 분리 (Y_Quality·Y_Class·ID·시간) | — |
| 3 | 위장 결측(999/9999/-999/-9999) → NaN | placeholder |
| 4 | 완전 결측 컬럼 제거 | — |
| 5 | 결측 60% 초과 컬럼 제거 | 0.60 |
| 6 | 상수·제로분산 컬럼 제거 | nunique≤1, std=0 |
| 7 | 저분산 컬럼 제거 (min-max 정규화 후) | 0.01 |
| 8 | 고상관 컬럼 제거 (|corr|>임계) | 0.95 |
| 9 | 범주형 LINE 원-핫 인코딩 |
drop_first |
| 10 | 남은 결측 유지 (트리 모델이 처리) | — |
STEP 3(위장 결측 → NaN)을 결측·분산 판단보다 먼저 해야, 위장 결측이 제대로 반영
결측 비율 분포

3. 피처 선택 — Nested CV로 정직하게
- 값이 같거나 거의 상수인 피처 제거
- 상관 높은 피처는 대표 하나만 (계층 군집 → 덴드로그램 시각화)
- permutation importance로 순위 매기기 (CV 평균)
- 피처 개수를 늘려보며 1-SE 규칙으로 최적 개수 결정
피처 덴드로그램
색이 갈리는 지점이 클러스터 경계(임계 = 1 − 0.90 = 0.10). 같은 색 가지로 묶인 센서들은 중복 정보 → 그중 하나만 대표

모델별 Nested CV
바깥 fold는 채점만, 안쪽은 훈련 데이터만 보고 피처를 고릅니다. 회귀 예측을 확정 임계값으로 사후 등급화해 macro-F1로 채점
제품군 A — 최종 모델 XGBoost, 선택 피처 12개
| 모델 | macro-F1 | 정확도 | RMSE | R² |
|---|---|---|---|---|
| XGBoost | 0.711 | 0.715 | 0.00562 | 0.661 |
| Ensemble(평균) | 0.702 | 0.709 | 0.00560 | 0.669 |
| CatBoost | 0.675 | 0.677 | 0.00569 | 0.663 |
| LightGBM | 0.596 | 0.599 | 0.00667 | 0.532 |
제품군 TO — 최종 모델 CatBoost, 선택 피처 3개
| 모델 | macro-F1 | 정확도 | RMSE | R² |
|---|---|---|---|---|
| CatBoost | 0.680 | 0.861 | 0.00306 | 0.565 |
| Ensemble(평균) | 0.646 | 0.877 | 0.00291 | 0.608 |
| LightGBM | 0.613 | 0.856 | 0.00308 | 0.558 |
| XGBoost | 0.601 | 0.855 | 0.00321 | 0.518 |
최종 선택 피처 중요도

4. 모델링 — 회귀 → 확정 임계값 분류
별도 분류 모델을 만드는 대신, 회귀 예측값을 제품군별 확정 임계값으로 나누기
| 구성 | 내용 |
|---|---|
| 모델 | LightGBM · XGBoost · RandomForest · Ensemble(VotingRegressor 평균) |
| 검증 | KFold(5, shuffle, seed=42) |
| 회귀 지표 | RMSE · MAE · R² |
| 분류 지표 | macro-F1 · 정확도 · 혼동행렬 |
| 임계값 | A: 0.5251 / 0.5351, TO: 0.5251 / 0.5349 |
회귀 성능 (RMSE · R²)

제품군 A 회귀 성능(KFold):
| 모델 | RMSE | MAE | R² |
|---|---|---|---|
| XGBoost | 0.00489 | 0.00354 | 0.748 |
| Ensemble | 0.00492 | 0.00359 | 0.745 |
| RandomForest | 0.00500 | 0.00364 | 0.737 |
| LightGBM | 0.00541 | 0.00403 | 0.688 |
소수 등급 가중치 효과 (가중치 OFF vs ON)
sample_weight(등급 경계 기반 역빈도 + 상한 cap 3)를 각 훈련 fold에서만 계산해 누수 방지
| 제품군 | 가중치 | macro-F1 | 등급별 F1 [0, 1, 2] |
|---|---|---|---|
| A (XGBoost) | OFF | 0.713 | [0.629, 0.733, 0.776] |
| A (XGBoost) | ON | 0.742 | [0.685, 0.753, 0.786] |
| TO (CatBoost) | OFF | 0.643 | [0.469, 0.933, 0.526] |
| TO (CatBoost) | ON | 0.651 | [0.558, 0.909, 0.485] |
혼동행렬 (가중치 ON)

다음 할 일
- 하이퍼파라미터 재튜닝 및 임계값 최적화
- TO 제품군 피처(3개)가 지나치게 적은지 재검토
- 최종 파이프라인 앙상블 전략 정리
💡 느낀점
덴드로그램을 통해 군집화된 센서 데이터들을 임계값을 조정해서 동일 항목들로 군집화 되게 조정해볼 예정이다. T/O의 선택된 피처가 성능지표를 통해 뽑아낸 근거있는 결론이기는 하지만 지나치게 적어서 3개로 정말 충분한지 과소적합이 있지는 않은지 어느 방향으로 편향되는지 혼동행렬과 다음 할 일을 통해 증명해나갈 예정이다.
'최종 프로젝트' 카테고리의 다른 글
| Chapter.9 최종 실전 자동화 프로젝트 (17) (0) | 2026.07.27 |
|---|---|
| Chapter.9 최종 실전 자동화 프로젝트 (16) (0) | 2026.07.23 |
| Chapter.9 최종 실전 자동화 프로젝트 (14) (0) | 2026.07.21 |
| Chapter.9 최종 실전 자동화 프로젝트 (13) (0) | 2026.07.20 |
| Chapter.9 최종 실전 자동화 프로젝트 (12) (1) | 2026.07.13 |