불균형 데이터 (Imbalanced Data)
핵심 요약: 한쪽 클래스가 압도적으로 많을 때, “전부 다수 클래스”라 예측해도 정확도 99%. 하지만 소수 클래스(사기, 희귀 질환)를 전혀 잡지 못한다.
초보자를 위한 핵심 용어
섹션 제목: “초보자를 위한 핵심 용어”- 불균형 데이터(Imbalanced Data): 클래스 간 샘플 수 비율이 극단적으로 차이 나는 데이터. 사기 0.1%, 정상 99.9% 같은 경우.
- Recall(재현율): 실제 양성 중 모델이 맞춘 비율. 사기 10건 중 8건을 잡았으면 Recall = 80%.
- SMOTE: 소수 클래스 샘플 사이를 보간하여 새로운 합성 샘플을 생성하는 기법. 단순 복제보다 다양성이 유지된다.
- AUPRC: Precision-Recall 곡선 아래 면적. 불균형 데이터에서 가장 신뢰할 수 있는 평가 지표.
숫자로 보는 불균형의 함정
섹션 제목: “숫자로 보는 불균형의 함정”상황: 신용카드 거래 1,000건 중 사기 10건, 정상 990건.
| 모델 전략 | 정확도(Accuracy) | 사기 Recall | 실질 가치 |
|---|---|---|---|
| ”전부 정상” 예측 | 99.0% | 0% | 사기 10건 모두 놓침 |
| Class weight 적용 | 97.5% | 70% | 사기 7건 포착 |
| SMOTE + 임계값 0.3 | 96.8% | 90% | 사기 9건 포착 |
정확도 99%인 모델이 가장 쓸모없는 모델이라는 역설이 바로 불균형 데이터의 핵심 문제이다.
불균형 데이터(Imbalanced Data)는 클래스 간 샘플 수의 비율이 극단적으로 다른 데이터를 말한다. 사기 탐지(0.1%), 희귀 질환 진단(1%), 불량품 검출 등 실무의 많은 문제가 여기에 해당한다. 불균형 데이터에서는 다수 클래스에 편향된 모델이 높은 정확도(accuracy)를 보이면서도 실제로는 소수 클래스를 전혀 탐지하지 못하는 문제가 발생한다.
탄생 배경
섹션 제목: “탄생 배경”불균형 데이터 문제를 체계적으로 해결하려는 시도는 Chawla et al.이 2002년에 발표한 SMOTE(Synthetic Minority Oversampling Technique) 논문에서 본격적으로 시작되었다. 이 논문 이전에도 불균형 문제는 알려져 있었지만, 대부분의 대응은 단순 오버샘플링(소수 클래스 복제)이나 언더샘플링(다수 클래스 축소)에 그쳤다.
SMOTE의 핵심 혁신은 소수 클래스의 기존 샘플 사이를 보간(interpolation)하여 새로운 합성 샘플을 생성한다는 아이디어였다. 단순 복제와 달리 다양성을 유지하면서 소수 클래스를 보강할 수 있었고, 이 논문은 현재까지 25,000회 이상 인용된 데이터 과학 분야의 가장 영향력 있는 논문 중 하나가 되었다. SMOTE 이후 Borderline-SMOTE, ADASYN, SMOTE-ENN 등 수십 개의 변형 기법이 등장하며 불균형 데이터 연구의 폭발적 성장을 이끌었다.
핵심 개념
섹션 제목: “핵심 개념”1. 왜 Accuracy가 부적합한 지표인가
섹션 제목: “1. 왜 Accuracy가 부적합한 지표인가”99:1 비율의 데이터에서 “모두 다수 클래스”로 예측하면:
- Accuracy: 99% (높아 보임)
- 소수 클래스 Recall: 0% (전혀 탐지 못함)
적절한 평가 지표: F1 Score, AUROC, AUPRC, MCC (Matthews Correlation Coefficient)
특히 AUPRC (Area Under Precision-Recall Curve)가 불균형 상황에서 가장 정보적이다.
2. 데이터 수준 방법 (Data-Level Methods)
섹션 제목: “2. 데이터 수준 방법 (Data-Level Methods)”| 방법 | 설명 | 장점 | 단점 |
|---|---|---|---|
| Random Oversampling | 소수 클래스 복제 | 단순 | 과적합 위험 |
| Random Undersampling | 다수 클래스 축소 | 학습 속도 향상 | 정보 손실 |
| SMOTE | 소수 클래스 간 보간으로 합성 | 새로운 샘플 생성 | 노이즈 생성 가능 |
| Borderline-SMOTE | 경계 근처 소수 샘플에 집중 | SMOTE 개선 | 경계 정의 필요 |
| ADASYN | 어려운 샘플에 더 많은 합성 | 적응적 | 노이즈 민감 |
| Tomek Links | 경계 다수 클래스 제거 | 경계 정리 | 데이터 손실 |
SMOTE (Synthetic Minority Oversampling Technique):
소수 클래스의 기존 샘플과 그 k-최근접 이웃 사이를 보간하여 새 샘플을 생성한다.
핵심 규칙: SMOTE는 반드시 학습 데이터에만 적용해야 한다. 교차 검증을 사용할 때는 각 fold 내부에서만 적용해야 한다. 교차 검증 전에 적용하면 합성 샘플이 검증 세트에 포함되어 데이터 누수가 발생한다.
3. 알고리즘 수준 방법 (Algorithm-Level Methods)
섹션 제목: “3. 알고리즘 수준 방법 (Algorithm-Level Methods)”Class Weights (클래스 가중치)
섹션 제목: “Class Weights (클래스 가중치)”손실 함수에 역빈도 가중치를 부여한다:
대부분의 프레임워크에서 class_weight='balanced'로 간단히 적용 가능하다.
Focal Loss
섹션 제목: “Focal Loss”
- 이면 일반 Cross-Entropy와 동일
- 가 일반적 (RetinaNet에서 제안)
- 직관: 쉬운 예제(높은 )의 손실 기여를 감소시켜, 모델이 어려운 예제에 집중하게 함
Cost-Sensitive Learning
섹션 제목: “Cost-Sensitive Learning”오분류 비용을 비대칭으로 설정한다. 예를 들어, 사기를 정상으로 오분류하는 비용이 정상을 사기로 오분류하는 비용보다 훨씬 큰 경우.
4. 임계값 조정 (Threshold Moving)
섹션 제목: “4. 임계값 조정 (Threshold Moving)”분류 모델의 기본 임계값 0.5를 조정하여 precision-recall 균형을 변경한다.
최적 임계값 탐색 방법:
- ROC 곡선에서 Youden’s J statistic 최대화
- PR 곡선에서 F1 최대 지점
- 비즈니스 비용 함수 최소화
5. 앙상블 방법
섹션 제목: “5. 앙상블 방법”| 방법 | 설명 |
|---|---|
| BalancedBagging | 각 base learner에 균형 잡힌 부분집합 사용 |
| EasyEnsemble | 여러 undersampled subset으로 앙상블 |
| BalancedRandomForest | 각 트리에서 bootstrap 시 클래스 균형 유지 |
상세 내용
섹션 제목: “상세 내용”불균형 비율에 따른 전략 선택
섹션 제목: “불균형 비율에 따른 전략 선택”실무 가이드라인
섹션 제목: “실무 가이드라인”-
먼저 적절한 평가 지표를 설정하라. Accuracy로는 불균형 데이터의 모델 성능을 판단할 수 없다.
-
가장 간단한 방법부터: class weights → SMOTE → Focal Loss → 앙상블 순으로 시도한다.
-
비즈니스 맥락을 고려: 사기 탐지에서 precision이 중요한지(오탐 비용), recall이 중요한지(미탐 비용)에 따라 전략이 달라진다.
-
오류 분석: 소수 클래스의 오분류 패턴을 분석하면, 추가 특성이나 전처리 개선점을 발견할 수 있다.
언제 사용하는가
섹션 제목: “언제 사용하는가”| 상황 | 추천 방법 |
|---|---|
| 약한 불균형 (10:1 이내) | Class weights |
| 중간 불균형 (100:1 이내) | SMOTE + Class weights / Focal Loss |
| 극심한 불균형 (1000:1+) | 이상 탐지 접근, 앙상블 |
| 실시간 임계값 조정 필요 | Threshold moving |
| 객체 탐지 | Focal Loss |
실전 사례
섹션 제목: “실전 사례”신용카드 사기 탐지: 정확도 99.8%의 함정
섹션 제목: “신용카드 사기 탐지: 정확도 99.8%의 함정”한 금융 기관에서 신용카드 사기 탐지 모델을 구축했을 때, 초기 모델의 정확도(Accuracy)는 99.8%였다. 경영진은 이 수치에 만족했지만, 실제로는 심각한 문제가 숨어 있었다:
- 전체 거래 중 사기 비율은 0.2%에 불과했다
- 모델은 사실상 모든 거래를 “정상”으로 예측하고 있었다
- 사기 거래의 실제 포착률(Recall)은 겨우 30%에 그쳤다 — 사기 10건 중 7건을 놓치고 있었던 것이다
이 문제를 해결하기 위해 팀은 다음과 같은 단계적 접근을 시도했다:
- 평가 지표 변경: Accuracy 대신 AUPRC와 Recall을 주요 지표로 채택
- SMOTE 적용: 학습 데이터의 사기 샘플을 합성 보강하여 모델이 사기 패턴을 더 많이 학습하도록 함
- 임계값 조정: 분류 임계값을 0.5에서 0.3으로 낮춰 사기 포착률을 높임
- 비용 민감 학습: 사기를 놓치는 비용(FN)이 오탐(FP)보다 100배 크다는 비즈니스 비용 구조를 반영
최종 모델은 사기 포착률 95%를 달성했고, 정확도는 98.5%로 약간 낮아졌지만 실제 사기 피해액을 대폭 줄이는 데 성공했다.
흔한 오해와 함정
섹션 제목: “흔한 오해와 함정”-
SMOTE를 교차 검증 전에 적용: 가장 흔하고 심각한 실수. 합성 샘플이 검증 세트에 영향을 미쳐 성능이 과대 추정된다.
-
“Accuracy가 95%이니 좋은 모델이다”: 불균형 데이터에서 높은 accuracy는 의미 없다. 소수 클래스의 recall과 precision을 반드시 확인하라.
-
오버샘플링으로 테스트 세트도 변경: 테스트 세트는 실제 데이터 분포를 반영해야 한다. 오버/언더샘플링은 학습 데이터에만 적용한다.
-
모든 불균형 문제에 SMOTE 적용: 고차원 데이터나 복잡한 경계에서 SMOTE가 노이즈를 생성할 수 있다. class weights가 더 안전한 경우도 많다.
-
비용 비대칭을 무시: “어떤 오류가 더 비싼가”를 고려하지 않으면, 최적화 방향이 잘못될 수 있다.