R 의사결정나무 깔끔하게 Plotting 하기 – (fancyRpartPlot in R)

지난 포스팅을 통해 R의 의사결정나무 분석 패키지 중 가장 자주 쓰이는 rpart, ctree, party 패키지로 의사결정나무를 만들고, 가지치기를 하고, 예측모델을 만들어 시각화 하는 방법을 정리해 보았습니다.

R의  의사결정나무 분석 패키지의 단점이 하나 있다면 시각화된 Plot의 낮은 가독성에 있습니다. ggplot2(대표적인 시각화 패키지), ggvis(interactive 그래프), rgl(3D 그래프) 등 많은 패키지에서 “fancy”한 그래프를 지원하는 반면 rpart, ctree, party에서 지원하는 그래프 기능은 사실 조금 실망스럽습니다.

그래서 이번 포스팅에서는 의사결정나무를 보다 깔끔하게 시각화 할 수 있게 도와주는 rattle 패키지의 fancyrpartplot 함수에 대해 간단히 소개드리려고 합니다.

또오해영
그냥 rpart 그래프 vs 예쁜 rpart 그래프

데이터셋은 지난 의사결정나무 포스팅에서 사용한 Heart 데이터를 그대로 사용해 보도록 하겠습니다. Heart 데이터는 흉부외과 환자의 심장병 여부를 관측한 데이터입니다. 데이터셋에 대한 설명은 지난 포스팅을 확인해 주세요.

데이터 셋을 로드하고, 트레이닝 셋으로 만들어서 의사결정나무를 만드는 것까지는 같습니다.

caret 패키지를 사용해서 데이터를 트레이닝 셋으로 구분해 보겠습니다.

rpart를 사용해서 의사결정나무를 만들고 plotting 해 보겠습니다.

앙상한 의사결정나무
앙상한 의사결정나무

물론 이 의사결정나무에는 아무런 이상도 없습니다만, fancyrpartplot를 사용하면 node에 대해 보다 많은 정보를, 보다 심미적으로 표현할 수 있습니다.

필요한 패키지를 로드한 후, rpart패키지로 작성한 모델을 plotting해 주면 됩니다. 안타깝게도 party, tree패키지로 작성한 모델은  fancyrpartplot으로 plotting할 수가 없습니다.

fancy(?)한 의사결정나무
fancy(?)한 의사결정나무

의사결정나무를 해석해 볼까요?

fancyrpartplot으로 작성된 node에는 아래 3가지 정보가 담겨 있습니다.

A.  node의 성질
B.  node의 순도
C. node가 전체에서 차지하는 비중

A. node의 성질

가장 위의 node 볼까요? 박스 가장 위의 “No”라는 구분자는 해당 node는 “no”(음성)라고 구분될 수 있다는 것을 의미합니다.  같은 원리로 가장 아랫줄의 제일 오른쪽  node(7번)를 보면 “yes”라고 적혀있죠? 이 node에 속하는 관측치(여기서는 환자들)은 양성그룹으로 분류되는 것이죠.

B.  node의 순도

node의 순도는 node의 색상(진하기) 및 두번째 열의 숫자로 확인할 수 있습니다. 7번 node를 다시 보면 0.1, 0.9라고 표시되어 있죠? 이 의미는 이 node에 속하는 관측치 중 10%는 no 90%는 yes에 속한다는 의미입니다.  또한 7번 노드는 바로 왼쪽의 13번 node보다 조금 더 진하죠? node색상의 진하기로도 대략 이 노드가 얼마나 순수한지를 확인할 수 있습니다.

C. node가 전체에서 차지하는 비중

7번node로 돌아가서, 가장 아랫쪽의 숫자 29%가 의미하는 것은 해당 node가 전체 데이터 셋에서 차지하는 비중입니다. 여기서는 전체의 29%의 관측치(환자)가 이 node에 속한다고 볼 수 있겠네요.

 

종합적으로 해석해 보면 7번 node로 분류된 환자는 전체의 29%로, Thal 테스트가 Nornal이 아니면서, Oldpeak 관측치가 0.7보다 작지 않은 환자들로 구성된 이 그룹은 90%의 확률로 심장병 양성에 속한다는 해석을 할 수 있습니다.  다른 node들도 같은 방법으로 해석 가능하겠죠?

 

이번 포스팅에서는 plotting만을 다루기 때문에 별도의 pruning과 검증 과정을 거치지 않았습니다. 의사결정나무 방법론이 궁금하신 분은 링크를 따라가 주세요.

 

참고자료

1) www.milbo.org,  Plotting rpart trees with the rpart.plot package

2) Tagteam.harvard.edu, Draw nicer Classification and Regression Trees with the rpart.plot package

3) R Journal, Rattle: A Data Mining GUI for R