BSA05_Imbalanced-Resampling.ipynb
필요한 패키지
# !pip install imblearn
from imblearn.over_sampling import SMOTE
from imblearn.under_sampling import NearMiss
from imblearn.under_sampling import RandomUnderSampler
import pandas as pd
데이터 불러오기 및 전처리
카드자료 = pd.read_csv('creditcard.csv')
카드자료.info()
# dtype 'int64'를 dtype 'category'로 변경
카드자료["Class"] = 카드자료["Class"].astype('category')
# 메모리 축소를 위해 dtype 'float64'를 dtype 'float32'로 변경
for 변수명 in list(카드자료.columns[:-1]):
카드자료[변수명] = 카드자료[변수명].astype('float32')
카드자료.info()
# 다음 작업에는 위의 작업을 반복하지 않도록 parquet로 저장
카드자료.to_parquet('creditcard.parquet')
설명변수(독립변수), 반응변수(종속변수) 분리
# Class별 빈도 확인
카드자료["Class"].value_counts()
X = 카드자료.iloc[:, 0:-1] # 마지막 한 열('Class')만 제외하고
X.info()
y = 카드자료["Class"]
y.info()
oversampling
# sampling_strategy=0.5 : minor class가 major class의 0.5(50%)가 되도록 minor class를 oversampling
X_o, y_o = SMOTE(random_state=316, sampling_strategy=0.5).fit_resample(X, y)
# 'Class 0'(284315), 'Class 1'(142157)
y_o.value_counts()
# Series+Series, DataFrame+Series, DataFrame+DataFrame
## 공통된 변수가 없으므로 concat으로 데이터프레임 결합
카드오버 = pd.concat([X_o, y_o], axis=1)
카드오버["Class"].value_counts()
undersampling
# major class에서 minor class의 개수에 맞춰서 major class를 undersampling
## 'Class 0'(492), 'Class 1'(492)
X_u, y_u = NearMiss(version=1).fit_resample(X, y)
카드언더 = pd.concat([X_u, y_u], axis=1)
카드언더["Class"].value_counts()
# sampling_strategy=0.5 : minor class가 major class의 0.5(50%)가 되도록 major class를 undersampling
## 'Class 0'(984), 'Class 1'(492)
X_u, y_u = RandomUnderSampler(random_state=316, sampling_strategy=0.5).fit_resample(X, y)
카드언더 = pd.concat([X_u, y_u], axis=1)
카드언더["Class"].value_counts()
'Statistics > BSA' 카테고리의 다른 글
230419 / BSA05. Housing 데이터로 전처리, 회귀 모델 적용, 시각화 (0) | 2023.04.23 |
---|---|
230417 / BSA05. 데이터 전처리 3 : 차원 축소 (0) | 2023.04.23 |
230412 / BSA05. 데이터 전처리 2 : python, pyspark에서 데이터 결합 (0) | 2023.04.23 |
230412 / BSA05. 데이터 전처리 2 : pyspark에서 결측값 처리 (0) | 2023.04.14 |
230410 / BSA05. 데이터 전처리 2 : python에서 결측값 처리 (0) | 2023.04.14 |