본문 바로가기
Machine Learning

[Machine Learning] SMOTE

by 자몽먹은토끼 2023. 7. 23.
728x90
반응형
SMOTE( Synthetic Minority Oversampling Technique) 는 오버샘플링의 일종.

타겟변수의 범주별 비율이 맞지 않을 때? 사용했다.

 

y값

y.value_counts()

타겟변수 명 : is_Bankrupt

y.value_counts(normalize=True)

타겟변수 비율

normalize=True 를 넣어주면 비율로 확인할 수 있다.

 

아 팀프로젝트로 파산데이터 분석을 진행했었는데 타겟변수가 파산했는가 에 대한 여부였다.

파산 한 경우 : 1, 파산하지 않은 경우 : 0

 

 

거의 96% 이상이 타겟변수 0으로 쏠려 있는 것을 볼 수 있다.

이런 경우에는 0으로 과적합 될 가능성이 있다.

음.. 그러니까 독립변수가 어떠하더라도 대부분의 예측 결과로 0이 나올수도 있다 이 말..!

 

임의로 8:2의 비율로 오버샘플링 하였다. 굳이 8:2로 한 이유는... 딱히 없다. 그냥그냥그냥~

추가적으로 전체 데이터의 개수를 10000개로 늘리고 싶었기 때문에 1만개 개수에 맞추어 8000개와 2000개로 증가시켰다.

 

# 낮은 비율 클래스(minority class)를 높은 비율 클래스 데이터 갯수로 맞춰주는 OverSampling
from imblearn.over_sampling import SMOTE

smote = SMOTE(sampling_strategy={0:8000, 1:2000}, random_state=9)
X_resampled, y_resampled = smote.fit_resample(X, y)

X_resampled.shape, y_resampled.shape
# (10000, 95) (10000, 1)

y_resampled.value_counts(normalize=True)
# 0 : 0.8
# 1 : 0.2

y_resampled.value_counts()
# 0 : 8000
# 1 : 2000

SMOTE 파라미터로 sampling_strategy를 넣는데, 보통 이 파라미터에 소수점형태의 수를 입력한다.

이는 소수 클래스의 샘플수를 전체 데이터의 얼만큼 비율로 증가 시킬건지를 정할 수 있다.

위에서 봤던 데이터를 토대로 설명하면 현저히 적은 1의 비율을 전체 데이터의 몇프로까지 늘리고 싶은지를 지정할 수 있는것이다.

나도 처음에는 0.4라고 입력했다가 전체 데이터의 개수까지 맞추면 좋을 것 같다고 생각하여 선택한 방법이 

sampling_strategy 파라미터의 값을 딕셔너리 형태로 주는 것이었다.

원하는 클래스에 대해 각각 개수를 지정해주면 그 수에 맞추어 오버샘플링 된다.

 

 

 

 

아 혹시 imbalanced-learn 라이브러리가 설치되어있지 않은 로컬환경이라면

prompt 에 가서 imblearn 혹은 imbalanced-learn 을 pip install 해야한다. 

pip install imblearn
728x90
반응형

'Machine Learning' 카테고리의 다른 글

[ML] 앙상블 기법 정리  (0) 2024.10.30
DevOps란?  (1) 2024.02.24
[Machine Learning] Hyper Parameter 하이퍼 파라미터  (0) 2023.07.23
[Machine Learning] Grid Search 그리드 서치  (0) 2023.07.22
ML - day1  (0) 2023.07.18