클래스 불균형
IT 위키
더 많은 작업
(Class Imbalance에서 넘어옴)
- Class Imbalance; 클래스 불균형 문제
- 분류 문제에서 각 클래스에 속한 표본의 수가 크게 차이 나는 상태
사기 거래 탐지, 희귀 질환 진단, 이상 탐지처럼 찾으려는 대상이 드문 문제에서 필연적으로 발생한다. 전체의 1%만 양성인 데이터에서 모델이 모두 음성으로 예측해도 정확도는 99%가 되므로, 정확도만 보면 성능이 좋아 보이지만 정작 소수 클래스를 전혀 잡아내지 못한다.
- 모델이 다수 클래스 쪽으로 편향되어 학습된다.
- 정확도(Accuracy)가 성능 지표로서 의미를 잃는다. 정밀도, 재현율, F1 점수, AUC 를 함께 봐야 한다.
- 소수 클래스의 표본이 적어 그 클래스의 패턴을 일반화하기 어렵다.
- 가중치 조정: 소수 클래스의 오분류에 더 큰 비용을 부여한다(Cost-sensitive Learning). 클래스 가중치를 주는 것만으로도 상당 부분 완화된다.
- 임계값 조정: 분류 임계값을 0.5 가 아닌 값으로 옮겨 재현율을 확보한다.
- 앙상블: 배깅·부스팅 계열에 샘플링을 결합한다.
- 클래스가 두 개일 때만 생기는 문제가 아니다. 다중 클래스 분류에서도 클래스 간 표본 수가 치우치면 똑같이 발생한다.
- 가중치 조정(무게 균형)만으로도 해결이 가능하다. 샘플링이 유일한 해법은 아니다.
- 결측값 처리나 이상값 대체와는 다른 범주의 문제다.
불균형 데이터에서는 모델이 다수 클래스만 예측해도 대부분을 맞히므로 정확도는 오히려 높게 나온다. "불균형 데이터는 정확도가 낮아지는 경향이 있다" 는 틀린 설명이다. 떨어지는 것은 소수 클래스를 얼마나 찾아내는지를 나타내는 민감도(재현율)다. 소수 클래스의 데이터가 적을수록 모델이 그 패턴을 배우지 못해 민감도가 낮아진다.
| 구분 | 과소표집(언더샘플링) | 과대표집(오버샘플링) |
|---|---|---|
| 방법 | 다수 클래스(정상 데이터)의 일부만 골라 쓴다 | 소수 클래스를 복제하거나 합성해 늘린다 |
| 대표 기법 | 랜덤 과소표집, 토멕 링크(Tomek Links), CNN(Condensed Nearest Neighbor), OSS(One-Sided Selection) | 랜덤 과대표집, SMOTE, Borderline-SMOTE, ADASYN |
| 장점 | 데이터가 줄어 학습이 빠르다 | 원래 데이터를 버리지 않아 정보 손실이 없다 |
| 한계 | 무작위로 일부만 고르면 데이터 유실이 매우 크고, 때로는 중요한 정상 데이터를 잃는다 | 같은 표본을 단순 복제하면 그 표본에 과적합되어 새 데이터에 대한 일반화 오류가 생긴다. 데이터가 늘어 학습 시간도 길어진다 |
- SMOTE 는 소수 클래스 표본과 그 최근접 이웃 사이에 새 표본을 합성해, 단순 복제보다 과적합 위험을 줄인다.
- 토멕 링크는 서로 다른 클래스이면서 가장 가까운 이웃인 표본 쌍을 찾아 그중 다수 클래스 쪽을 지워 경계를 깨끗하게 한다.