Skip to content

Latest commit

 

History

History
85 lines (62 loc) · 6.54 KB

File metadata and controls

85 lines (62 loc) · 6.54 KB

트러블슈팅 리포트 (2026-04-30)

1. 이슈 개요

  • 날짜: 2026-04-30
  • 주제: 직원 퇴사 예측(Attrition) 모델 고도화 및 불균형 데이터 대응
  • 주요 목표: 극심한 클래스 불균형(퇴사자 16%) 환경에서 실질적인 비즈니스 가치(재현율 확보) 창출.

2. 발생한 문제 (Issue)

[이슈 #1] 데이터 클래스 불균형으로 인한 재현율(Recall) 저하

  • 현상: 일반적인 모델 학습 시 정확도는 높으나, 실제 퇴사자(Target=1)를 거의 잡아내지 못함.
  • 원인 분석: 다수 클래스(근속자)에 편향된 학습으로 인해 소수 클래스의 패턴을 무시함.

[이슈 #2] 하이퍼파라미터 튜닝의 연산 효율성 문제

  • 현상: LightGBM 및 XGBoost의 모든 파라미터를 GridSearch할 경우 연산 시간이 기하급수적으로 증가.
  • 원인 분석: 불필요하게 넓은 탐색 범위 및 핵심 파라미터 집중 부족.

3. 해결 과정 (Solution)

[해결 #1] 불균형 데이터 특화 알고리즘 도입

  • 조치 내용:
    1. XGBoostLGBM에 가중치(scale_pos_weight, is_unbalance) 적용.
    2. 언더샘플링과 앙상블이 결합된 BalancedRandomForestClassifier 도입.
  • 결과: 퇴사자 검거율(Recall)이 기존 1020%대에서 **6070%대**로 극적으로 향상됨.

[해결 #2] 하이퍼파라미터 '다이어트' 및 최적화

  • 조치 내용: max_depth, learning_rate, n_estimators 등 핵심 3요소 위주로 GridSearch 수행.
  • 결과: 튜닝 시간을 1/10로 단축하면서도 F1-score를 0.52까지 끌어올림.

4. 최종 결과 비교 (Final Results)

모델 정확도(Acc) 재현율(Recall) F1-Score 비즈니스 관점의 특징
XGBoost 0.81 0.58 0.49 효율적 자원 배분 (오보가 적음)
LGBM 0.78 0.58 0.46 성능과 속도의 균형
Balanced RF 0.77 0.68 0.49 최고의 안정성 (퇴사자를 가장 잘 잡음)

🏆 최종 선택 모델 및 전략

  • 최종 모델: Voting Classifier (XGB + LGBM + Balanced RF)
  • 최적 전략: 임계값(Threshold) 0.4 적용
  • 최종 성과:
    • 재현율(Recall): 0.75 (퇴사 고위험군 75% 포착)
    • F1-Score: 0.49
    • 비즈니스 가치: 기본값(0.5) 대비 퇴사자 검거율을 12%p 향상시키면서도, 과도한 오보를 효율적으로 관리함(0.3 대비 오보 47% 감소).

5. [추가 트러블슈팅] 항공사 만족도 예측 (Airline Satisfaction)

[이슈 #3] 모델 성능 100% 도달 현상 (Data Leakage)

  • 현상: 모든 모델이 정확도 99~100%를 기록함.
  • 원인: pd.get_dummies() 적용 시 타겟 변수(satisfaction)가 X(독립변수) 데이터에 그대로 포함되는 데이터 누수(Data Leakage) 발생. (모델이 정답지를 보고 품)
  • 해결: X = pd.get_dummies(airline.drop('satisfaction', axis=1))로 정답지를 명시적으로 제거하여 정상적인 성능 평가 환경(60~94%)으로 복구함.

[이슈 #4] 피처 엔지니어링의 역설 (트리 모델 성능 저하)

  • 현상: 14개의 세부 서비스 점수를 3개(Digital, Comfort, Service)의 평균 점수로 묶어 차원을 축소했더니, 강력한 트리 모델(LGBM, XGB)의 성능이 오히려 94%에서 88%로 하락함. 반면 선형 모델(Logistic)은 82~83%로 변화가 없었음.
  • 원인 분석: 앙상블 트리 모델은 세세한 개별 점수(예: "와이파이가 3점 미만인가?")를 기준으로 예리하게 분기점을 잡을 때 성능이 극대화됨. 이를 인위적으로 평균 내어 정보의 '디테일'을 뭉개버리자 트리 모델의 장점이 상쇄됨.

[이슈 #5] 정보의 시너지와 차원의 저주 (Feature Synergy)

  • 현상: 개별 서비스 점수는 묶지 않고 살려두면서, 추가로 생성한 **조합 변수(class_dist_combined: 등급+비행거리)**와 **구간 변수(distance_type)**를 투입했을 때 모델 성능이 가장 안정적으로 높게 나타남(94%).
  • 원인 분석 (정보의 시너지): 트리 모델 스스로 두 변수의 조건을 모두 파악하려면 분기(질문)를 두 번 이상 거쳐야 함. 하지만 인간이 "장거리이면서 이코노미 클래스"라는 조합 변수를 직접 만들어주면, 모델은 단 한 번의 분기로 핵심 이탈 그룹을 찾아내는 **'지름길'**을 얻게 되어 성능이 향상됨.
  • 상한선 주의 (차원의 저주): 변수를 조합하여 늘리는 것은 모델에게 다양한 시각을 제공하지만, 데이터 수(Row) 대비 변수(Column)가 과도하게 많아지면 모델이 패턴 대신 노이즈를 암기하는 **차원의 저주(Curse of Dimensionality)**에 빠짐. (일반적으로 데이터 수가 변수 수의 10배 이상일 것을 권장)

6. 오늘의 레슨 런 (Lessons Learned)

  1. 비즈니스 목적이 지표를 결정한다: 단순히 정확도(Accuracy)를 올리는 것보다, "우리가 어떤 실수를 더 경계해야 하는가(False Negative vs False Positive)"에 따라 모델 선정 기준이 바뀜을 학습함.
  2. 복잡함보다 단순함이 강하다: max_depth=5와 같이 비교적 얕은 나무 모델이 과적합을 방지하고 일반화 성능을 높이는 데 효과적이었음.
  3. 불균형 데이터의 핵심 도구: imbalanced-learn 라이브러리의 BalancedRandomForest는 복잡한 샘플링 과정 없이 강력한 불균형 대응 능력을 보여줌.
  4. 강력한 알고리즘과 피처 엔지니어링의 관계: 트리 기반 최신 알고리즘(XGB, LGBM)을 사용할 때는 인위적인 평균화(차원 축소)보다 원본 데이터의 세부 항목을 그대로 제공하는 것이 모델이 숨은 패턴을 찾는 데 더 유리할 수 있다. (정보 손실 경계)

🚩 최종 마무리 제언

오늘 완성한 'Voting + 임계값 0.4' 모델은 단순히 데이터 분석 결과가 아니라, 기업의 인적 자본 손실을 막기 위한 최적의 의사결정 보조 도구입니다.

  1. 지속적 모니터링: 분기별로 실제 퇴사자 데이터를 업데이트하여 임계값의 유효성을 재검토해야 합니다.
  2. 현장 피드백 루프: 모델이 찍은 대상자와 실제 면담 결과 사이의 괴리를 분석하여 Burnout과 같은 파생 변수를 지속적으로 보강해야 합니다.

데이터의 한계를 기술과 전략으로 극복한 성공적인 프로젝트였습니다.