콘텐츠로 이동

불균형 데이터 (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.396.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-최근접 이웃 사이를 보간하여 새 샘플을 생성한다.

xnew=xi+λ(xnnxi),λU(0,1)x_{new} = x_i + \lambda \cdot (x_{nn} - x_i), \quad \lambda \sim U(0, 1)

핵심 규칙: SMOTE는 반드시 학습 데이터에만 적용해야 한다. 교차 검증을 사용할 때는 각 fold 내부에서만 적용해야 한다. 교차 검증 전에 적용하면 합성 샘플이 검증 세트에 포함되어 데이터 누수가 발생한다.

3. 알고리즘 수준 방법 (Algorithm-Level Methods)

섹션 제목: “3. 알고리즘 수준 방법 (Algorithm-Level Methods)”

손실 함수에 역빈도 가중치를 부여한다:

wc=NCncw_c = \frac{N}{C \cdot n_c}

대부분의 프레임워크에서 class_weight='balanced'로 간단히 적용 가능하다.

FL(pt)=αt(1pt)γlog(pt)FL(p_t) = -\alpha_t (1 - p_t)^\gamma \log(p_t)

  • γ=0\gamma = 0이면 일반 Cross-Entropy와 동일
  • γ=2\gamma = 2가 일반적 (RetinaNet에서 제안)
  • 직관: 쉬운 예제(높은 ptp_t)의 손실 기여를 감소시켜, 모델이 어려운 예제에 집중하게 함

오분류 비용을 비대칭으로 설정한다. 예를 들어, 사기를 정상으로 오분류하는 비용이 정상을 사기로 오분류하는 비용보다 훨씬 큰 경우.

분류 모델의 기본 임계값 0.5를 조정하여 precision-recall 균형을 변경한다.

최적 임계값 탐색 방법:

  • ROC 곡선에서 Youden’s J statistic 최대화
  • PR 곡선에서 F1 최대 지점
  • 비즈니스 비용 함수 최소화
방법설명
BalancedBagging각 base learner에 균형 잡힌 부분집합 사용
EasyEnsemble여러 undersampled subset으로 앙상블
BalancedRandomForest각 트리에서 bootstrap 시 클래스 균형 유지

불균형 비율에 따른 전략 선택 다이어그램

  1. 먼저 적절한 평가 지표를 설정하라. Accuracy로는 불균형 데이터의 모델 성능을 판단할 수 없다.

  2. 가장 간단한 방법부터: class weights → SMOTE → Focal Loss → 앙상블 순으로 시도한다.

  3. 비즈니스 맥락을 고려: 사기 탐지에서 precision이 중요한지(오탐 비용), recall이 중요한지(미탐 비용)에 따라 전략이 달라진다.

  4. 오류 분석: 소수 클래스의 오분류 패턴을 분석하면, 추가 특성이나 전처리 개선점을 발견할 수 있다.


상황추천 방법
약한 불균형 (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건을 놓치고 있었던 것이다

이 문제를 해결하기 위해 팀은 다음과 같은 단계적 접근을 시도했다:

  1. 평가 지표 변경: Accuracy 대신 AUPRC와 Recall을 주요 지표로 채택
  2. SMOTE 적용: 학습 데이터의 사기 샘플을 합성 보강하여 모델이 사기 패턴을 더 많이 학습하도록 함
  3. 임계값 조정: 분류 임계값을 0.5에서 0.3으로 낮춰 사기 포착률을 높임
  4. 비용 민감 학습: 사기를 놓치는 비용(FN)이 오탐(FP)보다 100배 크다는 비즈니스 비용 구조를 반영

최종 모델은 사기 포착률 95%를 달성했고, 정확도는 98.5%로 약간 낮아졌지만 실제 사기 피해액을 대폭 줄이는 데 성공했다.


  1. SMOTE를 교차 검증 전에 적용: 가장 흔하고 심각한 실수. 합성 샘플이 검증 세트에 영향을 미쳐 성능이 과대 추정된다.

  2. “Accuracy가 95%이니 좋은 모델이다”: 불균형 데이터에서 높은 accuracy는 의미 없다. 소수 클래스의 recall과 precision을 반드시 확인하라.

  3. 오버샘플링으로 테스트 세트도 변경: 테스트 세트는 실제 데이터 분포를 반영해야 한다. 오버/언더샘플링은 학습 데이터에만 적용한다.

  4. 모든 불균형 문제에 SMOTE 적용: 고차원 데이터나 복잡한 경계에서 SMOTE가 노이즈를 생성할 수 있다. class weights가 더 안전한 경우도 많다.

  5. 비용 비대칭을 무시: “어떤 오류가 더 비싼가”를 고려하지 않으면, 최적화 방향이 잘못될 수 있다.