로그인   |  회원가입  |  사이트맵  |  Contact Us
  아이디 저장하기
 
홈 > SAS Tech & Tip > SAS E-Miner 활용하기
[EM] Dealing with imbalanced data - SMOTE 2017.03.30
한노아 587 0
http://www.mysas.co.kr/SAS_tiptech/j_eminer.asp?b_no=7233&gotopage=1&con=subject&keyword=&cmd=content&bd_no=29&gubun=

 

 

 

안녕하세요 MySAS홍보대사 한노아입니다.

오늘은 샘플링 방법 중 가장 모던한 알고리즘 중 하나인 SMOTE방법을 이용해 계급불균형 문제를 완화하는 방법에 대해서 알아보도록 하겠습니다.

 

INTRODUCTION

계급불균형자료의 경우 분류기의 학습알고리즘의 특성에 의해 높은 정분류율에도 불구하고 의미 없는 모형이 만들어지는 정확도의 역설 문제가 발생한다는 사실을 지난 연재를 통해 알아보았습니다. 이번 시간에는 EM의 [SAS 코드]노드를 활용해 SMOTE를 구현하고 이를 이용해 계급불균형 문제를 해소해 보도록 하겠습니다.

 

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

2. Over-Sampling(복원추출), Under&Over-Sampling

3. 비용함수를 이용한 방법 - Decision 노드 활용

4. 모형을 이용한 방법 – RUSBoost, UnderBagging 등

5. SMOTE – Macro를 이용한 방법과 Open Source Integration 노드를 이용한 방법

 

더불어 지난시간에 다루지 못 했던 [의사결정]노드에 기반해 샘플링한 데이터의 사전확률 보정방법에 대해서도 알아보겠습니다. 샘플링의 경우 평가하는 문제가 민감한 문제 중 하나이기 때문에 이 부분도 큰 도움이 될 것 같아 준비해 보았습니다.

 

SMOTE : SYNTHETIC MINORITY OVER-SAMPLING TECHNIQUE

SMOTE방법은 소수계급의 개체수를 늘리는 방법으로 ROS(Random Over-Sampling)과 유사한 방법이지만, 기본적으로 똑 같은 샘플을 재 생성하는 것이 아니라 기존 샘플들을 적절하게 조합하여 새로운 샘플을 만든다는 점에서 어느정도 오버피팅(Overfitting)을 막을 수 있다고 알려져 있는 방법입니다. 실제 계급불균형 자료에 대한 실험에서도 SMOTE가 챔피언 모형인 경우가 종종 습니다. 

 

대략적인 알고리즘은 우선 기준이 되는 샘플을 한 개 놓고 해당 샘플과 가장 가까운 k개의 샘플을 추려냅니다. 이 때 k개의 샘플은 모두 소수계급에서 추출한 자료입니다. 일반적으로 k는 5정도로 설정한다고 하지만 저 같은 경우 SAS paper에서 수행한 것과 같이 k=10으로 설정하고 샘플링을 진행했습니다. 그 다음 k개의 샘플 가운데 미리 지정한 샘플링 비율에 따라서 적당한 개수의 샘플을 랜덤하게 선별합니다. 그 후, 각각의 랜덤하게 선별된 샘플과 기준샘플(군집중심)과의 연결 선상의 임의의 점을 선택해 새로운 샘플을 생성합니다. 


METHODOLOGY

이제 EM에서 SMOTE를 구현하는 방법에 대해서 알아보겠습니다. 우선 이번에 사용할 데이터는 kaggle에 오픈 돼있는 “Credit Card Fraud Detection” 데이터로 신용카드 사기탐지를 위해 생성한 데이터입니다. 원래는 다양한 변수들이 포함되어 있지만 개인정보보호 상의 문제로 변수들을 주성분분석을 통해 차원축소 시켜 놓은 상태입니다. 그 결과 각 변수가 어떤 의미를 갖는지 해석이 불가능합니다.

 

사실 이 데이터에는 건수, 시간 변수가 포함되어 있고, 총 건수는 284,807개이고 이 중 사기 발생 건수는 492건 입니다. 하지만 이렇게 불균형비가 심한 경우에는 샘플을 생성하는 데에 소용되는 시간이 너무 오래 걸리기 때문에 제가 사전에 85:15의 비율로 불균형 비를 조정해 두었습니다. 실습하실 때는 원래 비율이 85:15였다고 생각하시고 진행하시면 될 것 같습니다. 

 

그 결과 데이터의 총 건수는 3,280건으로 상당이 줄었습니다(덕분에 학습시간도 대폭 단축되었음). 또한 time변수 및 amount변수는 이번 실습에 이용하지 않을 것이기 때문에 제거했습니다. 그래서 남은 변수와 그 역할은 아래와 같습니다.

 


제가 이번에 공유해드리는 코드의 경우 기존에 SAS paper에서 이용했던 코드를 EM환경에 맞게 다소 변경한 코드입니다. 하지만 이번 코드의 경우 EM환경에 대한 완전한 이식을 하지 못했기 때문에 다소 제약이 있습니다. 우선 추출 데이터의 수를 “threshold”라는 매크로 변수의 값을 적절히 조정해 50:50과 유사하게 맞춰야 합니다. 또한 id변수의 경우 문자형 이어야 합니다. 그리고 [데이터 분할]노드 뒤에서 사용하면 오류가 발생합니다. 코드의 경우 이용하실 때 그대로 이식해서 쓰시지 말고 주석등을 참고해 전반적인 처리 절차를 이해한 다음 적용할 것을 권해드립니다. 끝으로 Target변수의 자료형에 따라 소수계급을 거르는 부분을 일부 수정해 주셔야 합니다. 현재는 1, 0의 수치형 Target을 갖고 1인 경우가 소수계급이라는 가정하에 코드를 짰습니다. 

 

 


이번에 이용할 다이어그램 구성은 위와 같습니다. 위와 같이 [데이터 분할]노드 앞에서 Under-Sampling이나 Over-Sampling과 같은 데이터 조작이 일어날 경우에는 [의사결정]노드를 이용한 사전확률 보정이 필수적입니다. 그렇지 않으면 모델링 과정에서 얻은 정확도보다 실제 모형적용시에 얻게 될 정확도가 현저하게 떨어질 수 있습니다.

 

의사결정 노드의 설정은 아래와 같은 절차로 진행하시면 됩니다.


먼저 의사결정 노드를 클릭하고 [사용자 정의 편집기]항목의 […]버튼을 클릭합니다. 그러면 위와 같은 창이 나오게 됩니다. 그러면 [새로고침]을 클릭해 줍니다.

 


그러면 위와 같은 화면이 등장하게 됩니다. [새로운 사전확률을 입력하시겠습니까?]의 [예(Y)]를 선택합니다. 그러면 하단의 [보정된 사전확률]이 위와 같이 활성화 되게 됩니다. 그리고 앞선 샘플링 이전의 데이터 비율인 0.15와 0.85를 입력해 줍니다. 이렇게 하면 모형 평가시에 사전확률이 반영돼 좀 더 정확하게 모형에 대한 평가가 이뤄지게 됩니다. 그리고 끝으로 확인을 눌러줍니다.

 

PREDICTIVE MODELING


모형 적합에 이용한 분류기는 [의사결정나무], [신경망], [로지스틱]입니다. 각 모형을 SMOTE를 한 모형과 그렇지 않은 모형으로 구분하여 SMOTE의 성능향상 효과를 추정해 보도록 하겠습니다. 우선 각 노드들의 세부옵션에 대한 설명입니다.

 


먼저 [데이터 분할]노드의 경우 위와 같이 분석용과 평가용을 60:40으로 분할하도록 하겠습니다. 보통은 40/30/30또는 70/30을 많이 이용하지만 이 경우에는 평가용 데이터에 소수계급 데이터가 너무 적게 포함되게 되면 제대로 평가가 이뤄진 것인지 확인하기가 어렵기 때문에 비율을 일부 조정했습니다.

 


다음으로 각 변수들에 대한 기술통계입니다. 결측은 없기 때문에 별도의 결측처리절차는 불필요할 것으로 보이나 왜도 및 첨도 값으로 미뤄보아 편향된 분포의 형태를 갖는 변수들이 많은 것으로 보입니다.

 


이럴 경우 회귀모형의 성능이 다른 모형에 비해 떨어질 우려가 있고 기타 잡음 등을 제거하는 차원에서 위와 같이 [변수변환]노드의 [정규성 최대화]옵션을 이용해 변수변환을 진행하도록 하겠습니다.

 


끝으로 모형 평가 노드의 경우 앞선 연재와 마찬가지로 AU-ROC에 근거한 챔피언 모형선택을 위해 옵션 [통계량 선택]옵션을 [ROC]로 변경하고 [선택 테이블]역시 [평가용]으로 변경하도록 하겠습니다.

 

GOODNESS-OF-FIT


ROC그래프에 근거한 모형 적합 결과입니다. 보시는 것과 같이 [Dtree]모델이 적합도가 다른 모형에 비해 다소 떨어지는 것을 제외하고는 대다수의 모형이 매우 높은 AUC를 나타낼 것으로 보입니다. ROC그래프의 형태가 대다수 좌상향으로 그려져 있고 학습용, 평가용 모두 유사한 형태를 나타내는 것으로 보아 학습용 데이터에 대한 과적합 문제는 발생하지 않은 것으로 판단됩니다.

 


세부적인 통계량 입니다. 현재 수치상으로는 일반 [로지스틱]모형과 SMOTE로 불균형을 보정한 [신경망]모형이 동일한 AUC를 나타낸 것을 알 수 있습니다. 반면에 [의사결정나무]의 경우 앞서 ROC그래프를 통해 확인할 수 있었든 제일 낮은 AUC를 나타낸 것을 알 수 있습니다. 하지만 대체로 AUC값이 0.9후반대를 상회하는 수치를 보여 모형에 대한 신뢰도가 상당히 높은 것으로 추정됩니다.

 

 

이제는 우리의 관심집단인 “신용카드 사기”발생에 대한 예측력이 뛰어난 모형이 무엇인지 확인해 보도록 하겠습니다.


계급불균형 자료 특성에 맞게 모든 모형이 민감도가 높은 것을 알 수 있습니다. 반면 [SMOTE-Tree]모형의 경우 민감도뿐만 아니라 특이도 역시 약 93%정도로 전체 사기의 약 93%정도를 잡아낼 수 있는 성능을 나타내고 있는 것을 알 수 있습니다. 반면에 SMOTE샘플링을 하지 않은 [의사결정나무] 및 [신경망]모형의 경우 샘플링 처리를 통한 보정모형이 더 우수한 것을 알 수 있습니다.

 


 

 

CONCLUSION

오늘은 계급불균형 자료의 불균형 문제를 해소하기 위한 모던 알고리즘 중 하나인 SMOTE를 SAS EM환경에서 구현하는 방법에 대해 알아봤습니다. 코드의 완성도가 다소 떨어지는 점 양해 부탁드립니다. 여하튼 오늘은 크게 SMOTE의 대략적 알고리즘 및 원리에 대해 알아보았고,  [의사결정]노드를 이용한 사전확률 보정 방법에 대해 알아보았습니다. 먼저 SMOTE의 경우 KNN알고리즘에 기반해 사전에 설정된 K값을 이용한 인접한 샘플들의 정보를 종합해 “새로운”샘플을 생성하는 방법으로 이를 이용할 경우 기존 Over-Sampling방법보다 과적합(Overfitting)의 위험이 다소 감소한다는 사실을 이야기 했습니다. 또한 [의사결정]노드의 경우 [데이터 분할]이전에 샘플링이 이뤄질 경우 그로 인해 발생한 모형평가의 편향 문제를 해소하기위한 방법이라는 사실을 확인했습니다. 앞선 연재에서 다뤘던 샘플링 기법들 역시 [데이터 분할]이전에 샘플링을 할 경우에는 위와 같이[의사결정]노드를 이용한 [사전확률]보정을 진행해 주어야 합니다. 그럼 오늘연재는 여기서 마무리하고 다음 시간에는 [오픈소스 통합]노드를 이용한 SMOTE에 대해 알아보도록 하겠습니다. 이 경우 [오픈소스 통합]노드에 대한 부가설명이 길어질 경우 SMOTE는 그 다음 연재로 넘어갈 수도 있음을 먼저 말씀드리겠습니다.

 

REFERENCES

[1] Chawla, Nitesh V., et al. "SMOTE: synthetic minority over-sampling technique." Journal of artificial intelligence research 16 (2002): 321-357.

[2] Wang Ruizhe, Lee Novik, Wei Yun. 2015. “A Case Study: Improve Classification of Rare Events with SAS Enterprise Miner." Proceedings of the SAS Global Forum 2015 Conference, 3282-2015.

[3] Guzman Lina. 2015. “Data sampling improvement by developing SMOTE technique in SAS." Proceedings of the SAS Global Forum 2015 Conference, 3483-2015.

 

 

 

 

 
  creditcard_sample.sas7bdat
SMOTE_EM_CODE.sas
다운로드 수 | 18
    
 
 [EM] Linear Model Regularization (Shrinkage Methods) (1)
 [EM] Dealing with imbalanced data - The Cost-Sensitive Approach