ML

[머신러닝/사이킷런] 데이터 가공: 언더&오버 샘플링, 로그 변환, 이상치 제거

helena1129 2025. 2. 24. 17:13

학습 자료: 파이썬 머신러닝 완벽 가이드(개정2판), 위키북스

 

언더 샘플링과 오버 샘플링

개요

레이블이 불균형한 분포를 가진 데이터셋을 학습시킬 때, 이상 레이블을 가지는 데이터 건수가 정상 레이블을 가진 데이터 건수에 비해 너무 적으면 예측 성능의 문제가 발생함

즉, 이상 레이블을 가지는 데이터 건수는 매우 적기 때문에 제대로 다양한 유형을 학습하지 못하는 반면, 정상 레이블을 가지는 데이터 건수는 매우 많기 때문에 일방적으로 정상 레이블로 치우친 학습을 수행

이 문제를 해결하기 위해 대표적으로 오버 샘플링(Oversampling)언더 샘플링(Undersampling) 방식을 수행

일반적으로는 오버 샘플링 방식이 예측 성능상 유리한 경우가 많아 자주 사용됨.

 

언더 샘플링

많은 레이블을 가진 데이터셋을 적은 레이블을 가진 데이터셋 수준으로 감소시키는 방식

과도하게 정상 레이블로 학습/예측하는 부작용을 개선할 수 있지만, 너무 많은 정상 레이블 데이터를 감소시켜서 정상 레이블의 경우 제대로 된 학습을 수행할 수 없는 문제가 발생할 수도 있음

 

오버 샘플링

적은 레이블을 가진 데이터셋을 많은 레이블을 가진 데이터셋 수준으로 증식시키는 방식

동일한 데이터를 단순히 증식하는 방법은 과적합이 되기 때문에 의미가 없으므로 원본 데이터의 피처 값들을 아주 약간만 변경하여 증식함

대표적으로 SMOTE(Synthetic Minority Over-sampling Technique) 방법이 있음

 

SMOTE

적은 데이터셋에 있는 개별 데이터들의 KNN(K Nearest Neighbor)을 찾아서 이 데이터와 K개 이웃들의 차이를 일정 값으로 만들어서 기존 데이터와 약간 차이가 나는 새로운 데이터들을 생성하는 방식

SMOTE를 적용하면 재현율은 높아지나, 정밀도는 낮아짐

따라서, 정밀도 지표보다는 재현율 지표를 높이는 것이 머신러닝 모델의 주요한 목표인 경우 적용하면 좋다.

로지스틱 회귀 모델에 적용할 경우 정밀도가 급격하게 저하되어 적절하지 못함.

 

사이킷런

패키지: imbalanced-learn(imblearn)

SMOTE()

- 반드시 학습 데이터셋만 오버 샘플링해야 함. 


로그 변환

데이터 분포도가 심하게 왜곡되어 있을 경우 적용하는 중요 기법(StandardScaler로도 개선 불가능한 경우)

원래 값을 log 값으로 변환해 원래 큰 값을 상대적으로 작은 값으로 변환하기 때문에 데이터 분포도의 왜곡을 상당 수준 개선해 준다.

 

np.log1p()


이상치 제거

이상치 데이터(Outlier)는 전체 데이터의 패턴에서 벗어난 이상 값을 가진 데이터로, 머신러닝 모델의 성능에 영향을 준다.

이상치를 찾는 방법은 여러가지가 있지만, 대표적으로 IQR(Inter Quantile Range) 방식이 있다.

 

IQR

사분위(Quantile) 값의 편차를 이용하는 기법으로 흔히 박스 플롯(Box Plot) 방식으로 시각화할 수 있음.

사분위는 전체 데이터를 값이 높은 순으로 정렬하고, 이를 1/4(25%)씩으로 구간을 분할하는 것을 지칭함.

이들 중 25% 구간인 Q1 ~ 75% 구간인 Q3의 범위를 IQR이라고 함.

 

IQR을 이용해 이상치 데이터를 검출하는 방식은 보통 IQR에 1.5를 곱해서 생성된 범위를 이용해 최댓값과 최솟값을 결정한 뒤 최댓값을 초과하거나 최솟값에 미달하는 데이터를 이상치로 간주하는 것이다.

다음 박스 플롯에서 자세히 표현된다.

 

 

 

이상치 데이터를 제거하기 전, 먼저 어떤 피처의 이상치 데이터를 검출할 것인지 선택이 필요하다.

매우 많은 피처가 있을 경우 이들 중 결정값(즉 레이블)과 가장 상관성이 높은 피처들을 위주로 이상치를 검출하는 것이 좋다.

Dataframe의 corr()을 이용해 각 피처별로 상관도를 구한 뒤 상관관계가 가장 높은 피처들을 찾아 제거해야 한다.