불균형한 자료에서 정확도가 속이는 이유
한 클래스가 압도적으로 많다고 해 보자. 음성이 95%, 양성이 5%라면 모델은 언제나 음성이라고 답하는 쓸모없는 전략으로도 정확도 95%를 얻어. 드문 클래스의 표본이 그래디언트에 거의 기여하지 못하므로 손실도 그 실수를 충분히 벌하지 않아. 사기, 질병, 결함 탐지에서 흔한 함정이야. 그래서 불균형 자료에서는 정확도만 믿을 수 없어. 소수 클래스의 정밀도와 재현율을 함께 봐야 실제 성능이 보여.
비용이 낮은 방법부터 적용해
(1) class_weight는 fit()에 딕셔너리로 전달해 클래스별 손실 기여도를 조절하고, 드문 클래스의 실수에 더 큰 비용을 줘. 한 줄로 적용할 수 있으니 먼저 시도해. (2) sample_weight는 클래스 단위보다 세밀한 조절이 필요할 때 표본별 가중치를 제공해. (3) 재표집은 소수 클래스를 복제하거나 SMOTE로 합성해 늘리고, 다수 클래스를 줄이는 방식이야. fit()이 자료를 보기 전에 파이프라인에서 수행해.
추론 단계에서는 판정 문턱도 조절할 수 있어
가중치를 적용한 뒤에도 판정 문턱을 조정할 수 있어. 이진 분류기는 보통 0.5를 넘으면 양성으로 판단하지만, 불균형 자료에서 문턱을 0.3으로 낮추면 정밀도를 일부 내주는 대신 재현율을 높일 수 있어. 질병을 놓치는 비용이 잘못된 경보보다 훨씬 클 때 유용하지. 문턱 조정은 학습 뒤에 적용할 수 있으므로 학습 단계의 방법과 함께 쓰기 좋아. 실제 문제는 한 가지 방법보다 둘 이상을 조합해 해결하는 경우가 많아.