스파르타클럽 내일배움캠프 QA/QC 5기 05/04 TIL
2026. 5. 4. 21:00ㆍ내일배움캠프 TIL
1. 프로젝트 개요
철강 제조 공정에서 발생하는 7종 표면 결함(Pastry, Z_Scratch, K_Scratch, Stains, Dirtiness, Bumps, Other_Faults)을 예측하는 다중 클래스 분류 모델을 개발하는 프로젝트를 진행했다.
- 데이터: 1,941개 샘플, 27개 공정 변수
- 타겟: One-Hot 인코딩된 7개 결함 유형 → idxmax()로 단일 레이블 변환
- 클래스 불균형 존재: Other_Faults(34.7%) vs Dirtiness(2.8%)
2. 기존 모델(2차/3차) 문제점 분석
2차 모델 문제점
- 27개 변수 중 19개만 수동 선택 → Log_X_Index, Log_Y_Index 등 주요 변수 누락
- XGBoost 하이퍼파라미터 오타: n_estimator → n_estimators, sub_sample → subsample
- 존재하지 않는 파라미터 사용: num_boost_around
- 평가지표로 F1-Weighted만 사용 → 소수 클래스 성능 파악 불가
3차 모델 개선점 및 잔존 문제
- 일부 오타 수정, DBSCAN/SMOTE 파이프라인 추가 등 개선
- 그러나 피처 수동 선택, Optuna 튜닝 함수 내 파라미터 오타 여전히 존재
- DBSCAN 탐색 시 테스트셋 F1으로 평가 → 정보 누출(data leakage) 위험
3. 새로운 베이스라인 모델 구축
핵심 설계 원칙
- 원본 27개 변수 전체 사용 (수동 선택 X)
- LabelEncoder로 문자열 레이블 → 숫자 변환 (XGBoost 호환)
- F1-Macro를 주 평가지표로 설정
베이스라인 모델 3종 비교
RandomForest / XGBoost / LightGBM
배운 점
- XGBoost는 문자열 레이블을 직접 받지 못한다. LabelEncoder로 숫자 변환이 필수.
- Colab에서 셀 1의 변수를 수정한 후에는 런타임 재시작 후 순서대로 재실행해야 이전 메모리의 변수가 간섭하지 않는다.
4. 전체 파이프라인 구성
기존 3차 모델의 구조를 유지하되 문제점을 수정하여 전체 파이프라인을 구성했다.
파이프라인 흐름
데이터 로드 → Train/Test 분할 → 베이스라인 평가
→ DBSCAN 이상치 제거 (CV 기준 탐색) → SMOTE 오버샘플링
→ 4개 모델 비교 (DT, RF, XGB, LGBM)
→ Optuna 하이퍼파라미터 튜닝 (100 trials)
→ Soft Voting 앙상블 → 최종 테스트셋 평가
주요 수정 사항
항목 기존(3차) 수정 후
| 피처 | 19개 수동 선택 | 27개 전체 사용 |
| 파라미터 오타 | n_estimator, sub_sample 등 | n_estimators, subsample |
| DBSCAN 평가 | Test F1 기준 (정보 누출) | CV F1-Macro 기준 |
| 평가지표 | F1-Weighted만 | F1-Macro + F1-Weighted |
| SMOTE | 별도 적용 | imblearn Pipeline 내 통합 |
5. 성능 개선 시도
F1-Macro 0.80~0.85 수준에서 추가 개선을 위해 3가지 방향을 종합 적용했다.
5-1. 피처 엔지니어링 (17개 파생변수 추가)
- 기하학적: Width, Height, Area_Ratio, Aspect_Ratio, Compactness
- 밝기 관련: Luminosity_Range, Mean_Luminosity, Luminosity_Std_Proxy
- 위치 관련: X_Center, Y_Center, Relative_X
- 인덱스 조합: Edge_Square_Ratio, Log_Area_X_Ratio, XY_Index_Product, Edge_XY_Sum
- 상관계수 1.0인 변수 제거: TypeOfSteel_A400, Y_Maximum
5-2. 전처리 강화
- StandardScaler → RobustScaler로 변경 (이상치에 강건)
- Mutual Information 기반 피처 중요도 확인
5-3. 모델 확장 + Stacking 앙상블
- 모델 추가: ExtraTrees, GradientBoosting (총 5개)
- Optuna trials 100 → 150으로 확대
- Soft Voting + Stacking(메타 모델: LightGBM) 앙상블 구성
6. 오늘 배운 핵심 개념 정리
F1 Score vs 예측 신뢰도
- F1 Score: 모델 전체의 분류 성능 (Precision × Recall 조화 평균)
- 예측 신뢰도: 개별 샘플의 예측 확률 → predict_proba() 사용
- F1-Macro: 모든 클래스를 동등하게 평가 → 클래스 불균형 시 필수
- F1-Weighted: 샘플 수 비례 가중 → 다수 클래스에 쏠림
Data Leakage 방지
- DBSCAN 하이퍼파라미터 탐색 시 테스트셋으로 평가하면 과적합 위험
- 반드시 Cross Validation으로만 평가해야 함
SMOTE 적용 시 주의점
- CV 폴드마다 train에만 적용해야 함 → imblearn.pipeline.Pipeline 사용
- 전체 데이터에 SMOTE 적용 후 분할하면 정보 누출 발생
Stacking vs Voting
- Voting: 각 모델의 예측을 단순 평균/다수결
- Stacking: 각 모델의 예측을 새로운 피처로 사용하여 메타 모델이 추가 학습 → 일반적으로 더 높은 성능
7. 다음 할 일
- [ ] 개선 파이프라인 Colab 실행 후 결과 확인
- [ ] 베이스라인 대비 성능 향상폭 비교
- [ ] 최종 베스트 모델 선정 및 결과 정리
'내일배움캠프 TIL' 카테고리의 다른 글
| 스파르타클럽 내일배움캠프 QA/QC 5기 05/07 TIL (0) | 2026.05.07 |
|---|---|
| 스파르타클럽 내일배움캠프 QA/QC 5기 05/06 TIL (0) | 2026.05.06 |
| 스파르타클럽 내일배움캠프 QA/QC 5기 04/23 TIL (1) | 2026.04.23 |
| 스파르타클럽 내일배움캠프 QA/QC 5기 04/22 TIL (0) | 2026.04.22 |
| 스파르타클럽 내일배움캠프 QA/QC 5기 04/21 TIL (0) | 2026.04.21 |