정확도가 거짓말하기 쉬운 조건
고객의 1%만 해지한다면 모두 ‘해지 안 함’으로 답하는 모델도 정확도 99%를 얻어. 숫자는 높지만 한 명도 찾아내지 못하니 쓸모는 없어. 범주 불균형의 첫 문제는 모델 구조보다 평가 질문이 틀렸다는 데 있어. 드문 양성을 얼마나 찾고 그 대가로 거짓 경보를 몇 개 내는지 봐야 해. 양성 비율이 달라지면 같은 정밀도와 정확도의 의미도 달라지므로 운영 환경의 실제 비율로 평가해야 하고.
혼동행렬에서 비용을 읽어
참양성, 거짓양성, 참음성, 거짓음성의 개수를 실제 업무 행동으로 번역해. 해지 고객을 놓치면 얼마가 들고, 남을 고객에게 쿠폰을 주면 얼마가 드는지 적어야 지표를 고를 수 있어. 양성을 놓치는 비용이 크면 재현율을 더 중시하고, 사람 검토 자리가 적다면 정밀도를 일정 수준 이상으로 유지해야 하지. F-beta, 고정 정밀도에서의 재현율, 기대 비용처럼 목표에 맞는 지표가 여기서 나와.
PR 곡선이 드문 양성에 더 솔직해
ROC-AUC는 양성과 음성의 순위를 폭넓게 보여주지만 음성이 압도적으로 많을 때 거짓양성의 실제 부담이 희석될 수 있어. 정밀도-재현율 곡선과 PR-AUC는 찾아낸 양성 가운데 진짜가 얼마나 되는지 더 직접 보여줘. 그래도 곡선 아래 넓이 하나로 끝내지 말고 팀이 실제로 운영할 문턱에서 건수와 비용을 확인해야 해.
세 가지 조절 손잡이
- 평가 지표: 정확도 대신 PR-AUC, F-beta, 고정 정밀도의 재현율, 기대 비용을 써.
- 판단 문턱: 모델은 그대로 두고 비용표와 처리 능력에 맞는 확률 기준을 골라.
- 학습 표본: 범주 가중치, 다수 범주 축소, SMOTE 같은 소수 범주 합성을 비교해.
재표본은 학습 안에서만 해
자료를 나누기 전에 소수 범주를 복제하거나 합성하면 원본과 닮은 행이 검증 쪽으로 새어 점수가 부풀어. 교차검증의 각 학습 폴드 안에서만 재표본하고 검증 폴드는 원래 비율로 남겨야 해. scikit-learn과 imbalanced-learn 파이프라인으로 순서를 묶으면 실수를 줄일 수 있어.
50 대 50은 목표가 아니야
균형 잡힌 학습 표본이 언제나 최선인 건 아니야. 과도한 복제는 과적합을 만들고 확률 보정을 흐릴 수 있어. 먼저 비용이 거의 없는 class_weight="balanced"를 기준선으로 두고, 재표본 방식이 같은 운영 지표에서 실제로 나은지 비교해. 마지막 확률은 실제 범주 비율의 검증 자료에서 다시 보정해야 해.
"교과서가 그랬다는 이유로 50/50 balance를 추구하지 마. 옳은 balance는 너가 진짜 신경 쓰는 metric을 최소화하는 그거야." 클래스 불균형 공부하면서 배운 최고의 인사이트입니다. 무조건 소수 클래스를 샘플링 업하든가 ,smote, rose...사용하든가 아무 생각없이 자동으로 설정했어요.(자격증 공부때문에).