데이터과학 삼학년

Imbalanced data approach 본문

Statistical Learning

Imbalanced data approach

Dan-k 2020. 8. 10. 18:57
반응형

[DATA]

credit card data

 

[Oversampling & algorithm]

- SMOTE, SMOTEEN, SMOTETOMEK, pandas upsampling, downsampling, algorithm

  > 로짓 모형을 통한 각 샘플링 초기 실험결과 

method

Class

precision

recall

downsampling

Class 0

0.99

0.98

Class 1

0.06

0.86

pandas_upsampling

Class 0

0.86

0.67

Class 1

0.34

0.61

smote

Class 0

0.87

0.50

Class 1

0.29

0.73

smoteenn

Class 0

0.87

0.43

Class 1

0.28

0.78

smotetomek

Class 0

0.86

0.65

Class 1

0.33

0.63

adasyn

Class 0

0.99

0.99

Class 1

0.10

0.86

boosting

(GBT)

(not oversampling)

Class 0

0.99

0.99

Class 1

0.92

0.79

randomforest

(RF)

Class 0

0.99

0.99

Class 1

0.94

0.80

 

- SMOTEENN = SMOTE + ENN, This algorithm combined SMOTE with ENN(edited nearest neighbors). This generates minority class more than majority class as I know.  

- SMOTETOMEK = SMOTE + TOMEK, This algorithm combined SMOTE with Tomek link

- Both are very similar to SMOTE



[Feature engineering]

- 목적 : data 탐색을 통해 새로운 feature를 생성하고, Class1과 Class0 을 구분할 수 있는 feature를 만듦

- 카테고리형, 연속형 Feature 존재 유무 확인

  > 카테고리형 feature 존재하지 않음 → dataset이 임베딩한 data이기 때문으로  추정

- feature간 상관관계 확인

  > feature간 상관관계가 0.5 이상인 feature 존재하지 않음

- 분포확인 : 시각화를 통해 feature에서 class0과 class1간 분포 차이 확인

 > 큰 시사점은 찾지 못함

 - 피처간 변동폭 확인 

   > class1(사기: red)이 정상 데이터(blue)에 비해 각 feature간 변동폭이 크다는 insight를 얻음 

  >> feature 간 변동폭을 이용하여 class간 구분을 지을 수 있는 feature 생성에 대해 탐색





- Feature engineering 

  > feature 간 변동폭을 이용해 새로운 feature를 생성하고 class간 분포 확인함

 

 

 

 

- oversampling

  > 생성한 feature를 2차원으로 표현해 구분이 가능한지 확인 

  > oversampling의 영향 확인

 

 

원본 data

smote를 거친 data

 

  > oversampling 전후 데이터 분포 비교

[Feature selection]

- feature engineering의 과정을 거쳐 총 10개의 feature를 생성함

 [ 'V14pV12','V2pV11','V17-V11','sqV3-V2','V10pV3','V17pV14','V4pV2','sqV8','sqV2','sqV17' ]

- oversampling 단계에서 성능이 좋았던 GBT의 feature importance를 통해 5개의 feature를 추가함  → ['V17','V14','V10','V26','V7' ]

 

>> 총 15개의 feature를 선택함(원본데이터 30개 features)



[Dataset transform]

- Train data 

1. Data cleaning : outlier delete

2. Feature engineering

3. Data augmentation : oversampling(smote etc.)

- Valid data

1. feature engineering

- Test data

1. feature engineering

https://github.com/younseun/google-asl-study/blob/master/final_mini_project/bdh/input_feature_eng.ipynb


[Model & Result]

- estimator의 DNN Classifier를 사용

  > layer = [30,30,30]

  > adam optimizer, batch normalization

  > step = 10000

 

- oversampling을 사용하지 않음

  > 실험결과, oversampling 사용시 모델의 predict 결과가 trial마다 매우 상이함

  > 정제한 feature에서 oversampling이 오히려 좋지 않은 영향을 미칠거라 판단

- 예측 결과

  > confusion matrix

sampling

Class

Class 0

Class 1

not 

oversampling

Class 0

56796

62

Class 1

20

84

smote

(class1 == class0)

Class 0

56828

30

Class 1

22

82

smoteenn

(class1 > class0)

Class 0

56713

145

Class 1

79

25

smotetomek

(class1 == class0)

Class 0

55244

1614

Class 1

57

47

adasyn

(class1 > class0)

Class 0

56855

3

Class 1

79

25

 

> precision, recall, fbeta score

DNN

Class

precision 

recall 

fbeta_score(beta=5) 

not oversampling

Class0

0.99

0.99

0.99

Class1

0.58

0.81

0.80

smote

Class0

0.99

0.99

0.99

Class1

0.73

0.79

0.79

smoteenn

Class0

0.99

0.99

0.99

Class1

0.15

0.24

0.23

smotetomek

Class0

0.99

0.97

0.97

Class1

0.03

0.45

0.29

adasyn

Class0

0.99

0.99

0.99

Class1

0.89

0.24

0.25

 

- 번외 : 머신러닝 모델 결과(not oversampling)

1. LogisticRegression

 > confusion matrix

 

Class 0

Class 1

Class 0

48348

8510

Class 1

9

95

  > Class1

    precision   : 0.011040092969203951

    recall   : 0.9134615384615384

    fbeta_score(beta=5) : 0.22043730477465417

 

2. Gradient Boosting Tree

 > confusion matrix

 

Class 0

Class 1

Class 0

556851

7

Class 1

22

82

  > Class1

    precision   : 0.9213483146067416

    recall   : 0.7884615384615384

    fbeta_score(beta=5) : 0.792859799181852

 

3. Random Forest

 > confusion matrix

 

Class 0

Class 1

Class 0

56853

5

Class 1

21

83

  > Class1

    precision   : 0.9431818181818182

    recall   : 0.7980769230769231

    fbeta_score(beta=5) : 0.802827380952381



[Impression]

- 불균형 데이터에 대한 접근 방법에 대해 리서치하는 기회

  > over sampling(nearmiss, smote 등), algorithm, autoencoder를 이용한 분류기법 등

- 데이터 탐색을 통해 새로운 피처를 만들어내고 가능성을 탐색해보는데 의의가 있었음

  > 데이터에 대한 도메인 지식없이 분포만을 가지고 피처 엔지니어링에 접근해보니 쉽지않은 작업임을 체감

  > 도메인 지식의 중요성을 느낌

- 불균형 데이터의 레이블된 데이터가 많지않아 딥러닝보다는 머신러닝이 유의미한 결과를 나타낸 것으로 보임

- 비지니스 목적에 따라 평가척도를 세우는 것의 중요성을 느낌

  > fbeta score로 볼것인지, recall, precision을 볼 것인지

 

[References]

-oversampling 기법 : nearmiss, adasyn, smote 등 https://medium.com/james-blogs/handling-imbalanced-data-in-classification-problems-7de598c1059f

- algorithm : 

https://www.analyticsvidhya.com/blog/2017/03/imbalanced-classification-problem/

- 불균형 데이터 일반적인 핸들링 방법

https://towardsdatascience.com/handling-imbalanced-datasets-in-machine-learning-7a0e84220f28

- sampling 방법(한글)

https://datascienceschool.net/view-notebook/c1a8dad913f74811ae8eef5d3bedc0c3/

 

728x90
반응형
LIST
Comments