최종 프로젝트

Chapter.9 최종 실전 자동화 프로젝트 (7)

devjjun 2026. 7. 2. 20:37

TIL(Today I Learned)


1️⃣실전 자동화 프로젝트 (6)

오늘의 작업 요약

  • 조기종료 유/무 비교를 반영한 베이스라인 모델링 비교
  • 및 피처 선택 로직 개선

1. 베이스라인 모델링 — 조기종료 유/무 비교

목표: Y_Quality(연속형) 예측을 회귀로 학습한 뒤, fold별 임곗값으로 3-클래스 품질 등급을 분류

  • 후보 모델 3종: XGBoost, CatBoost, LightGBM
  • 타겟 변수 처리
    1. Y_Quality를 회귀 타깃으로만 학습, 분류는 사후 처리
    2. Product_id, product_code, timestamp, LINE_ 관련 컬럼 등 누수 피처 제거
    3. 회귀→분류 임곗값도 fold별 train에서만 뽑기
  • 주요 내용
    • Y_Quality 자체 회귀 성능(R² 0.54~0.68, 편차 큼)
    • Stratified K-Fold + fold별 피처 선택 + 클래스 가중치 + 오버샘플링 조합, 안정성 확보
    • 베이스라인 최고 성적 모델 => CatBoost

2. 신규 모델링 — A_31 / TO_31 회귀·분류

  • 타깃: Y_Quality(회귀), Y_Class(0/1/2 다중분류)
  • 검증 방식: Y_Class 기준 StratifiedKFold 5-fold (품질 등급 비율을 fold마다 동일하게 유지)
  • 베이스라인 모델: CatBoost, LightGBM, XGBoost
    • A_31은 316개 피처 중 반복 Stratified K-Fold 기반 선택으로 약 93개로 축소
  • 분류 모델
    • A_31 클래스 비율: 24/47/28% (비교적 균형)
    • TO_31 클래스 비율: 8/83/9% (심한 불균형)
    • 회귀와 동일하게 fold 내부 8:2로 조기종료
    • 불균형 데이터 특성상 정확도 대신 Macro F1을 주요 지표로 채택
    • Confusion Matrix / Classification Report로 클래스별 오류 패턴 분석

3. 피처 선택 로직 개선

  • 반복 Stratified K-Fold 기반 중요도 산출
    • 변수가 다수 존재해 과적합을 예방하기 위해 반복
    • 5-fold StratifiedKFold × 3회 반복 = 총 15개 fold 조합에서 학습
    • 반복해도 꾸준히 중요한 피처만 남도록 설계
  • 결과물: A_31_selected_nested.csv, TO_31_selected_nested.csv 로 데이터 저장

4. 선택 피처 덴드로그램 확인

  • 상위 13개 피처 (X_248 ~ X_1743): 서로 독립적
    • 거리 0.1~0.6대에서 합쳐짐 → 상관관계가 낮음
    • 중요도 상위 피처들이 서로 안 겹친다는 건 다중공선성 우려 X
  • 하위 8개 피처 (X_2841, X_240, X_43, X_318, X_73, X_90, X_769, X_786): 거의 복제본
    • 0.001 이하에서 뭉침 상관관계 확인
  • X_1099, X_1864는 중간 다리 역할

5. 개선된 로직 베이스라인 성적 비교

Y_Quality 회귀 성적 비교
Y_Quality 기반 Y_Class 품질 등급 예측 분류

  • K-Fold 중첩으로 개선된 회귀모델 최적 => 앙상블 모델 
  • 품질 지표에 따른 분류 모델 최적 => 앙상블 모델 
분류 모델의 F1을 중점적으로 개선 방향성 탐색 필요 

 


추후 진행 예정

  • Y_Quality 회귀 성능(R² 0.5대) 개선 여지 확인 Optuna or Grid Search
  • TO_31처럼 극심한 불균형 데이터의 소수 클래스 예측을 개선할 방안
  • 하위 8개 클러스터에서 대표 1~2개만 남기고 나머지는 제거

💡 느낀점

누수 방지가 생각보다 손이 많이 갔다. 피처 선택과 회귀→분류 임곗값 산출을 fold마다 따로 계산하도록 바꾸는 과정에서 실제 일반화 성능에 더 가까워졌다는 걸 체감했다. 조기종료가 의미 있게 작동하는지 확인하는 절차가 중요했다. 조기종료를 켰다는 사실 자체보다 조기종료가 실제로 트리 수를 줄이고 있는가를 검증하는 게 더 중요하다는 걸 느꼈다. 반복 K-Fold로 피처 중요도를 검증하니 우연히 중요해 보이는 피처가 꽤 많았다는 걸 알게 됐다.5-fold를 3번 반복해서 15개 조합으로 걸러보니, 단순 평균 중요도만 볼 때보다 선택되는 피처 수가 줄었는데, 오히려 이게 더 신뢰할 수 있을 것 같다고 느꼈다.