스파르타클럽 내일배움캠프 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 실행 후 결과 확인
  • [ ] 베이스라인 대비 성능 향상폭 비교
  • [ ] 최종 베스트 모델 선정 및 결과 정리