데이터 과학과 머신러닝에서 이상값(Outlier)은 모델의 성능을 크게 좌우할 수 있는 중요한 요소입니다. 특히 불균형 데이터셋에서 이상값 처리는 더욱 까다로운 문제가 됩니다. 이번 포스트에서는 이상값 처리를 위한 다양한 리샘플링 기법들과 관련 방법론들을 체계적으로 정리해보겠습니다.
1. 이상값과 리샘플링의 관계
이상값이 데이터에 미치는 영향
이상값은 데이터의 분포를 왜곡시키고 모델의 일반화 성능을 저하시킬 수 있습니다. 특히 다음과 같은 문제들을 야기합니다:
- 통계적 편향: 평균, 분산 등 기본 통계량의 왜곡
- 모델 성능 저하: 특히 선형 모델에서 큰 영향
- 클래스 불균형 악화: 소수 클래스의 이상값이 더욱 희소해짐
리샘플링을 통한 접근법의 장점
리샘플링 기법을 이용한 이상값 처리는 다음과 같은 장점을 제공합니다:
- 데이터의 정보 손실 최소화
- 클래스 균형 개선과 동시에 이상값 처리
- 다양한 데이터 분포에 대한 적응성
2. 언더샘플링 기반 이상값 처리
2.1 편집된 최근접 이웃 (Edited Nearest Neighbors, ENN)
ENN은 각 샘플의 k개 최근접 이웃을 확인하여, 자신과 다른 클래스에 속하는 이웃이 많은 샘플을 제거하는 방법입니다.
작동 원리:
1. 각 샘플에 대해 k개의 최근접 이웃 찾기
2. 이웃 중 다른 클래스의 비율이 임계값을 초과하면 해당 샘플 제거
3. 이 과정을 통해 클래스 경계 근처의 노이즈와 이상값 제거
장점:
- 클래스 경계를 명확하게 만듦
- 계산 복잡도가 상대적으로 낮음
- 다양한 데이터 타입에 적용 가능
단점:
- k값 설정에 민감함
- 고차원 데이터에서 성능 저하 가능
2.2 반복적 ENN (Repeated ENN, RENN)
RENN은 ENN을 여러 번 반복 적용하여 더 깨끗한 데이터셋을 만드는 방법입니다.
특징:
- ENN보다 더 많은 샘플을 제거
- 안정적인 결과 도출
- 과도한 제거로 인한 정보 손실 주의 필요
2.3 모든 KNN (All KNN)
All KNN은 k=1부터 시작하여 점진적으로 k값을 증가시키며 ENN을 적용하는 방법입니다.
작동 방식:
1. k=1에서 ENN 적용
2. k=2에서 ENN 적용
3. ...
4. 설정된 최대 k값까지 반복
2.4 원사이드 선택 (One-Sided Selection, OSS)
OSS는 Tomek Links와 CNN(Condensed Nearest Neighbor)을 결합한 방법입니다.
단계:
- Tomek Links를 이용해 경계 근처 샘플 제거
- CNN을 적용하여 대표적인 샘플만 선택
- 클래스 불균형과 이상값을 동시에 해결
3. 오버샘플링 기반 이상값 처리
3.1 경계선 SMOTE (Borderline-SMOTE)
Borderline-SMOTE는 클래스 경계 근처의 샘플들에 초점을 맞춘 SMOTE 변형입니다.
특징:
- 경계 근처의 중요한 샘플들을 식별
- 해당 샘플들 주변에서만 합성 샘플 생성
- 이상값의 영향을 줄이면서 클래스 균형 개선
종류:
- Borderline-SMOTE1: 경계 샘플 주변에서만 합성
- Borderline-SMOTE2: 경계 샘플과 인근 다른 클래스 샘플 모두 고려
3.2 안전한 수준 SMOTE (Safe-Level-SMOTE)
Safe-Level-SMOTE는 각 샘플의 “안전 수준”을 계산하여 안전한 영역에서만 합성 샘플을 생성합니다.
안전 수준 계산:
안전 수준 = (같은 클래스 이웃 수) / (전체 이웃 수)
장점:
- 노이즈가 적은 합성 샘플 생성
- 이상값 영역 회피
- 클래스 분포의 자연스러운 확장
3.3 ADASYN (Adaptive Synthetic Sampling)
ADASYN은 각 소수 클래스 샘플의 학습 난이도에 따라 적응적으로 합성 샘플 수를 조정합니다.
핵심 아이디어:
- 학습하기 어려운 샘플 주변에 더 많은 합성 샘플 생성
- 밀도 분포를 고려한 샘플링
- 자동으로 이상값 영역 회피
4. 하이브리드 접근법
4.1 SMOTE + Tomek Links
SMOTE로 오버샘플링한 후 Tomek Links를 제거하는 방법입니다.
작동 순서:
- SMOTE를 이용해 소수 클래스 오버샘플링
- 생성된 데이터셋에서 Tomek Links 식별
- Tomek Links에 해당하는 샘플들 제거
- 깨끗한 균형 데이터셋 획득
4.2 SMOTE + ENN
SMOTE 후 ENN을 적용하여 클래스 경계를 정리하는 방법입니다.
특징:
- SMOTE의 오버샘플링 효과와 ENN의 정리 효과 결합
- 클래스 경계가 명확한 데이터셋 생성
- 이상값과 노이즈 동시 제거
4.3 SMOTEENN
SMOTE와 ENN을 통합한 scikit-learn의 구현체입니다.
from imblearn.combine import SMOTEENN
smote_enn = SMOTEENN(random_state=42)
X_resampled, y_resampled = smote_enn.fit_resample(X, y)
4.4 SMOTETomek
SMOTE와 Tomek Links 제거를 결합한 방법입니다.
from imblearn.combine import SMOTETomek
smote_tomek = SMOTETomek(random_state=42)
X_resampled, y_resampled = smote_tomek.fit_resample(X, y)
5. 앙상블 기반 리샘플링
5.1 균형 배깅 (Balanced Bagging)
각 배깅 반복에서 균형잡힌 부트스트랩 샘플을 생성하는 방법입니다.
특징:
- 각 기본 학습기마다 균형잡힌 데이터 제공
- 이상값의 영향을 앙상블을 통해 분산
- 과적합 방지 효과
5.2 균형 랜덤 포레스트 (Balanced Random Forest)
랜덤 포레스트에서 각 트리마다 균형잡힌 부트스트랩을 사용하는 방법입니다.
from imblearn.ensemble import BalancedRandomForestClassifier
brf = BalancedRandomForestClassifier(n_estimators=100, random_state=42)
brf.fit(X, y)
5.3 Easy Ensemble
각 배깅 반복에서 다수 클래스를 언더샘플링하는 방법입니다.
작동 원리:
- 소수 클래스 전체 사용
- 다수 클래스에서 소수 클래스와 같은 크기만큼 랜덤 샘플링
- 여러 개의 균형잡힌 서브셋 생성
- 각 서브셋으로 약한 학습기 훈련
6. 고급 이상값 처리 기법
6.1 Local Outlier Factor (LOF) 기반 리샘플링
LOF를 이용해 이상값을 식별하고 제거 또는 가중치 조정을 하는 방법입니다.
from sklearn.neighbors import LocalOutlierFactor
lof = LocalOutlierFactor(n_neighbors=20, contamination=0.1)
outlier_labels = lof.fit_predict(X)
X_clean = X[outlier_labels == 1]
y_clean = y[outlier_labels == 1]
6.2 Isolation Forest 기반 전처리
Isolation Forest로 이상값을 탐지한 후 리샘플링을 적용하는 방법입니다.
from sklearn.ensemble import IsolationForest
iso_forest = IsolationForest(contamination=0.1, random_state=42)
outlier_labels = iso_forest.fit_predict(X)
X_normal = X[outlier_labels == 1]
y_normal = y[outlier_labels == 1]
6.3 클러스터링 기반 리샘플링
K-means 등의 클러스터링을 이용해 각 클러스터 내에서 리샘플링을 수행하는 방법입니다.
장점:
- 데이터의 국소적 구조 보존
- 클러스터별 맞춤형 리샘플링
- 이상값이 별도 클러스터로 분리됨
7. 실무 적용 가이드라인
7.1 기법 선택 기준
데이터 크기별 권장사항:
- 소규모 데이터 (< 1만 샘플): SMOTE + Tomek Links
- 중규모 데이터 (1만 ~ 10만): Borderline-SMOTE + ENN
- 대규모 데이터 (> 10만): Random Undersampling + ADASYN
도메인별 권장사항:
- 금융 사기 탐지: Cost-sensitive learning + SMOTEENN
- 의료 진단: Safe-Level-SMOTE + 전문가 검증
- 텍스트 분류: TF-IDF + Balanced Random Forest
7.2 성능 평가 방법
리샘플링 후 성능 평가 시 주의사항:
교차검증 전략:
from sklearn.model_selection import StratifiedKFold
from sklearn.metrics import classification_report
# 원본 데이터로 교차검증
skf = StratifiedKFold(n_splits=5, shuffle=True, random_state=42)
for train_idx, test_idx in skf.split(X, y):
X_train, X_test = X[train_idx], X[test_idx]
y_train, y_test = y[train_idx], y[test_idx]
# 훈련 데이터에만 리샘플링 적용
X_train_resampled, y_train_resampled = resampler.fit_resample(X_train, y_train)
# 모델 훈련 및 평가
model.fit(X_train_resampled, y_train_resampled)
y_pred = model.predict(X_test)
print(classification_report(y_test, y_pred))
7.3 하이퍼파라미터 튜닝
주요 하이퍼파라미터들:
SMOTE:
k_neighbors
: 이웃 수 (기본값: 5)sampling_strategy
: 리샘플링 비율
ENN:
n_neighbors
: 이웃 수 (기본값: 3)kind_sel
: 선택 방식 (‘all’, ‘mode’)
Tomek Links:
sampling_strategy
: 제거할 클래스 지정
8. 최신 동향과 미래 방향
8.1 딥러닝 기반 접근법
GAN 기반 합성:
- CTGAN, WGAN-GP 등을 이용한 고품질 합성 데이터 생성
- 복잡한 데이터 분포 학습 가능
- 높은 계산 비용이 단점
VAE 기반 접근:
- 변분 오토인코더를 이용한 잠재 공간에서의 샘플링
- 연속적인 데이터 생성
- 해석 가능한 잠재 표현
8.2 자동화된 리샘플링
AutoML 통합:
- 데이터 특성에 따른 자동 기법 선택
- 하이퍼파라미터 자동 최적화
- 성능 지표 기반 기법 평가
메타 러닝:
- 과거 경험을 통한 최적 기법 추천
- 전이 학습 기반 리샘플링
- 도메인 적응형 접근법
결론
이상값 처리를 위한 리샘플링 기법들은 각각 고유한 장단점을 가지고 있으며, 데이터의 특성과 문제 도메인에 따라 적절한 기법을 선택하는 것이 중요합니다.
핵심 포인트:
- 단일 기법보다는 하이브리드 접근법이 더 효과적인 경우가 많습니다.
- 교차검증 시 리샘플링은 훈련 데이터에만 적용해야 합니다.
- 도메인 지식과 데이터 탐색을 통해 적절한 기법을 선택해야 합니다.
- 성능 평가 시 다양한 지표를 종합적으로 고려해야 합니다.
리샘플링 기법의 발전과 함께 딥러닝, AutoML 등의 최신 기술들이 결합되어 더욱 정교한 이상값 처리가 가능해지고 있습니다. 실무에서는 여러 기법을 실험해보고 교차검증을 통해 최적의 조합을 찾는 것이 바람직합니다.
답글 남기기