불균형 데이터 문제를 해결하는 대표적인 방법 중 하나가 SMOTE (Synthetic Minority Oversampling Technique) 이다.
이 기법은 단순히 소수 클래스 데이터를 복제하는 대신, 새로운 합성 데이터를 생성하여 분포를 균형 있게 맞춰준다.
🧩 SMOTE의 기본 아이디어
- 기존 소수 클래스 샘플과 그 주변 이웃(KNN)을 찾는다.
- 두 점을 잇는 선분 위의 랜덤 지점을 새로운 데이터로 생성한다.
- 이렇게 만들어진 합성 샘플은 원본 데이터에 존재하지 않았던 새로운 데이터 포인트로 간주한다.
👉 즉, 데이터를 “복사”하는 것이 아니라 “보간(interpolation)” 하는 방식이 핵심이다.
아래 그림처럼 기존 소수 클래스 데이터가 극히 적었던 상황에서,
SMOTE 적용 후 다수 클래스와의 경계 근처에 새로운 점들이 생성된 것을 확인할 수 있다.

📊 단순 오버샘플링 vs SMOTE
| 방법 | 설명 | 단점/한계 |
|---|---|---|
| Random Oversampling | 소수 클래스 데이터를 단순 복제 | 과적합 위험 ↑ |
| SMOTE | 기존 샘플 + 이웃 간의 선형 보간으로 합성 | 데이터 다양성 ↑, 과적합 완화 |
Random Oversampling은 단순하지만 과적합을 초래하기 쉽다.
반면 SMOTE는 합성을 통해 데이터 다양성을 확보할 수 있다는 장점이 있다.
🧪 우리의 실험 결과
제조 기업 데이터를 기반으로, SMOTE를 적용했을 때 성능 변화를 확인하였다.
SMOTE는 단순히 소수 클래스를 복제하지 않고, 새로운 샘플을 생성해 분포를 보완한다.
아래 막대그래프는 클래스별 샘플 수가 SMOTE 적용 전후로 어떻게 달라졌는지를 보여준다.
기존에는 소수 클래스가 거의 보이지 않을 정도였지만, SMOTE 적용 후에는 균형이 맞춰진 것을 확인할 수 있다.

아래는 일부 결과이다. (실제 데이터는 비공개, 지표 값만 공유함)
| 모델 | 기법 | F1-macro | PR-AUC | 해석 |
|---|---|---|---|---|
| XGBoost | baseline | 0.46 | 0.4616 | 기준 성능 |
| XGBoost | + SMOTE | 0.39 | 0.4050 | 성능 개선 효과 미미 |
👉 실험 결과, baseline 대비 SMOTE 적용 시 성능이 오히려 하락하였다.
이는 SMOTE로 생성된 합성 샘플이 데이터의 실제 분포를 충분히 반영하지 못했거나,
모델이 합성 데이터에 과적합되었을 가능성이 있음을 시사한다.
🚀 다음 단계
SMOTE는 수치형 데이터에 효과적이지만, 범주형 변수가 포함된 데이터에서는 한계가 있다.
다음 글에서는 이를 보완한 기법인 SMOTENC를 다루고자 한다.
✅ 마무리
SMOTE는 불균형 데이터를 해결하기 위한 가장 널리 알려진 기법이다.
단순 복제 대신 합성을 통해 데이터 다양성을 확보한다는 점에서 의미가 크다.
그러나 모든 상황에서 마법처럼 성능을 높여주지는 않는다.
👉 따라서 데이터 특성과 모델 성격을 고려한 활용이 필요하다.
'데이터 사이언스 > 프로젝트' 카테고리의 다른 글
| [데이터 불균형 실험노트] Class Weight: 가볍게 적용해 본 균형 잡기 승부 (1) | 2025.09.03 |
|---|---|
| [데이터 불균형 실험노트] SMOTENC: 범주형 변수까지 공략하기 (0) | 2025.09.03 |
| [데이터 불균형 실험노트] 불균형 데이터란? Accuracy의 함정을 격파하기 (0) | 2025.09.03 |
| 반지도학습(Semi-Supervised Learning) 정리 (0) | 2025.08.14 |
| Pseudo-labeling (의사 라벨링) 완벽 정리 (0) | 2025.08.14 |