사이트맵  |  Contact Us
 
홈 > SAS Tech & Tip > SAS E-Miner 활용하기
[EM] Dealing with imbalanced data 2017.10.16
최세환 1153 3
http://www.mysas.co.kr/SAS_tiptech/j_eminer.asp?b_no=7482&gotopage=1&con=subject&keyword=&cmd=content&bd_no=29&gubun=

 


이번에는 여러 sampling 기법을 동일 data set에 적용하여 차이를 살펴보려고 합니다.


 


INTRODUCTION

 


계급불균형 자료에 경우 정확도의 역설이라는 정분류율이 높아도 의미가 없는 모형이 되는 문제가 발생하게 됩니다. 그래서 여러 sampling 기법을 이용하여 이를 해결하려고 합니다. 그렇다면 여러 sampling 중에 좋은 기법은 무엇인가 기법 간에 특징들을 비교를 통해 알아보도록 하겠습니다.


 

6가지 기법은



1. Under-Sampling


2. Over-Sampling(단순 임의 추출),


3. Under&Over-Sampling


4. Over-Sampling(복원추출)


5. Boostrapping


6. SMOTE – Macro



앞선 포스팅에서 기법들에 대한 소개와 그리고 실습을 진행한 포스팅이 있기 때문에 자세히 언급을 하지 않고 간략한 소개로 진행하겠습니다


사용할 데이터는 kaggle에 오픈 돼있는 “Credit Card Fraud Detection” 데이터로 신용카드 사기탐지를 위해 생성한 데이터입니다. 앞선 포스팅과 동일하게 원래는 다양한 변수들이 포함되어 있지만 개인정보보호 상의 문제로 변수들을 주성분분석을 통해 차원축소 시켜 놓은 데이터를 이용하였습니다. 그 결과 각 변수가 어떤 의미를 갖는지 해석이 불가능합니다.



METHODOLOGY



1. Under-Sampling



그림 1: Under-Sampling, Over-Sampling Node


[그림 1] Under-Sampling Over-Sampling 진행 과정입니다. EM에 있는 표본추출 노드를 통하여 진행을 하였고 추출 전에 IMPUTE Transform variables 노드를 통하여 데이터 전처리를 진행하였습니다.

Under-Sampling 을 통해 686 개에, Over-Sampling 을 통해 571 개에 data를 생성하였습니다.  또한 train validation 나누기 위해 데이터 분할 노드를 사용하였지만 앞선 페이지를 통하여 직접적인 연결이 가능하지 않아 sas 코드 노드를 통하여 validation data set을 이용하였습니다.


 

2 Over-Sampling(복원추출)



그림 2 Over-Sampling(replace) node


[그림 2] Over-sampling 과는 다른 추출 법으로 앞선 sampling은 단순 임의 추출로 즉, 중복 data가 존재하지 않습니다. 하지만 복원 추출법을 이용하여 중복을 허용한 추출을 진행 하였습니다. Surveyselect 프로시저를 이용한 sas 코드 노드를 이용하여 추출 하였습니다. 가장 중요한 부분은 데이터 분할을 진행시에 선행 노드를 통해 진행해야 합니다. 중복 data가 존재하기 때문에 train validation data set에 동일한 관측치가 존재해서는 안되기 때문입니다.


3. Under&Over-Sampling



그림 3: Under&Over-Sampling Node


[그림 3] Under&Over sampling 역시 중복 데이터가 존재를 하지만 앞선 Over sampling과는 다르게 많은 중복 데이터를 추출하지 않으며 또한 다수집단에 data 역시 sampling 하기에 정보손실을 줄여주면서 편향 역시 줄여주는 sampling으로 생각 됩니다. Under&Over sampling 역시 sas 코드 노드를 이용하여 진행 하였습니다.


4 Boostrapping



그림 4 Boostrapping-Sampling Node


 


[그림 4] Boostrapping 을 이용한 sampling 입니다. EM 노드를 이용한 Boostrapping 도 존재하지만 이번 포스팅에서는 sas 코드 노드를 이용하여 진행 하였습니다. Boostrapping에 경우 여러 모델 적용한 결과를 이용한 가중치를 사용하여 모델에 적중률을 높입니다. 그렇기에 노드 연결이 이어지는 것을 볼 수 있으며, 모델 ensemble 적용 하였습니다.



5 SMOTE – Macro



 

그림 5 Smote-Sampling Node


[그림 5] Smote samplig에 경우 가장 중요한 부분은 sampling 진행 전에 정규화를 진행해야 합니다. 관측치들 간에 거리를 이용하여 새로운 표본을 생성하는 과정이기에 정규화를 하지 않을 경우 단위가 다른 한 변수에 의해 결과가 편향 될 수 있습니다. 그래서 변수 변환 노드를 선행노드로 진행을 하였으며 의사결정 노드를 통해 사전확률을 앞선 포스팅과 동일하게 맞추었습니다.


PREDICTIVE MODELING



그림 6 Diagram


[그림 6] 기본적으로 결측값 처리와 변수 변환(정규성 최대화)을 이용한 데이터 전처리를 진행하였고 데이터 분할은 70:30으로 지정하였습니다. 모델 적용에서는 Bootstrapping samping 을 제외하고는 총 3개의 모델을 이용하였습니다. [의사결정 나무], [신경망], [Logistic regression] 을 적용하였습니다. 옵션에 경우 sampling 기법들에 차이를 보기 위하여 default 값 을로 놓고 진행하였습니다. Bootstrapping의 경우 가장 많이 사용하는 [의사결정 나무]를 이용한 ensemble을 진행하여 모델비교를 진행하였습니다.


GOODNESS-OF-FIT


모델 명

ROC index

RR

MR

SEN

SPEC

회귀(Regression) (6)

0.989

0.977342048

0.022658

0.946309

0.986842

의사결정트리(Decision Tree) (9)

0.948

0.9708061

0.029194

0.899329

0.996411

앙상블(Ensemble)

0.946

0.975163399

0.024837

0.892617

0.998804

신경망(Neural Network) (6)

0.981

0.982570806

0.017429

0.926174

0.983254

under 의사결정

0.939

0.906705539

0.093294

0.885906

0.992823

under 신경망

0.981

0.986880466

0.01312

0.912752

0.980861

under Logistic

0.987

0.951895044

0.048105

0.939597

0.983254

smote 의사결정

0.967

0.957183635

0.042816

0.947777

0.9689

smote 신경망

0.968

0.937202664

0.062797

0.9012

0.961722

smote Logistic

0.928

0.872312084

0.127688

0.831334

0.922249

replace-over 의사결정

0.957

0.907530738

0.092469

0.899329

0.996411

replace-over 신경망

0.981

0.953637295

0.046363

0.90604

0.995215

replace-over Logistic

0.989

0.944672131

0.055328

0.946309

0.98445

over&under 의사결정

0.944

0.921167247

0.078833

0.899329

0.990431

over&under 신경망

0.986

0.965156794

0.034843

0.926174

0.994019

over&under Logistic

0.987

0.946428571

0.053571

0.946309

0.990431

no-replace-over 의사결정

0.949

0.905429072

0.094571

0.912752

0.980861

no-replace-over 신경망

0.976

0.989492119

0.010508

0.932886

0.964115

no-replace-over Logistic

0.985

0.949211909

0.050788

0.946309

0.9689


-1 결과


 



그림 .7 ROC GRAPH



 


그림 8 ROC 인덱스


[그림7]을 통해 대부분의 모델이 왼쪽 상단에 가까운 형태를 보이고 있습니다. 또한 train validate 의 값의 큰 차이는 없으며 가장 큰 차이를 보이는 모델은 단순임의추출한 over-sampling 으로 train에선 0.999에서 validate 0.976으로 큰 차리아고 볼 수 없기에 모델에 과적은 없다고 판단할 수 있습니다. 가장 낮은 ROC 인덱스 값을 보면 train validate 모두 smote Logistic 입니다. 다른 Logistic regression모델들 보다 낮은 값을 보이는데 이는 smote sampling을 통한 데이터 변환 진행 한 경우 새롭게 생성되는 데이터가 발생하게 됩니다. 그렇기에 Logistic regression에 경우 많은 가정과 다중공선성을 한번 더 확인 후 세부적 조정한 후에 모델을 적용하면 성능이 올라갈 것 이라고 생각됩니다. 그렇지만 모든 모델에 ROC 인덱스 값이 0.9 이상이기에 정확도에 큰 문제는 없을 것으로 보입니다.




그림 9 특이도와 민감도


[그림9]는 각 분류기 별 특이도와 민감도 입니다. 계급불균형 자료이기 때문에 특이도가 더 높은 값을, 민감도가 낮은 값을 보입니다. Sampling을 하지 않은 3가지 분류기 중에 Logistic regression을 제외한 신경망과 의사결정나무에 경우 특이도와 민감도가 다소 차이가 있어 보이므로 이러한 문제를 해결하기 위해 sampling을 적용한 경우 민감도가 높아지는 경우가 발생하였습니다. 또한 smote-의사결정 과 단순임의추출 over-Logistic의 경우는 특이도와 민감도가 높은 값에서 차이가 거의 나지 않는 모형으로 나타나기에 정확도가 높은 결과로 나타났습니다.


 


CONCLUSION


이번엔 여러 Sampling 기법을 SAS EMSAS CODE 를 통하여 구현해보았습니다. 여러 Sampling을 동일 데이터에 적용하여 전체적인 비교를 진행하였습니다. 예상외로 sampling을 하지 않은 모델에도 잘 적합하였지만 더욱 소수 데이터 분류를 위해 모델에 성능을 높이기 싶다면 sampling을 통한 분석이 좋음을 확인 할 수 있습니다. 실습을 하게 되신다면 더욱 불균형이 심한 데이터를 해보는 것을 추천 드리겠습니다.



REFRERENCE


[1] 7 Techniqes to Handle Imbalanced Data, KDnuggets, 2017-jun, https://www.kdnuggets.com/2017/06/7-techniques-handle-imbalanced-data.html?utm_content=bufferf0775&utm_medium=social&utm_source=facebook.com&utm_campaign=buffer


[2]  Practical Guide to deal with Imbalanced Classification Problems in R,Analytics Vidhya,


MARCH 28 2016, https://www.analyticsvidhya.com/blog/2016/03/practical-guide-deal-imbalanced-classification-problems/


 


.