AI 머신러닝

머신러닝 불균형 데이터, SMOTE와 Tomek Links 중 어떤 샘플링 전략이 최적일까?

강코의 코딩 일기 2026. 7. 13. 21:11
반응형

불균형 데이터셋으로 인한 모델 성능 저하 문제를 해결하기 위한 오버샘플링(SMOTE)과 언더샘플링(Tomek Links) 전략을 심층 비교 분석하고, 실제 프로젝트에서의 적용 효과와 주의점을 다룹니다.

머신러닝 모델 개발 과정에서 불균형 데이터셋은 종종 예상치 못한 복잡성을 야기하며, 모델의 실제 성능을 왜곡시키는 주범이 되곤 합니다. 특히 소수 클래스의 예측이 비즈니스적으로 매우 중요한 상황, 예를 들어 금융 사기 탐지, 희귀 질병 진단, 제품 불량 예측 등에서는 전체 정확도가 높더라도 소수 클래스에 대한 예측 실패는 치명적인 결과를 초래할 수 있습니다.

이러한 문제에 직면했을 때, 개발자는 데이터 레벨에서 불균형을 해소하기 위한 샘플링 전략을 고려하게 됩니다. 대표적인 기법으로는 오버샘플링(Oversampling) 방식의 SMOTE(Synthetic Minority Over-sampling Technique)언더샘플링(Undersampling) 방식의 Tomek Links가 있습니다. 본 글에서는 이 두 가지 핵심 샘플링 전략의 작동 원리, 효과, 그리고 실제 프로젝트 적용 시 주의점을 심층적으로 비교 분석하여, 독자 여러분이 당면한 불균형 데이터 문제에 대한 최적의 해결책을 모색하는 데 도움을 드리고자 합니다.

불균형 데이터 처리를 위한 샘플링 전략 비교: 오버샘플링(SMOTE)과 언더샘플링(Tomek Links)의 효과와 주의점 분석 - chain, security, metal, iron, metal chain, chain link, metallic, iron chain, protection, barrier, chain, chain, chain, chain, chain

Image by analogicus on Pixabay

문제 발생: 소수 클래스 예측의 딜레마

한 금융 서비스 기업에서 이상 거래 탐지 시스템을 개발하는 프로젝트를 진행 중이었다고 가정해 봅시다. 데이터셋은 정상 거래 99.8%, 이상 거래 0.2%로 극심한 불균형을 보였습니다. 초기 모델 개발 단계에서 로지스틱 회귀(Logistic Regression)와 랜덤 포레스트(Random Forest)를 포함한 여러 분류 모델을 시도하였고, 테스트 세트에서 99.7%에 달하는 높은 전체 정확도(Overall Accuracy)를 달성하였습니다.

그러나 실제 운영 환경에 가까운 시뮬레이션에서 문제가 드러났습니다. 모델이 이상 거래를 제대로 감지하지 못하고 대부분의 이상 거래를 정상 거래로 분류하는 현상이 발생한 것입니다. 구체적으로, 이상 거래 클래스에 대한 재현율(Recall)은 10% 미만이었고, 정밀도(Precision) 또한 매우 낮아 사실상 이상 거래 탐지 시스템으로서의 역할을 수행하지 못하는 수준으로 판명됩니다. 높은 전체 정확도에 가려져 있던 소수 클래스 예측 성능의 심각한 결함이 명확히 드러난 상황으로 판단됩니다.

원인 분석: 모델의 편향과 평가 지표의 오류

이러한 문제의 근본적인 원인은 불균형한 데이터 분포와 그로 인해 발생하는 모델의 편향에 있습니다. 대부분의 머신러닝 분류 알고리즘은 전체 데이터셋의 오분류율을 최소화하는 방향으로 학습됩니다. 다수 클래스의 샘플 수가 압도적으로 많을 경우, 모델은 소수 클래스의 샘플을 잘못 분류하더라도 전체 오차에 미치는 영향이 미미하다고 판단하여, 자연스럽게 다수 클래스에 유리한 결정 경계를 형성하게 됩니다. 즉, 모델은 "모든 샘플을 다수 클래스로 분류해도 높은 정확도를 얻을 수 있다"는 단순한 전략을 학습할 유인이 생기는 것입니다.

또한, 초기 단계에서 전체 정확도만을 주요 평가 지표로 사용한 것이 문제의 심각성을 간과하게 만든 원인으로 지목됩니다. 불균형 데이터셋에서는 전체 정확도가 실제 모델의 유용성을 제대로 반영하지 못합니다. 소수 클래스의 중요성을 고려할 때, F1-점수(F1-score), 정밀도(Precision), 재현율(Recall), AUC-PR(Area Under the Precision-Recall Curve)과 같은 지표들이 훨씬 더 적절한 평가 기준이 됩니다. 특히 재현율은 실제 양성(소수 클래스) 중에서 모델이 올바르게 양성으로 예측한 비율을 나타내므로, 놓치지 말아야 할 중요한 이벤트를 탐지하는 데 필수적인 지표로 활용될 수 있습니다.

불균형 데이터 처리를 위한 샘플링 전략 비교: 오버샘플링(SMOTE)과 언더샘플링(Tomek Links)의 효과와 주의점 분석 - chain link, free wallpaper, wallpaper 4k, fence, sunset, desktop backgrounds, wire, mac wallpaper, steel fence, chain link fencing, cyclone fence, pattern, design, 4k wallpaper, silhouette, dusk, twilight, windows wallpaper, free background, nature, hd wallpaper, beautiful wallpaper, full hd wallpaper, backlighting, 4k wallpaper 1920x1080, cool backgrounds, laptop wallpaper, wallpaper hd, background

Image by PublicDomainPictures on Pixabay

해결 과정: 샘플링 전략의 적용과 비교 분석

불균형 데이터 문제 해결을 위해 다양한 접근 방식이 존재하지만, 데이터 레벨에서 클래스 분포를 조절하는 샘플링 전략은 가장 직관적이고 널리 사용되는 방법 중 하나입니다. 우리는 오버샘플링 기법인 SMOTE와 언더샘플링 기법인 Tomek Links를 비교 적용하여 그 효과를 분석하였습니다.

오버샘플링: SMOTE (Synthetic Minority Over-sampling Technique)

SMOTE는 소수 클래스 샘플의 수를 인위적으로 늘리는 오버샘플링 기법입니다. 단순히 기존 소수 클래스 샘플을 복제하는 방식의 문제점(오버피팅, 다양성 부족)을 극복하기 위해, 새로운 합성 샘플을 생성하는 방식을 사용합니다. SMOTE의 작동 원리는 다음과 같습니다.

  1. 소수 클래스에 속하는 각 샘플(x)을 선택합니다.
  2. 선택된 샘플 x에 대해 K-최근접 이웃(K-Nearest Neighbors, K-NN)을 탐색합니다. 이 K-NN 역시 소수 클래스에 속하는 샘플이어야 합니다.
  3. x와 K-NN 중 하나(xn)를 무작위로 선택합니다.
  4. x와 xn 사이의 선분 상에 무작위 지점을 선택하여 새로운 합성 샘플을 생성합니다. 이 과정은 벡터 공간에서 두 점 사이의 보간법을 활용하는 것과 유사합니다.

이러한 방식으로 생성된 합성 샘플은 기존 소수 클래스 데이터의 특징을 유지하면서도 데이터 다양성을 확보하여, 모델이 소수 클래스의 결정 경계를 더 잘 학습하도록 돕습니다.


from imblearn.over_sampling import SMOTE
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import classification_report

# X, y는 각각 피처 데이터와 타겟 레이블이라고 가정
# X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42, stratify=y)

# SMOTE 적용
sm = SMOTE(random_state=42)
X_res, y_res = sm.fit_resample(X_train, y_train)

# 샘플링 후 모델 학습 및 평가
model = LogisticRegression(solver='liblinear', random_state=42)
model.fit(X_res, y_res)
y_pred = model.predict(X_test)
print(classification_report(y_test, y_pred))

언더샘플링: Tomek Links

Tomek Links는 다수 클래스 샘플의 수를 줄이는 언더샘플링 기법입니다. 이 기법은 클래스 간의 경계에 있는 모호한 샘플을 제거하여 결정 경계를 명확하게 하는 데 중점을 둡니다. Tomek Link는 다음과 같은 특징을 가진 두 샘플의 쌍(x, y)을 의미합니다.

  1. 두 샘플 x와 y는 서로 다른 클래스에 속합니다.
  2. x와 y는 서로 가장 가까운 이웃입니다 (즉, dist(x, y)는 x에서 다른 모든 샘플까지의 거리 중 최소값이며, y에서 다른 모든 샘플까지의 거리 중 최소값입니다).

Tomek Links 기법은 이러한 Tomek Link를 찾은 후, 일반적으로 다수 클래스에 속하는 샘플을 제거함으로써 클래스 간의 경계를 뚜렷하게 만듭니다. 이는 노이즈 제거 효과와 함께 과적합(Overfitting)을 방지하는 데 도움을 줄 수 있습니다.


from imblearn.under_sampling import TomekLinks
# ... (데이터 분할 코드 동일)

# Tomek Links 적용
tl = TomekLinks(sampling_strategy='majority') # 'majority'는 다수 클래스만 제거
X_res, y_res = tl.fit_resample(X_train, y_train)

# 샘플링 후 모델 학습 및 평가
model = LogisticRegression(solver='liblinear', random_state=42)
model.fit(X_res, y_res)
y_pred = model.predict(X_test)
print(classification_report(y_test, y_pred))

SMOTE와 Tomek Links 비교 분석 및 트레이드오프

두 가지 샘플링 전략은 불균형 데이터 문제를 해결하는 데 효과적이지만, 그 작동 방식과 결과에 있어 명확한 차이점을 보이며 각각의 트레이드오프를 가집니다. 프로젝트의 특성과 데이터의 성격에 따라 적합한 전략이 달라질 수 있습니다.

특징 SMOTE (오버샘플링) Tomek Links (언더샘플링)
목표 소수 클래스 샘플 수 증가로 클래스 불균형 완화 다수 클래스 샘플 수 감소로 클래스 불균형 완화 및 결정 경계 명확화
작동 방식 K-NN 기반 합성 샘플 생성 클래스 경계에 위치한 다수 클래스 샘플 제거
데이터 크기 변화 전체 데이터셋 크기 증가 전체 데이터셋 크기 감소
정보 손실 없음 (오히려 정보 증강) 다수 클래스 정보 손실 가능성
노이즈 처리 기존 노이즈를 증폭시키거나 새로운 노이즈 생성 가능성 경계 노이즈 제거 효과
적합한 상황 데이터 수가 적어 정보 손실이 우려될 때, 클래스 경계가 불분명할 때 데이터 수가 충분히 많아 정보 손실 감내 가능할 때, 계산 비용 절감이 필요할 때

금융 사기 탐지 프로젝트의 경우, SMOTE를 적용한 결과 이상 거래 클래스의 재현율이 10%에서 75%로 크게 향상되었으며, 정밀도는 40% 수준을 유지하였습니다. 반면 Tomek Links를 적용했을 때는 재현율이 60%로 SMOTE보다는 다소 낮았지만, 정밀도는 55%로 SMOTE보다 높게 나타났습니다. 이는 Tomek Links가 노이즈를 제거하며 더 명확한 결정 경계를 생성하여 정밀도 측면에서 이점을 가질 수 있음을 시사합니다. 그러나 전체 데이터셋 규모가 작아지는 것이 정보 손실로 이어질 수 있다는 점을 간과해서는 안 됩니다.

두 전략 모두 소수 클래스의 성능을 개선하는 데 기여하였으나, 그 효과는 상이하였습니다. SMOTE는 재현율 측면에서 더 공격적인 성능 향상을 보였고, Tomek Links는 정밀도와 모델의 해석 가능성 측면에서 강점을 가졌습니다. 이러한 결과는 단일 지표에 의존하지 않고, 비즈니스 목표에 따라 적절한 평가 지표를 선택하고 여러 전략을 실험하는 것이 중요함을 강조합니다.

교훈 및 제언: 최적의 샘플링 전략 선택과 하이브리드 접근

불균형 데이터 처리에서 얻은 가장 중요한 교훈은 '만능 해결책은 없다'는 것입니다. SMOTE와 Tomek Links는 각각의 장단점을 가지며, 특정 상황에서 더 효과적일 수 있습니다. 따라서 개발자는 다음 사항들을 고려하여 최적의 전략을 수립해야 합니다.

  1. 데이터 특성 이해: 데이터셋의 크기, 불균형 비율, 노이즈 수준, 그리고 소수 클래스 샘플의 밀도 등을 면밀히 분석해야 합니다. 소수 클래스 샘플이 밀집되어 있는지, 아니면 광범위하게 퍼져 있는지에 따라 SMOTE의 효과가 달라질 수 있습니다. Tomek Links는 노이즈가 많은 경계에 유용합니다.
  2. 비즈니스 목표와 평가 지표: 재현율, 정밀도, F1-score, AUC-PR 중 어떤 지표가 비즈니스 목표에 더 중요한지 명확히 정의해야 합니다. 예를 들어, 금융 사기 탐지처럼 '놓치지 않는 것'이 중요한 경우 재현율이 높은 SMOTE가 유리할 수 있으며, 오탐을 줄여 '정확하게 탐지하는 것'이 중요한 경우 정밀도가 높은 Tomek Links가 더 적합할 수 있습니다.
  3. 실험과 검증: 단일 샘플링 전략에 만족하지 않고, 다양한 샘플링 기법과 그 조합을 실험하여 교차 검증(Cross-validation)을 통해 모델 성능을 객관적으로 평가해야 합니다. 이때, 샘플링은 반드시 학습 데이터셋에만 적용하고, 테스트 데이터셋은 원본 불균형 상태를 유지하여 모델의 일반화 성능을 올바르게 측정해야 합니다.

더 나아가, 오버샘플링과 언더샘플링의 하이브리드 접근법 또한 고려할 가치가 있습니다. 예를 들어, SMOTETomek이나 SMOTEENN과 같은 기법들은 SMOTE로 합성 샘플을 생성한 후 Tomek Links나 Edited Nearest Neighbours(ENN)를 사용하여 노이즈를 제거하거나 클래스 경계를 명확하게 하는 방식으로 작동합니다. 이는 두 전략의 장점을 결합하여 단점을 보완하는 효과를 기대할 수 있습니다.

샘플링 전략 외에도 비용 민감 학습(Cost-sensitive learning), 앙상블 기법(Ensemble Methods) (예: Balanced Bagging Classifier, EasyEnsemble, RUSBoost), 또는 이상치 탐지(Outlier Detection) 기법을 활용하는 등 다양한 고급 전략들이 불균형 데이터 문제 해결에 적용될 수 있습니다. 중요한 것은 데이터와 문제의 본질을 깊이 이해하고, 다양한 도구를 유연하게 활용하여 최적의 해결책을 찾아내는 개발자의 역량으로 판단됩니다.

본 글에서 다룬 SMOTE와 Tomek Links 비교 분석이 불균형 데이터 처리에 대한 깊이 있는 통찰을 제공했기를 바랍니다. 여러분의 프로젝트에서는 어떤 샘플링 전략이 가장 효과적이었는지, 또는 다른 흥미로운 접근법을 시도해 보신 경험이 있다면 댓글로 공유해 주시면 감사하겠습니다.

📌 함께 읽으면 좋은 글

  • [AI 머신러닝] AI 에이전트, 느린 의사결정 vs. 빠른 행동 선택: 지연 시간 최소화 튜닝 전략
  • [AI 머신러닝] 거대 언어 모델 분산 추론: 텐서 병렬화 vs 파이프라인 병렬화, 핵심 원리 비교 분석
  • [테스트 QA] 함수 호출 검증, 아직도 Mocking만 고집하시나요? Test Spy로 놓치고 있는 것들

이 글이 도움이 되셨다면 공감(♥)댓글로 응원해 주세요!
궁금한 점이나 다루었으면 하는 주제가 있다면 댓글로 남겨주세요.

반응형