밍꽁✨
코딩하는 감자
밍꽁✨
전체 방문자
오늘
어제
  • 분류 전체보기 (27)
    • python (16)
      • 파이썬 머신러닝 완벽가이드 (6)
      • 코딩테스트 (4)
      • 머신러닝&딥러닝 (2)
      • 파이썬 기초 (4)
    • Qgis (1)
    • Tableau (6)
    • 빅데이터 분석 기사 (0)
    • 금융데이터 뚝딱이기 (4)
      • 신협 대학생 인턴십 (1)
      • 기사 스크랩 (3)

블로그 메뉴

  • 홈
  • 태그

공지사항

인기 글

태그

  • 파이썬
  • 피처백터화
  • 기사스크랩
  • bisect_right
  • python
  • 웰컴투태블로월드
  • LGBM
  • NLP
  • sys.stdin.readline()
  • 인프런
  • 태블로
  • 머신러닝
  • 코딩테스트
  • Python기초
  • 파이썬기초
  • bisect_left
  • Tableau
  • 신협인턴십
  • Light GBM
  • 역머니무브

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
밍꽁✨

코딩하는 감자

[python] SMOTE를 활용한 오버샘플링
python/파이썬 머신러닝 완벽가이드

[python] SMOTE를 활용한 오버샘플링

2022. 3. 26. 17:15
반응형

이번에는 SMOTE를 활용한 오버샘플링을 적용해보겠습니다.

일반적으로 언더샘플링보다 오버샘플링이 예측 성능상 더 유리한 경우가 많아 주로 사용됩니다.

## 오버샘플링?
이상 데이터와 같이 적은 데이터 세트를 증식하여 학습을 위한 충분한 데이터를 확보하는 방법으로, 동일한 데이터의 단순 증식은 과적합을 유발할 수 있기 때문에 의미가 없으므로 원본 데이터의 피처값들을 아주 약간씩 변형하여 증식

여기서 주의할 점은

SMOTE를 적용할 때는 반드시 학습 데이터 세트만 오버샘플링을 해야합니다!!!

검증 데이터 세트 혹은 테스트 데이터 세트를 오버샘플링 하는 경우 결국 원본 데이터가 아닌 데이터 세트에서 검증되기 때문에 올바른 검증이 되지 않습니다.


캐글의 Credit Card Fraud Detection 데이터를 활용하여 Fraud에 해당하는 데이터를 증식하고

이를 Light GBM을 통해 학습시켜보겠습니다.

SMOTE의 fit_sample() 메서드를 사용하여 증식한 뒤 증식 전/후를 비교해보겠습니다. 

from imblearn.over_sampling import SMOTE

smote = SMOTE(random_state=42)
X_train_over, y_train_over = smote.fit_sample(X_train, y_train)
print("SMOTE 적용 전 학습용 피처/레이블 데이터 세트 : ", X_train.shape, y_train.shape)
print('SMOTE 적용 후 학습용 피처/레이블 데이터 세트 :', X_train_over.shape, y_train_over.shape)
print('SMOTE 적용 후 값의 분포 :\n',pd.Series(y_train_over).value_counts() )

결과를 보면 거의 2배 가까이로 데이터가 증식된 것을 볼 수 있으며

fraud에 해당하는 1값이 0과 동일하게 증식된 것을 확인할 수 있습니다.

 

증식한 데이터를 활용하여 Light GBM을 적용하여 학습 및 예측, 평가를 진행해보겠습니다.

## 증식한 데이터로 LGBM 적용
lgbm_clf = LGBMClassifier(n_estimators=1000, num_leaves=64, n_jobs=-1, boost_from_average=False)
get_model_train_eval(lgbm_clf, X_train_over, X_test, y_train_over, y_test)

적용 전 / 적용 후

데이터 증식 전에 비해 정밀도는 낮아지고, 재현율은 높아진 것을 볼 수 있습니다.

일반적으로 SMOTE를 적용하면 재현율은 높아지나 정밀도는 낮아집니다.

좋은 SMOTE 패키지일수록 재현율의 증가율은 높이고 정밀도의 감소율은 낮출 수 있도록 효과적으로 데이터를 증식합니다.


앞서 사용한 get_model_train_eval 함수는 이전 글에서 확인할 수 있습니다 :)

2022.03.26 - [python] - [python] LGBMClassifier 단번에 성능 높이기

 

[python] LGBMClassifier 단번에 성능 높이기

Light GBM은 XGBoost보다 개선된 성능과 빠른 수행률을 보여주어 많은 대회의 상위 랭커들이 활용하는 모델이라고 할 수 있습니다! 저는 LGBMClaasifier 모델을 활용할 때 특히 주의해야 할 부분을 짚어

coding-potato.tistory.com

 

반응형

'python > 파이썬 머신러닝 완벽가이드' 카테고리의 다른 글

[NLP] pipeline을 활용한 직관적인 코드짜기!  (0) 2022.05.03
[NLP] 피처백터화 / 희소행렬  (0) 2022.05.02
[NLP] NLP 기초, 텍스트 전처리의 모든 것  (0) 2022.04.30
[python] LGBMClassifier 단번에 성능 높이기  (0) 2022.03.26
[python] 교차검증을 간단하게 cross_val_score()  (0) 2022.03.15
    'python/파이썬 머신러닝 완벽가이드' 카테고리의 다른 글
    • [NLP] 피처백터화 / 희소행렬
    • [NLP] NLP 기초, 텍스트 전처리의 모든 것
    • [python] LGBMClassifier 단번에 성능 높이기
    • [python] 교차검증을 간단하게 cross_val_score()
    밍꽁✨
    밍꽁✨
    감자의 데이터 분석 일지

    티스토리툴바