품질관리(QAQC) 데이터 부트캠프(본캠프)

최종 프로젝트 중간 점검

Wat_zy 2026. 1. 22. 23:14

데이터 불균형과 싸우며 최적의 모델을 찾기까지

1. 프로젝트 개요 & 목표

주제: 항원(Antigen) 데이터를 활용한 질병/상태 분류 예측 모델 개발

핵심 목표: 

  • 단순 정확도가 아닌 실질적인 예측력을 나타내는 MCC가 0.3 이상 달성하는 모델 선정
  • 모델의 목적에 따라 High Recall 또는 High Precision을 선택적으로 최적화

2. 주요 난관 및 애로사항 (The Struggle)

🚨 1. "99%의 함정": 극심한 데이터 불균형 (Class Imbalance)

  • 문제 상황: Negative 데이터가 압도적으로 많아, 모델이 무조건 "Negative"로만 예측해도 정확도가 90% 이상 나오는 현상 발생. 정작 중요한 Positive(질병/상태)는 전혀 맞추지 못함.
  • 힘들었던 점:
    • 단순히 데이터를 늘릴 수가 없었음.
    • 모델이 학습을 '포기'하고 쉬운 길(All Negative)만 택하려 함.
  • 해결책:
    • Class Weight 조절: scale_pos_weight를 단순 비율(ratio)뿐만 아니라, multiplier(1.5배~5배)를 적용하여 모델에게 "틀리면 크게 혼난다"는 신호를 줌.
    • 평가 지표 변경: Accuracy를 버리고 MCC(Matthews Correlation Coefficient)Recall/Precision을 메인 지표로 선정.

🤯 2. "최적의 파라미터를 찾아서": 튜닝의 딜레마

  • 문제 상황: 모델(CatBoost, XGBoost)의 파라미터가 너무 많음.
  • 시행착오:
    • 초반에 GridSearchCV를 시도했으나, 모든 조합을 다 돌리느라 시간이 너무 오래 걸리고 비효율적이었음.
    • 단순히 파라미터만 돌리니 과적합(Overfitting)이 발생하거나, 학습 시간이 무한정 길어짐.
  • 해결책:
    • Optuna 도입: 베이지안 최적화 방식을 사용하여 스마트하게 탐색 범위를 좁힘.
    • Custom Objective: 단순히 점수만 높이는 게 아니라, if mcc >= 0.3 return recall과 같이 조건부 최적화 로직을 구현하여 "최소한의 건전성"을 확보함.

🛠 3. Feature Engineering의 오해와 진실

  • 문제 상황: 습관적으로 모든 범주형 변수에 One-Hot Encoding(OHE)을 적용함.
  • 깨달음:
    • 차원이 너무 늘어나 학습 속도가 저하됨.
    • CatBoost는 자체적으로 범주형 변수를 처리하는 알고리즘(cat_features)이 훨씬 강력하다는 것을 알게 됨.
  • 해결책:
    • OHE 코드를 제거하고, 데이터를 String 타입으로 변환하여 모델에 직접 주입.
    • 결과적으로 코드도 간결해지고 학습 성능도 향상됨.

📉 4. "운빨"을 제거하라: 검증 신뢰성 문제

  • 문제 상황: train_test_split으로 한 번만 나눈 데이터(Hold-out)로 튜닝했을 때, 검증 세트에 따라 점수가 들쭉날쭉함. 내가 찾은 파라미터가 진짜 좋은 건지, 운이 좋았던 건지 확신할 수 없었음.
  • 해결책:
    • Stratified K-Fold (5-Fold) + Early Stopping 도입.
    • 시간은 더 걸리지만, 5번의 테스트를 거쳐 평균적으로 잘하는 파라미터를 찾아내어 "모델의 일반화 성능"을 확보함.

3. 최종 기술 스택 및 전략 (Solution)

  • 모델: CatBoost Classifier (High Recall 전략), XGBoost (High Precision 전략)
  • 최적화 도구: Optuna (Multi-objective optimization logic 적용)
  • 검증 전략: Stratified K-Fold CV
  • 핵심 파라미터:
    • scale_pos_weight: 불균형 해소의 핵심 Key.
    • cat_features: CatBoost 성능 극대화.
    • early_stopping_rounds: 학습 효율성 증대.

4. 회고 및 배운 점 (Retrospective)

  • "튜닝은 무작정 돌리는 게 아니라 전략이다."
    • 무조건 GridSearch를 돌리는 것보다, 모델이 어떤 파라미터에 민감한지 파악하고 Optuna로 효율적으로 찾는 것이 중요하다는 것을 배움.
  • "평가 지표가 모델의 운명을 결정한다."
    • 비즈니스 목표(놓치면 안 되는가? 오진하면 안 되는가?)에 따라 Recall과 Precision 중 무엇을 택할지, 그리고 MCC로 어떻게 밸런스를 잡을지 고민하는 과정이 가장 의미 있었음.
  • "데이터 전처리는 모델에 맞게."
    • 남들이 다 한다고 OHE를 하는 게 아니라, 사용하는 모델(CatBoost)의 특성에 맞춰 전처리 방식을 바꿔야 한다는 점을 배움.

 

이후 PPT에서 표현해야 할 요소