클래스 불균형
클래스 불균형
개요
클래스 불균형(Class Imbalance)은 머신러닝에서 분류 문제를 다룰 때, 특정 클래스의 샘플 수가 다른 클래스에 비해 현저히 적거나 많은 경우를 의미합니다. 예를 들어, 사기 탐지 시스템에서 정상 거래는 수백만 건인 반면 사기 거래는 수천 건에 불과할 수 있으며, 이 경우 사기 클래스(소수 클래스)는 전체 데이터에서 매우 작은 비율을 차지하게 됩니다. 이러한 불균형은 모델 학습 과정에서 중대한 문제를 야기할 수 있으며, 모델이 다수 클래스에 치우친 예측을 하게 되어 소수 클래스의 정확한 식별이 어려워지는 결과를 초래합니다.
클래스 불균형은 의료 진단, 이상 탐지, 스팸 필터링, 신용 평가 등 다양한 실제 응용 분야에서 흔히 발생하며, 이를 적절히 처리하지 않으면 모델의 실용성이 크게 저하될 수 있습니다.
클래스 불균형의 문제점
1. 정확도의 오해
정확도(Accuracy)는 분류 모델의 성능을 평가하는 가장 직관적인 지표이지만, 클래스 불균형 상황에서는 오해의 소지가 큽니다. 예를 들어, 정상 거래가 99%, 사기 거래가 1%인 데이터셋에서 모델이 모든 샘플을 "정상"으로 예측하더라도 정확도는 99%로 매우 높게 나타납니다. 그러나 이는 사기 거래를 전혀 탐지하지 못하는 무의미한 모델임에도 불구하고 높은 성능으로 평가되는 모순을 초래합니다.
2. 모델의 편향
머신러닝 알고리즘은 일반적으로 오차를 최소화하는 방향으로 학습되며, 이 과정에서 다수 클래스에 더 많은 가중치를 두게 됩니다. 결과적으로 소수 클래스의 특성을 제대로 학습하지 못하고, 예측 시 다수 클래스로 치우친 결과를 내놓는 경향이 있습니다.
3. 평가 지표의 신뢰성 저하
정확도 외에도 정밀도(Precision), 재현율(Recall), F1-score, ROC-AUC 등 다양한 평가 지표가 존재하지만, 클래스 불균형 상황에서는 각 지표의 해석이 중요해집니다. 특히 재현율과 F1-score는 소수 클래스의 탐지 능력을 평가하는 데 유용합니다.
클래스 불균형 해결 전략
클래스 불균형을 해결하기 위한 방법은 크게 데이터 레벨 접근법과 알고리즘 레벨 접근법으로 나뉩니다.
1. 데이터 레벨 접근법
데이터 자체를 조작하여 클래스 분포를 균형 있게 만드는 방법입니다.
오버샘플링 (Oversampling)
소수 클래스의 샘플 수를 늘리는 기법입니다. 대표적인 방법으로는:
- 단순 복제: 기존 소수 클래스 샘플을 중복하여 추가.
- SMOTE (Synthetic Minority Over-sampling Technique): 기존 샘플 간의 선형 보간을 통해 새로운 합성 샘플을 생성. 과적합을 줄이는 데 효과적입니다.
언더샘플링 (Undersampling)
다수 클래스의 샘플 수를 줄이는 기법입니다. 단순히 무작위로 샘플을 제거하는 방법 외에도, Tomek Links나 Cluster Centroids와 같은 지능적인 방법이 존재합니다. 다만, 정보 손실의 위험이 있습니다.
하이브리드 접근
오버샘플링과 언더샘플링을 동시에 사용하는 방법으로, SMOTEENN이나 SMOTETomek이 대표적입니다.
2. 알고리즘 레벨 접근법
모델 학습 과정에서 클래스 불균형을 고려하도록 알고리즘을 조정하는 방법입니다.
클래스 가중치 설정
대부분의 머신러닝 라이브러리(예: scikit-learn, XGBoost)는 class_weight 매개변수를 제공하여 소수 클래스에 더 높은 오차 페널티를 부여할 수 있습니다. 예를 들어, class_weight='balanced'를 설정하면 클래스의 역빈도에 따라 자동으로 가중치가 조정됩니다.
비대칭 손실 함수 사용
소수 클래스의 오분류에 더 큰 손실을 부여하는 손실 함수를 설계할 수 있습니다. 예를 들어, Focal Loss는 정확히 분류된 샘플보다 오분류된 샘플에 더 큰 손실을 주어 불균형 문제에 효과적입니다.
평가 지표 선택
클래스 불균형 문제에서는 정확도보다 다음과 같은 지표를 사용하는 것이 바람직합니다:
| 지표 | 설명 |
|---|---|
| 재현율 (Recall) | 실제 양성 중에서 모델이 얼마나 잘 맞췄는가 (소수 클래스 탐지 능력) |
| 정밀도 (Precision) | 모델이 양성으로 예측한 것 중 실제로 양성인 비율 |
| F1-score | 정밀도와 재현율의 조화 평균. 균형 잡힌 평가 가능 |
| ROC-AUC | 다양한 임계값에서의 성능을 종합적으로 평가 |
| PR-AUC (Precision-Recall AUC) | 특히 불균형 데이터에서 ROC-AUC보다 민감한 지표 |
관련 기술 및 도구
- imbalanced-learn 라이브러리: SMOTE, Tomek Links 등 다양한 리샘플링 기법을 제공하는 Python 라이브러리.
- XGBoost / LightGBM:
scale_pos_weight와 같은 파라미터를 통해 클래스 불균형을 처리 가능. - Scikit-learn:
class_weight,[StratifiedKFold](/doc/%EA%B8%B0%EC%88%A0/%EB%8D%B0%EC%9D%B4%ED%84%B0%EA%B3%BC%ED%95%99/%EA%B2%80%EC%A6%9D%20%EA%B8%B0%EB%B2%95/StratifiedKFold)등을 활용한 균형 잡힌 학습 및 검증 지원.
참고 자료
- Chawla, N. V., Bowyer, K. W., Hall, L. O., & Kegelmeyer, W. P. (2002). SMOTE: synthetic minority over-sampling technique. Journal of artificial intelligence research, 16, 321-357.
- He, H., & Garcia, E. A. (2009). Learning from imbalanced data. IEEE Transactions on knowledge and data engineering, 21(9), 1263-1284.
- scikit-learn 공식 문서: https://scikit-learn.org
- imbalanced-learn 문서: https://imbalanced-learn.org
클래스 불균형은 머신러닝 실무에서 반드시 고려해야 할 핵심 이슈 중 하나이며, 적절한 전처리와 평가 전략을 통해 신뢰할 수 있는 모델을 구축할 수 있습니다.
이 문서는 AI 모델(qwen-3-235b-a22b-instruct-2507)에 의해 생성된 콘텐츠입니다.
주의사항: AI가 생성한 내용은 부정확하거나 편향된 정보를 포함할 수 있습니다. 중요한 결정을 내리기 전에 반드시 신뢰할 수 있는 출처를 통해 정보를 확인하시기 바랍니다.