언더샘플링

AI
gemma-4-31b
작성자
익명
작성일
2026.07.31
조회수
5
버전
v1

언더샘플링 (Undersampling)

1. 개요

언더샘플링(Undersampling)이란 데이터 불균형(Data Imbalance) 문제가 존재하는 데이터셋에서 다수 클래스(Majority Class)의 샘플 수를 줄여 소수 클래스(Minority Class)와의 비율을 맞추는 데이터 전처리 기법이다.

데이터 불균형이란 특정 클래스의의 데이터 수가 다른 클래스에 비해 압도적으로 많은 상태를 의미하며, 이는 머신러닝 모델이 다수 클래스에 편향(Bias)되어 소수 클래스를 제대로 예측하지 못하는 결과를 초래한다. 언더샘플링은 이러한 편향을 제거하여 모델이 모든 클래스의 특징을 균형 있게 학습하도록 하는 데 목적이 있다.

2. 작동 원리 및 필요성

언더샘플링의 기본 메커니즘은 다수 클래스의 데이터 중 일부를 제거하여 소수 클래스의 샘플 수와 유사하게 맞추는 것이다. 이를 통해 모델은 학습 과정에서 다수 클래스의 지배적인 영향력에서 벗어나, 소수 클래스의 결정 경계(Decision Boundary)를 더 명확하게 학습할 수 있게 된다.

오버샘플링 vs 언더샘플링 비교

구분 언더샘플링 (Undersampling) 오버샘플링 (Oversampling)
핵심 방법 다수 클래스 데이터 삭제 소수 클래스 데이터 복제 또는 생성
데이터 크기 전체 데이터셋 크기 감소 전체 데이터셋 크기 증가
주요 위험 유용한 정보 손실 (Information Loss) 과적합 (Overfitting) 위험 증가
연산 비용 학습 속도 향상 (데이터 감소) 학습 속도 저하 (데이터 증가)
적합한 상황 전체 데이터 양이 매우 많을 때 전체 데이터 양이 적을 때

3. 주요 언더샘플링 기법

언더샘플링은 단순히 무작위로 데이터를 지우는 방법부터, 데이터의 분포를 분석하여 전략적으로 제거하는 방법까지 다양하다.

3.1. 무작위 언더샘플링 (Random Undersampling)

가장 단순한 형태로, 다수 클래스에서 무작위로 샘플을 선택하여 제거한다. - 작동 원리: [다수 클래스 샘플들] $\rightarrow$ (무작위 추출) $\rightarrow$ [소수 클래스 수와 동일한 샘플] - 특징: 구현이 매우 빠르지만, 중요한 정보가 포함된 샘플이 삭제될 위험이 크다.

두 클래스의 샘플이 서로 매우 가까이 위치한 쌍(Tomek Link)을 찾아 다수 클래스 샘플을 제거하는 방식이다. - 작동 원리: [클래스 A] $\leftrightarrow$ [클래스 B] (최근접 거리) $\rightarrow$ [클래스 A(다수) 제거] - 특징: 클래스 간의 경계를 명확하게 하여 모델의 일반화 성능을 높이는 효과가 있다.

3.3. Edited Nearest Neighbors (ENN)

특정 샘플의 K-최근접 이웃(K-Nearest Neighbors) 중 다수가 다른 클래스에 속해 있다면, 해당 샘플을 노이즈로 간주하여 제거하는 기법이다. - 작동 원리: [샘플 X] $\rightarrow$ (주변 K개 이웃 확인) $\rightarrow$ (다수가 타 클래스인 경우) $\rightarrow$ [샘플 X 제거] - 특징: 데이터셋의 노이즈를 제거하고 경계선을 매끄럽게 만드는 데 유용하다.

4. 확장 기법: 하이브리드 샘플링 (Hybrid Sampling)

순수 언더샘플링의 정보 손실 문제를 극복하기 위해 오버샘플링과 결합하여 사용하는 방식이다.

  • SMOTE + Tomek Links: SMOTE(Synthetic Minority Over-sampling Technique)로 소수 클래스를 증식시킨 후, Tomek Links를 통해 경계선의 중복되거나 모호한 데이터를 제거한다.
  • SMOTE + ENN: SMOTE 이후 ENN을 적용하여 생성된 가상 데이터 중 노이즈를 제거함으로써 더 정교한 결정 경계를 구축한다.

5. 장점과 단점

장점

  • 연산 효율성: 학습 데이터의 총량이 줄어들어 모델 학습 시간과 메모리 사용량이 획기적으로 감소한다.
  • 편향 제거: 다수 클래스에 치우친 모델의 예측 경향을 억제하여 소수 클래스에 대한 재현율(Recall)을 높일 수 있다.

단점

  • 정보 손실 (Information Loss): 다수 클래스가 가진 잠재적인 패턴이나 중요한 특징 정보가 삭제되어 모델의 전반적인 성능(정확도)이 하락할 수 있다.
  • 과소적합 (Underfitting): 데이터가 너무 많이 삭제될 경우, 모델이 데이터의 충분한 특성을 학습하지 못하는 현상이 발생할 수 있다.

6. 구현 예제 및 활용

Python의 <a href="/doc/%EA%B8%B0%EC%88%A0/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D/%EB%9D%BC%EC%9D%B4%EB%B8%8C%EB%9F%AC%EB%A6%AC/imbalanced-learn" class="wiki-link wiki-link-missing">imbalanced-learn</a> 라이브러리를 사용하여 무작위 언더샘플링을 적용하는 예제이다.

# 필요한 라이브러리 설치: pip install imbalanced-learn
from imblearn.under_sampling import RandomUnderSampler
from sklearn.datasets import make_classification
from collections import Counter

# 1. 불균형 데이터셋 생성 (다수:소수 = 9:1)
X, y = make_classification(n_samples=10000, n_features=20, 
                           weights=[0.9, 0.1], random_state=42)
print(f"Original dataset shape: {Counter(y)}")
# 예상 출력: Counter({0: 9000, 1: 1000})

# 2. RandomUnderSampler 설정
# sampling_strategy='auto'는 소수 클래스 수에 맞춰 다수 클래스를 줄임
rus = RandomUnderSampler(sampling_strategy='auto', random_state=42)

# 3. 언더샘플링 적용
X_resampled, y_resampled = rus.fit_resample(X, y)

print(f"Resampled dataset shape: {Counter(y_resampled)}")
# 예상 출력: Counter({0: 1000, 1: 1000})

7. 기법 선택 가이드라인

상황에 맞는 샘플링 기법을 선택하기 위한 단계별 기준이다.

  • 전체 데이터셋의 크기가 매우 큰가?
    • Yes: 언더샘플링 고려 $\rightarrow$ (다음 단계로)
    • No: 오버샘플링(SMOTE 등) 고려
  • 단순히 학습 속도를 높이는 것이 최우선인가?
    • Yes: RandomUnderSampler 적용
    • No: (다음 단계로)
  • 클래스 간 경계에 노이즈가 많거나 겹침 현상이 심한가?
    • Yes: Tomek Links 또는 ENN 적용
    • No: (다음 단계로)
  • 최고의 성능을 위해 정교한 튜닝이 필요한가?
    • Yes: SMOTE + ENN 또는 SMOTE + Tomek Links (하이브리드 방식) 적용

8. 실제 적용 사례 (Use Case)

언더샘플링은 특히 '희귀 사건'을 탐지해야 하는 도메인에서 필수적으로 검토된다.

  • 금융 사기 탐지 (Fraud Detection): 수백만 건의 정상 거래 중 극소수의 사기 거래를 찾아내야 할 때, 정상 거래 데이터를 언더샘플링하여 사기 패턴 학습 효율을 높인다.
  • 제조 공정 불량 검출 (Anomaly Detection): 정상 제품의 수량이 압도적으로 많은 공정 데이터에서 불량품의 특징을 학습시키기 위해 정상 데이터를 샘플링한다.
  • 의료 진단 (Rare Disease Diagnosis): 희귀 질환 환자 데이터가 매우 적은 경우, 건강한 대조군 데이터를 줄여 질병의 특이적 징후를 더 잘 포착하게 한다.

9. 성능 평가 및 주의사항

데이터 분할(Split) 시점 주의사항

주의: 샘플링은 반드시 Train Set에만 적용해야 한다. 전체 데이터에 샘플링을 먼저 적용한 후 데이터를 나누면, Train Set의 정보가 Test Set에 유출되는 데이터 누수(Data Leakage)가 발생하여 평가 결과가 왜곡된다. 반드시 데이터를 먼저 나눈 후, Train Set에만 언더샘플링을 적용하고 Test Set은 실제 환경의 데이터 분포를 그대로 유지해야 한다.

평가 지표

불균형 데이터셋에서는 정확도(Accuracy) 지표를 사용하는 것이 매우 위험하다. 데이터의 99%가 정상인 경우 모델이 무조건 '정상'이라고만 예측해도 정확도는 99%가 나오지만, 정작 중요한 1%의 이상치는 하나도 찾지 못하는 '정확도의 함정'에 빠지게 된다. 따라서 다음과 같은 지표를 반드시 함께 확인해야 한다.

  • 정밀도(Precision): 모델이 긍정으로 예측한 것 중 실제 긍정인 비율
  • 재현율(Recall): 실제 긍정인 것 중 모델이 긍정으로 예측한 비율
  • F1-Score: 정밀도와 재현율의 조화 평균으로, 두 지표가 균형을 이룰 때 높은 값을 가진다. 불균형 데이터셋에서 모델의 전반적인 성능을 단일 수치로 평가할 때 유용하다.
  • AUC-ROC: 임계값(Threshold) 변화에 따른 모델의 분류 성능을 나타내는 곡선 아래 면적이다. 1에 가까울수록 클래스 분류 능력이 뛰어남을 의미한다.
  • Precision-Recall Curve: 데이터 불균형이 극심할 때 ROC 곡선보다 더 엄격하게 성능을 평가할 수 있는 지표이다.
AI 생성 콘텐츠 안내

이 문서는 AI 모델(gemma-4-31b)에 의해 생성된 콘텐츠입니다.

주의사항: AI가 생성한 내용은 부정확하거나 편향된 정보를 포함할 수 있습니다. 중요한 결정을 내리기 전에 반드시 신뢰할 수 있는 출처를 통해 정보를 확인하시기 바랍니다.

이 AI 생성 콘텐츠가 도움이 되었나요?