R을 사용한 의사결정나무 분석 (Decision tree analysis in R)

다음 달에 연체를 할 카드 가입 회원은 누구일까? 약정이 끝나고 이탈할 휴대전화 가입 고객은 누구일까? 타이타닉 호에서 살아남을 사람은 누구일까?  등등 분류 및 예측은 데이터 분석의 중요한 카테고리 중 하나이면서, 실제 비즈니스에서도 많이 필요로 하는 분야입니다.

하지만 예측 방법이 정교하고 복잡해질 수록 이해관계자에 대한 커뮤니케이션 코스트도 같이 올라가기 마련이죠. 그래서 이번 포스팅에서는 분류 및 예측을 위한 다양한 데이터 지도학습 기법 중 가장 직관적으로 이해할 수 있는 의사결정나무에 대해 소개해 보려고 합니다.

의사결정나무 (Decision Tree)란?

의사결정 나무란 기계학습 중 하나로 특정 항목에 대한 의사 결정 규칙 (Decision rule)을 나무 형태로 분류해 나가는 분석 기법을 말합니다. 예를 들어, 타이타닉 호 탑승자의 성별, 나이, 자녀의 수를 이용해서 생존 확률을 아래와 같이 구분해 나가는 것이죠.

출처: 위키피디아
출처: 위키피디아

의사결정나무의 가장 큰 장점은 분석 과정이 직관적이고 이해하기 쉽다는 점입니다.  인공신경망 분석의 경우 결과에 대한 설명을 이해하기 어려운 대표적인 블랙박스 모델인 반면, 의사결정나무 기법은 분석 과정을 실제로 눈으로 관측할 수 있기 때문에 대표적인 화이트박스 모델이죠.

그리고 수치형/범주형 변수를 모두 사용할 수 있다는 점, 계산 비용이 낮아 대규모의 데이터 셋에서도 비교적 빠르게 연산이 가능하다는 점이 의사결정나무의 장점이라고 볼 수 있습니다.

의사결정나무 분석 방법에는 통계학에 기반한 (카이스퀘어, T검정, F검정 등을 사용한) CART 및 CHAID 알고리즘이나, 기계학습 계열인(엔트로피, 정보 이득 등을 사용한) ID3, C4.5, C5.0 등의 알고리즘이 존재합니다.

 

R의 의사결정나무 분석 패키지 비교 (Packages for Decision Tree in R)

R에는 의사결정나무 분석을 할 수 있는 패키지가 여러개 존재합니다. 그 중 대표적인 3개의 패키지를 꼽자면tree, rpart, party 가 있습니다.

각각의 패키지는 의사결정나무를 만들 때 가지치기를 하는 방법에 차이가 있습니다.

tree 패키지는 binary recursive partitioning을,  rpart 패키지는 CART(classification and regression trees) 방법론을 사용합니다. 이 패키지들은 엔트로피, 지니계수를 기준으로 가지치기를 할 변수를 결정하기 때문에 상대적으로 연산 속도는 빠르지만 과적합화의 위험성이 존재합니다. 그래서 두 패키지를 사용할 경우에는 Pruning 과정을 거쳐서 의사결정나무를 최적화 하는 과정이 필요합니다.

party 패키지는 Unbiased recursive partitioning based on permutation tests 방법론을 사용합니다. p-test를 거친 Significance를 기준으로 가지치기를 할 변수를 결정하기 때문에 biased 될 위험이 없어 별도로 Pruning할 필요가 없다는 장점이 있습니다. 대신 입력 변수의 레벨이 31개 까지로 제한되어 있다는 단점이 있죠.

의사결정나무 분석 방법

의사결정나무 분석은 일반적으로 데이터 준비 – 의사결정나무만들기 – 가지치기 – 예측 및 모델 평가의 단계로 진행합니다.  이번 포스팅에서는 tree,  rpart, party 패키지를 사용해서 의사결정나무를 만들고 각각의 결과를 비교해 보겠습니다.

tree 패키지를 사용한 의사결정나무 분석

A. 데이터 준비

이번 분석에서는 R을 사용한 통계적 분석 방법을 소개하는 책인 An Introduction to Statistical Learning에서 제공하는 Heart 데이터로 분석을 해 보겠습니다. Heart 데이터는 흉부외과 환자 303명을 관찰한 데이터로, AHD 칼럼에 각 환자들이 심장병이 있는지 여부가 기록되어 있습니다.

데이터가 준비되었으면 caret 패키지를 사용해서 데이터를 train 셋과 test 셋으로 구분해 보겠습니다.

이렇게 별개의 데이터셋으로 구분하는 이유는 의사결정나무의 성능을 평가하기 위해서 입니다. train셋으로 의사결정나무 모델을 만들고 test셋을 모델에 입력하여 얼마나 결과를 잘 예측하는지를 보는 것이죠.

70%의 데이터는 train을 위해, 30%의 데이터는 test를 위해 준비가 되었습니다.

B. 의사 결정 나무의 형성
train데이터셋을 사용해서 의사결정 나무를 만들어 보겠습니다.

Rplot19

 

C. 가지치기(Pruning)

앞에서 과적합화의 문제를 해결하기 위해 Pruning단계가 필요하다고 말씀드렸죠?

k-fold Cross-validation 방법을 사용해서 train셋을 여러번 쪼개서 테스트 한 다음 분산이 가장 낮은 가지의 수를 선택하면 됩니다. tree패키지에서 제공하는 cv.tree 함수를 사용하면 간단하게 확인할 수 있습니다.

Rplot18

CV그래프를 보니 6개의 가지가 있는 의사결정나무가 가장 분산이 낮은 것으로 보이네요. 의사결정나무를 Pruning 해 볼까요?

Rplot21

D. 예측하기 & 모델 평가
predict 함수를 사용해서 test 셋의 AHD를 예측한 후, confusionMatrix함수를 사용해서 모델의 정확성을 평가해 보았습니다. tree패키지의 Accuracy를 보니 84.44%로 비교적 정확하게 심장 질환 보유 여부를 구분하고 있네요.

ConfusionMatrix는 머신러닝 중 지도학습(supervised learning) 알고리즘의 classification 정확도를 평가하는 데 사용되는 기법입니다. (보다 자세히 알고 싶으신 분은 링크로)

rpart 패키지를 사용한 의사결정나무 분석

이번에는 rpart패키지를 이용한 의사결정나무 분석을 알아보고, 모델 정확성을 평가해 보도록 하겠습니다.

Rplot22

tree패키지를 사용한 결과와는 조금 다른 모습이죠? 어떤 예측 모델이 더 정확한지 평가하기 전에 rpart패키지도 과적합화 문제가 있기 때문에 가지치기(Pruning)을 해 보도록 하겠습니다. rpart패키지에서는 cv.tree와 유사하게 cross-validation을 계산해 주는 함수로 print.cp를 제공하고 있습니다.

 

Rplot23

xerror가 가장 낮은 split 개수를 선택하면 되는데요 위 그래프에서 보면 6개의 split에서 가장 낮은 error를 보입니다. R 코드는 아래와 같습니다.

Rplot24

rpart 모델로 test셋의 AHD를 예측하고 정확성을 평가해 보겠습니다.

rpart을 사용한 의사결정나무의 예측 정확성은 81%로, tree 패키지보다 조금 정확성이 낮네요.

party 패키지를 사용한 의사결정나무 분석

party를 사용한 의사결정나무 모델의 예측 정확도도 한번 볼까요?

Rplot25

party패키지는 가지치기를 significance를 사용해서 하기 때문에 별도의 pruning 과정이 필요 없습니다. 바로 test 데이터셋을 사용해서 결과를 확인해 보도록 하죠.

Accuracy는 76.67%로 상대적으로 예측 정확도는 떨어지는 모습이네요.

이번 분석에 사용한 데이터 셋에서는 tree 패키지의 예측 정확성이 가장 높았지만, 데이터 셋이나 변수의 특징에 따라 party패키지나 rpart패키지의 정확성이 더 높은 경우도 있습니다.

 

정리하며

의사결정나무 분석은 회귀분석이나 랜덤포레스트 등의 알고리즘에 비해 직관적인 이해, 설명이 용이하다는 장점을 가진 지도학습 분석 방법입니다. 또한 tree, rpart, party 등 패키지 종류가 다양하기 때문에 상황에 맞게 결과를 비교해서 가장 좋은 예측력을 보이는 패키지를 선택할 수 있습니다.

하지만 상대적으로 모델이 불안정한 점이 단점으로 꼽히는데요, Bootstrapping, bagging 등의 방법으로 모델의 정확성을 높일 수 있습니다. 이런 방법론에 대해서는 별도의 포스팅으로 소개 드리도록 하겠습니다.

 

참고 자료

1) 위키피디아, 결정트리학습법

2) R-Project, R and Data Mining

3) R-Bloggers, A Brief Tour of the Trees and Forests, Classification Tree Models

4) Achim Zeileis, Tree Algorithms in Data Mining: Comparison of rpart and RWeka and Beyond

5) Rpub, Tree-Based Methods

6) Quick-R, Tree-Based Models

7) R Statistics.Net, Decision Trees with R

8) 동국대학교, 의사결정나무