BookmarkSubscribeRSS Feed

[EM] k-fold cross validation

Started ‎06-10-2020 by
Modified ‎06-10-2020 by
Views 137

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

이번 시간부터는 SAS E-miner에서 제공하는 ‘그룹처리’노드의 사용법에 대해 알아보도록 하겠습니다. 오늘은 그 첫 번째 순서로 그룹처리 노드의 개요와 그룹처리 노드를 이용해 k겹 교차타당성 검증(k-fold cross validation)구현하는 방법에 대해 알아보도록 하겠습니다.  

 

INTRODUCTION

그림 1은 SAS E-Miner의 일반적인 그룹처리 프로세스를 나타내고 있습니다. 그룹 처리 노드의 경우 ‘그룹시작’, ‘그룹종료’ 이렇게 두 부분으로 이뤄져 있습니다. 그룹처리노드의 경우 그룹시작 노드의 [분석]속성을 이용해 세부적인 옵션을 조정하고 있고 이 옵션 설정에 따라 다양한 기능을 수행하는 것이 가능합니다.

 

SE22017012120013270.jpg

그림 1 : 그룹처리 노드의 일반적인 흐름도

 

그룹 시작 노드의 기초 설정에 따라 아래와 같은 기능을 수행하는 것이 가능합니다.

 

1. 다양한 목표(target)변수를 동일한 프로세스를 이용해 분석해야 하는 경우

2. 그룹변수(예: 성별, 직업, 지역 등)를 이용한 개별 모형을 생성하는 경우

3. 모형의 안정성을 평가하기 위해 교차타당성 검증과 같은 기법을 이용하는 경우

4. 특정한 인덱스에 따른 루프를 수행해야 하는 경우

5. 재표집(resampling)방법을 이용한 다양한 모형을 생성해야 하는 경우(예: 배깅, 부스팅)

 

이번 연재에서는 위 5가지 기능 중 3번 즉, 교차타당성 검증을 구현하는 방법에 대해 알아보도록 하겠습니다.

 

K-FOLD-CROSS VALIDATION

교차타당성 검증(cross validation)은 검증용 데이터와 학습용데이터를 서로 변경해 가면서 모형의 타당성을 검증하는 방법입니다. 이러한 기본적인 개념을 가지고 좀 더 엄밀성과 정확성을 높인 방법이 바로 k겹 교차타당성 검증(k-fold-cross validation)방법입니다.

 

SE22017012120034670.jpg

그림 2: ten-fold cross validation 개념도

 

그림 2는 k-fold cross validation의 특수한 경우인 ten-fold-cross validation에 대한 개념도입니다. 모형학습 및 평가에 이용할 데이터(original data set)을 생성하고 생성된 데이터를 임의로 10개의 하위 데이터 셋으로 분할합니다. 그런 다음 이렇게 분할 된 데이터를 이용해 1~9번은 학습용, 10번은 평가용으로 이용해 모형평가 지표를 산출합니다. 그 다음엔 1~8, 10번을 학습용, 9번을 평가용으로 이용하여 또 모형평가 지표를 생성합니다. 이렇게 총 10번의 모형 평가과정을 거친 다음 최종적으로 위 과정 중 생성된 10개의 평가 지표의 평균을 이용해 해당 모형의 적합도를 평가합니다. 일반적으로는 k=10인 Ten-fold cross validation이나 k=5인 five-fold cross validation이 많이 이용되는 것으로 보입니다. 또한 흔히 말하는 교차타당성 검증의 경우 k=2인 경우를 의미합니다. 즉, 교차타당성 검증은 k-fold cross validation의 특수한 경우라고 말할 수 있습니다. 

 

DATA DESCRIPTION

이번 연재에서 사용할 데이터는 지난 랜덤포레스트(실습)연재에서 이용했던 ‘Universal Bank’데이터 입니다. 이 데이터는 가상 데이터로 분석 목적은 개인고객의 금융거래 정보 등을 이용하여 향후 있을 마케팅 캠페인에 반응(개인담보대출을 받을 만한)할 고객을 예측하는 것입니다. 

 

SE22017012120041070.jpg

표 1: 변수설명

 

위 변수들을 살펴보면 우선 일반적인 정보로는 ID, Age, Income, ZIPCODE 등이 있습니다. 이중 ZIPCODE의 경우 미국 zip code와 결합하여 지역정보를 유추하는 것이 가능하나 본 실습에서는 이용하지 않도록 하겠습니다. 그 외에 금융관련 정보로는 CCAvg, Securities Account, CD Account, Online, Credit Card등이 있습니다. 이 정보들은 계좌보유 유무 및 접속 채널 그리고 우리 은행을 얼마나 자주 이용하는지 등의 정보를 내포하고 있습니다.

지난 연재에서 이미 한 번 다룬 바가 있기 때문에 데이터에 대한 세부적인 설명은 생략하도록 하겠습니다.

 

CROSS VALIDATION-TEST MODELS

그룹처리 노드의 경우 앞서 말한 바와 같이 교차타당성 검증을 구현하는 데에 이용하는 것이 가능합니다. 일반적으로 교차타당성 검증은 입력 데이터의 수가 적은 경우 매우 유용한 것으로 알려져 있습니다. 그룹처리 노드를 이용한 교차타당성 검증을 수행하기 위해서는 우선 이용할 데이터 셋에 cross validation에 이용할 군집변수가 필요합니다. 이 군집변수를 생성하는 방법은 크게 두 가지가 있습니다. 

 

· 변수변환 노드를 이용한 임의 군집(segment)생성

· SAS code노드를 이용한 임의 군집생성

 

첫 번째 방법의 경우 생성이 쉽고 별도의 어려운 코딩을 이용하지 않아도 된다는 장점이 있는 반면에 각 군집에 주어지는 샘플의 숫자가 다소 상이한 경향이 있다는 단점이 있습니다. 반면 두 번째 방법의 경우 SAS code노드를 이용해 군집을 부여하는 방법으로 첫 번째 방법에 비해 좀 더 어려운 코드를 이용해야 한다는 단점이 있는 반면, 대체로 각 군집에 포함되는 샘플의 숫자가 변수변환 노드를 이용한 방법에 비해 훨씬 균등하게 이뤄지는 장점이 있습니다.

 

SE22017012120044870.jpg

그림 3: Segment 생성 flow

 

이번 연재에서는 위 두가지 방법에 대해 모두 알아보도록 하겠습니다. 실무에서는 목적에 맞게 이용하시면 될 것 같습니다. 

 

변수변환 노드를 이용한 군집생성 방법

먼저 좀 더 쉬운 방법인 변수변환 노드를 이용한 군집생성 방법에 대해 알아보도록 하겠습니다. 변수 변환 노드는 주로 변수의 분포수정 파생변수 생성, 그룹화 등의 다양한 용도 등으로 많이 사용되는 노드로 이 노드를 이용해 새로운 변수를 생성하는 것 역시 가능합니다. 

 

SE22017012120052370.jpg

 

그림 4: 변수변환 노드의 수식을 이용한 군집생성

 

변수 변환노드를 선택한 뒤 수식을 클릭하면 그림 4의 좌측과 같은 화면이 나오게 됩니다. 이때 위 그림과 동일한 순서로 [생성]아이콘을 클릭합니다. 그 다음 (1)생성할 변수의 이름을 임의대로 생성하고, (3)레이블은 ‘Segment’로 설정합니다. 그 다음 수식에 ‘int((10*ranuni(123)))+1)’을 기입합니다. 이 수직은 random seed로 123을 이용하고, 값의 범위가 1~10인 정수형 난수를 생성한다는 의미를 갖습니다. 

 

SE22017012120063870.jpg

그림 5: 생성된 군집의 분포

 

그림 5는 생성된 군집의 분포를 나타내는 그래프로 비교적 균등하게 분포되어 있으나 다소 10번 seg와 6번 seg의 경우 꾀 많은 차이를 보이는 것을 알 수 있습니다. 이와 같이 ranuni()함수를 이용한 segments변수 생성의 경우 randomness가 독립적으로 반영되기 때문에 전체적으로 완전하게 균등하게 나는 것에는 제약이 있습니다. 물론 위 방법을 이용해 생성된 군집을 이용하여 교차타당성 검증을 진행해도 무관합니다. 

 

SAS CODE 노드를 이용한 군집생성 방법

이번에 소개해 드릴 방법은 SAS code노드를 이용해 군집을 생성하는 방법으로 아이디어는 (1) random number를 이용해 관측치를 정렬합니다. 그 다음 (2) 정렬 된 표본들의 순서를 나머지 함수(mod)를 이용해 1~10사이의 값을 생성하도록 합니다. (3) 생성된 값을 이용하여 군집변수로 활용합니다.

 

SE22017012120070570.jpg

 

그림 6: SAS코드노드를 이용한 군집생서 프로세스

 

그림 6의 좌측의 그림처럼 사전에 SAS코드 노드를 생성합니다(*위 그림의 경우 SAS코드 노드의 목적에 맞게 이름을 바꿔주었습니다). 그 다음 [분석]의 [코드 편집기]항목의 […]을 클릭합니다. 그러면 좌측과 같이 SAS코드를 기입할 수 있는 창이 생성됩니다. (1)번은 random seed값과 k값을 할당하기 위한 매크로 변수 생성 과정입니다. 필요에 따라 random seed와 k값을 변경하기 용이하도록 위와 같이 사전에 매크로 변수로 정의해 주는 것이 좋습니다. 

 

(2)번 과정은 사전 노드를 통해 불러온 데이터(&EM_IMPORT_DATA)를 ranuni()함수를 이용해 생성한 변수를 이용해 정렬합니다(랜덤하게 관측치들이 섞이는 효과가 발생). 그렇게 임의로 섞여진 데이터를 내보 낼 데이터(&EM_EXPORT_TRAIN)에 저장합니다.

* &EM_.... : Enterprise Miner에서 제공하는 매크로 변수로 자세한 역할과 기능은 도움말을 참고 하시기 바랍니다. 

 

(3)번 과정은 임의의 군집번호를 생성하는 과정으로 monotonic()함수를 이용합니다. Monotonic()함수는 data step의 자동변수 _N_과 동일한 역할을 하는 함수로 관측치의 순서에 맞게 연번을 부여해 줍니다. 따라서 monotonic()함수의 반환 값을 k로 나누게 되면 0 ~ k-1의 번호가 생성되게 됩니다. 이 때 1~10으로 연번을 부여하기 위해서는 해당 값에 1을 더해주면 됩니다. 

 

(4)번 과정은 (3)번 과정에서 생성한 군집변수(cross_seg)의 역할을 설정해 주는 코드입니다. %EM_METACHANGE 매크로 함수는 E-miner의 변수의 meta를 변경하고자 할 때 매우 유용한 함수입니다. 첫 번째 인수로 변경하고자 하는 변수의 이름(name)을 할당하고, 두 번째 인수로 변경할 변수의 역할(role)을 할당할 수 있습니다. 그리고 level을 이용해 변수의 level을 조정해 줄 수 있습니다. 이번에는 역할은 segment, 레벨은 nominal로 변경해 주었습니다.

 

SE22017012120074870.jpg

그림 7: SAS코드 노드를 이용해 생성한 군집변수의 분포

 

그림 7과 같이 SAS코드 노드를 이용해 생성한 군집변수의 경우 각 관측치를 임의로 섞습니다. 그 다음 연번에 따라 정확하게 데이터를 k개로 분할합니다. 그 결과 각 군집의 관측치의 수가 매우 균등하게 분포하게 됩니다. 위 그림의 경우에도 각 군집이 정확하게 모두 500개씩 균등하게 분포된 것을 알 수 있습니다.

 

K-FOLD CROSS VALIDATION 구현

이번 연재에서는 앞서 알아본 방법 중 SAS코드 노드를 이용하여 군집을 생성하는 방법을 이용해 10-fold cross validation을 구현해 보도록 하겠습니다. 

 

SE22017012120081870.jpg

그림 8: ten-fold cross validation diagram

 

그림 8과 같이 우선 데이터에 SAS코드 노드를 연결하여 군집을 생성해 줍니다. 그 다음 그룹시작 노드와 SAS코드 노드를 연결합니다. 그리고 그룹시작 노드와 그룹종료 노드 사이에 교차타당성 검증에 이용할 모형을 배치시킵니다. 모형의 경우 여러 개를 삽입하는 것 역시 가능합니다. 그룹시작과 그룹종료사이에 있는 모든 노드들의 일련의 과정을 반복하게 됩니다. 

 

SE22017012120084270.jpg

그림 9: 그룹시작 노드의 옵션변경

 

교차타당성 검증을 위해서는 우선 그룹처리에서 그룹시작 노드의 설정을 변경해 주어야 합니다. 그룹시작 노드의 [일반]항목의 [모드]옵션을 ‘교차검증’으로 변경해 줍니다. 그 다음 [최소 그룹 크기]를 10으로 조정해 주면 10-fold-cross validation을 구현할 준비가 모두 끝나게 됩니다.

 

 

SE22017012120090470.jpg

 

그림 10: 그룹종료 노드의 결과 창

 

교차타당성 검증 결과는 ‘그룹종료’노드를 우 클릭한 뒤에 [결과]를 클릭하여 확인할 수 있습니다. 그룹 종료 노드의 결과는 그림 10과 같습니다. (1)번 표에서는 각 군집에 대한 모형평가 지표의 통계량을 그래프로 확인할 수 있습니다. _OVERALL_은 전체 평균치에 대한 결과를 의미합니다. (3)표에서는 세부적인 통계량을 확인할 수 있고, 스크롤 다운을 하다 보면 (1)과 마찬가지로 _OVERALL_이라는 항목을 확인할 수 있습니다. 위 그림과 같이 얻어진 결과들을 토대로 모형의 성능을 최종적으로 검증하게 되면 좀 더 정확한 평가가 가능합니다.

 

CONCLUSION

이번 연재에서는 그룹처리 노드의 개략적인 프로세스 및 이를 이용해 구현할 수 있는 유용한 기능들이 무엇이 있는지 알아보았습니다. 그 중에서 자주 이용되는 모형평가 방법 중 하나인 교차타당성 검증 방법의 대략적인 이론적 배경을 알아 보았습니다. 그 다음 SAS E-Miner를 이용해 구현하는 두 가지 방법에 대해 알아 보았습니다. 군집생성 방법의 경우 변수변환 노드를 이용한 방법, SAS코드 노드를 이용해 생성하는 방법 둘 중 어떠한 것을 이용하여도 무관합니다. 끝으로 교차타당성 검증 결과를 확인하는 방법까지 확인해 보았습니다. 다음 연재에서는 본 연재의 서두에서 언급되었던 다양한 적용 방법을 이용하는 방법에 대해 알아보도록 하겠습니다. 

 

REFERENCES

[1] http://support.sas.com/resources/papers/proceedings10/123-2010.pdf

[2] http://support.sas.com/documentation/onlinedoc/miner/casestudy_59123.pdf

[3] Kohavi, Ron. "A study of cross-validation and bootstrap for accuracy estimation and model selection." Ijcai. Vol. 14. No. 2. 1995.

 

Version history
Last update:
‎06-10-2020 04:07 AM
Updated by:
Contributors

SAS Innovate 2025: Call for Content

Are you ready for the spotlight? We're accepting content ideas for SAS Innovate 2025 to be held May 6-9 in Orlando, FL. The call is open until September 25. Read more here about why you should contribute and what is in it for you!

Submit your idea!

Article Labels
Article Tags