안녕하세요 MySAS홍보대사 한노아입니다.
오늘은 지난시간에 알아본 부스팅(boosting)알고리즘을 E-miner에서 구현하는 방법에 대해 알아 보도록 하겠습니다.
ABSTRACT
SAS E-miner에서는 (1) SAS코드 노드를 이용한 부스팅, (2) group processing 노드를 이용한 부스팅 그리고 (3) gradient boosting 노드를 이용한 boosting 이렇게 세 가지 방법으로 부스팅을 구현하는 것이 가능합니다. 사실 첫 번째 방법의 경우 개념적인 흐름을 이해하는 용도로 활용하는 것이 좋고, 실무나 연구 목적으로 E-miner를 이용해 부스팅을 구현하는 경우에는 group processing이나 gradient boosting 노드를 이용할 것을 권해드립니다.
INTRODUCTION
이번 실습과정에서는 (1) SAS코드 노드를 이용한 부스팅과 (2) group processing을 이용한 부스팅 이렇게 두 가지에 대해서 다뤄보도록 하겠습니다. (3)번의 경우 다음 고급 앙상블 기법에 대한 연재를 진행할 때 세부이론 및 실습을 진행하고 이번 실습과정에서는 생략하도록 하겠습니다.
실습 데이터소개
실습데이터는 UCI데이터 중 하나인 Adult데이터 입니다. 이번 실습에서는 저번 배깅실습과 동일하게 adult데이터를 이용하도록 하겠습니다. 지난 실습과 마찬가지로 이번에도 “fnlwgt”변수는 이용하지 않도록 하겠습니다. 또한 income변수의 경우 실습편의를 위해 기존과 동일하게 Target으로 이름을 변경했음을 알려드립니다. 데이터에 대한 자세한 정보는 Reference를 참고해 주시기 바랍니다.
변수역할 설정
변수 역할은 위와 같이 지정하시고, 이 데이터는 확인결과 최대 5%정도의 결측률을 갖는 변수가 존재하기 때문에 이번에도 모델링 과정에서는 결측치를 하나의 범주로 취급하는 의사결정 나무모형을 중심으로 실습을 진행하도록 하겠습니다.
SAS코드 노드를 이용한 부스팅
먼저 SAS코드 노드를 이용한 부스팅의 경우 위와 같이 총 7개의 SAS code노드를 이용했습니다. ①노드의 경우 bootstrapping을 위한 노드로 초기에 weight값이 주어지지 않았기 때문에 method옵션을 URS로 설정했습니다. ②번 노드는 첫 번째 분류기에서 오분류 된 관측치 들에 대하여 sample가중치를 주는 역할을 수행합니다. 마지막으로 ③번 SAS코드 노드는 직전 부스팅 라운드에서 반영된 가중치를 샘플추출에 반영하기위해 method옵션을 PPS_WR로 변경하여 bootstrapping을 진행하기 위한 노드입니다. 각각에 대한 세부코드는 아래와 같습니다. 각 DTree의 경우 최대 깊이(Maximum Depth)를 50으로 조정했고 나머지 모든 노드들은 옵션조정사항 없습니다.
①, ③번 코드는 가중치의 반영여부를 제외한 나머지 부분은 모두 동일합니다. 매크로의 첫 번째 스텝은 전체 관측치의 개수가 몇 개인지 파악하기 위한 코드입니다. 두 번째 surveyselect 프로시저는 SAS에서 sampling을 위해 주로 사용되는 프로시저로 bootstrap sample을 추출하기위해 ①번의 경우 urs옵션을 이용해 가중치를 반영하지 않은 표본추출 방법이고, ③번 코드의 경우엔 PPS_WR옵션과 size문을 이용해 sample가중치를 반영하는 코드입니다. size문 바로 좌측에 가중치로 이용할 변수를 명시하면 해당 변수의 값으로 가중치가 반영되어 표본추출시에 반영되게 됩니다. ②번 코드는 비교적 간단하지만 의미는 학습에 의해 결정된 예측치와 실측치가 서로 상이하면 _freq_변수를 이용해 해당 관측치에 가중치를 주는 코드입니다.
GOODNESS-OF-FIT
위 표는 각 분류기들의 평가용(validation) 데이터에 대한 결과들입니다. 먼저 정확도(RR)의 경우 부스팅 알고리즘이 다른 모형들에 비해 약 5%정도 낮은 것을 알 수 있고, 대부분 85%를 상회하는 수준의 정확도를 보이는 것을 알 수 있습니다. 하지만 이 데이터의 경우 Target변수의 분포가 고르지 않아 한쪽으로 편향된 예측의 가능성이 높은 데이터입니다. 따라서 AU-ROC, 특이도, 민감도 등을 살펴보는 것이 좋습니다.
민감도(SEN)의 경우 부스팅 모형이 다른 모형에 비해 정확도가 약 10%정도 떨어지는 것을 알 수 있습니다. 반면에 특이도(SPEC)의 경우에는 부스팅 모형이 다른 알고리즘에 비해 약 25%정도 더 높은 예측력을 보이는 것을 알 수 있습니다. 또한 의사결정나무 모형의 경우 50%를 상회하는 수준의 정확도를 보여 유의미한 추론을 한다고 하기엔 적합하지 않은 것으로 보입니다.
위 그래프와 표를 통해 알 수 있는 것은 부스팅 알고리즘을 제외한 나머지 모형들의 경우 다수 집단에 대한 학습량이 현저하게 많아 소수집단에 대한 예측력이 비교적 떨어지는 것을 알 수 있습니다. 일반적으로 소수집단에 대한 예측이 다수집단에 대한 예측보다 중요한 경우가 많을 뿐만 아니라 민감도와 특이도의 trade-off를 고려해보았을 때 비록 정확도는 떨어졌지만 부스팅 모형이 더 유의미한 예측을 한다는 것을 알 수 있습니다(주어진 문제 및 관점에 따라 다를 수 있음)
위 실험을 통해 알 수 있는 재미있는 사실은 Boosting알고리즘의 경우 Rare-event를 예측 해야하는 경우에도 굳이 sampling기법을 적용하지 않아도 sampling기법을 이용한 것과 유사한 결과를 나타낸다는 것입니다.
Group processing 노드를 이용한 부스팅 방법
Group processing을 이용하여 Boosting을 구현할 경우 위와 같이 weak learner를 start group노드와 end group노드 사이에 배치하고 start group 노드의 [분석]->[일반]->[인덱스 개수]를 이용해 boosting round의 수를 지정할 수 있습니다. 저 같은 경우 boosting round를 20으로 지정했고, Dtree의 최대 깊이는 SAS code노드를 이용한 방법과 동일하게 50으로 지정했습니다. Data partition노드의 경우 Train/Validate 을 70/30으로 지정했고, 나머지 노드들의 경우 모두 기본값으로 옵션변동 없이 진행했습니다.
GOODNESS-OF-FIT
위 표와 그래프를 보면 SAS코드 노드를 이용한 결과와 유사한 패턴으로 분류가 발생한 것을 알 수 있습니다. Boosting알고리즘의 경우 입력데이터의 불균형 비를 반영하여 특이도 소폭 상승하고 민감도가 소폭하락한 것을 알 수 있었습니다. 위 모형들의 각각의 AU-ROC의 경우 0.9로 모두 유사한 수치를 나타냈습니다. 이 경우 사전 SAS코드 노드에 비해 정분류율이 낮은데 그 이유는 그룹처리노드에서 이용하는 부스팅 알고리즘과 SAS코드 노드를 이용한 알고리즘 상의 부스팅 라운드의 수 및 오분류 데이터에 대한 페널티의 차이로 인한 것으로 추정됩니다.
CONCLUSION
이번 시간에는 지난시간에 이어서 매우 많이 쓰이는 앙상블 방법 중 하나인 부스팅의 구현방법에 대해 알아보았습니다. SAS code노드를 이용할 경우 세부적인 옵션을 조정할 수 있고 원하는 방법으로 알고리즘을 수정할 수 있다는 장점이 있는 반면에 부스팅 라운드를 늘리거나 분류기의 종류를 바꿔 줘야하는 경우 손이 정말 많이 가는 단점이 존재합니다. 따라서 특별하게 옵션조정이 필요 없거나 변형 된 알고리즘으로 구현을 원하지 않는 경우에는 그룹처리 노드를 이용하거나 이후에 배울 gradient boosting노드를 이용하는 것이 좋습니다. 다음 시간에는 Random Forest에 대해 알아보도록 하겠습니다.
REFERENCES
[1] R, SAS, MS-SQL을 활용한 데이터 마이닝 / 자유아카데미 / 이정진 지음
[2] https://support.sas.com/resources/papers/proceedings10/123-2010.pdf
[3] https://support.sas.com/resources/papers/proceedings14/SAS133-2014.pdf
[4] http://support.sas.com/resources/papers/proceedings09/058-2009.pdf
[5] https://en.wikipedia.org/wiki/Boosting_(machine_learning)
Save $250 on SAS Innovate and get a free advance copy of the new SAS For Dummies book! Use the code "SASforDummies" to register. Don't miss out, May 6-9, in Orlando, Florida.