클래스 불균형
IT 위키
(Class Imbalance에서 넘어옴)
- Class Imbalance; 클래스 불균형 문제
- 분류 문제에서 각 클래스에 속한 표본의 수가 크게 차이 나는 상태
사기 거래 탐지, 희귀 질환 진단, 이상 탐지처럼 찾으려는 대상이 드문 문제에서 필연적으로 발생한다. 전체의 1%만 양성인 데이터에서 모델이 모두 음성으로 예측해도 정확도는 99%가 되므로, 정확도만 보면 성능이 좋아 보이지만 정작 소수 클래스를 전혀 잡아내지 못한다.
- 모델이 다수 클래스 쪽으로 편향되어 학습된다.
- 정확도(Accuracy)가 성능 지표로서 의미를 잃는다. 정밀도, 재현율, F1 점수, AUC 를 함께 봐야 한다.
- 소수 클래스의 표본이 적어 그 클래스의 패턴을 일반화하기 어렵다.
- 오버샘플링: 소수 클래스의 표본을 늘린다. 단순 복제는 과적합 위험이 있어 SMOTE 처럼 합성 표본을 만드는 기법을 쓴다.
- 언더샘플링: 다수 클래스의 표본을 줄인다. 정보 손실 위험이 있으나 데이터가 매우 클 때 효과적이다.
- 가중치 조정: 소수 클래스의 오분류에 더 큰 비용을 부여한다(Cost-sensitive Learning). 클래스 가중치를 주는 것만으로도 상당 부분 완화된다.
- 임계값 조정: 분류 임계값을 0.5 가 아닌 값으로 옮겨 재현율을 확보한다.
- 앙상블: 배깅·부스팅 계열에 샘플링을 결합한다.
- 클래스가 두 개일 때만 생기는 문제가 아니다. 다중 클래스 분류에서도 클래스 간 표본 수가 치우치면 똑같이 발생한다.
- 가중치 조정(무게 균형)만으로도 해결이 가능하다. 샘플링이 유일한 해법은 아니다.
- 결측값 처리나 이상값 대체와는 다른 범주의 문제다.
