05 | 의사 결정 나무 모델
이 절에서는 기계 학습 모델을 데이터에 적용해 모델을 만들어본다. 사용이 편리하고 변수 간 상호 작용을 잘 다뤄주는 모델인 의사 결정 나무 모델 rpart와 조건부 추론 나무 ctree를 모델로 사용할 것이다.
의사 결정 나무는 나무 모델 중 하나로, 다양한 변수의 상호 작용을 잘 표현해준다. 또, 타이타닉 데이터에는 NA 값이 많은데 rpart는 이를 대리 변수surrogate variable로 처리해준다. 대리 변수란 노드에서 가지치기를 할 때 사용된 변수를 대신할 수 있는 다른 변수를 뜻한다. 예를 들어, age < 10과 age >= 10의 기준으로 가지치기되는 노드를 가정해보자. 만약 age 값이 NA인 데이터가 주어지면, age 값이 없기 때문에 해당 노드에서 어느 쪽 가지를 택해야 할지 정할 수 없다. 이때 rpart는 age와 10 간의 비교를 대신할 수 있는 또 다른 가지치기 변수를 찾아 사용한다. 예를 들어, 키height를 생각해보자. height < 140이면 age < 10이고 height >= 140이면 age >= 10일 경우가 많다면, rpart는 age가 NA인 데이터에 대해서는 age 대신 height을 사용할 수 있을 것이다.[2] 즉, 값에 NA가 있는 경우 다른 변수들을 사용해 해당 값을 예측한다.
titanic.train에서 모델에 사용하기에 적합해 보이지 않는 name, ticket, cabin을 제외한 나머지 변수들로 rpart 모델을 만들어보자.2
> library(rpart) > m <- rpart( + survived ~ pclass + sex + age + sibsp + parch + fare + embarked, + data=titanic.train) > p <- predict(m, newdata=titanic.train, type="class") > head(p) 1 3 4 5 6 7 survived survived dead survived dead survived Levels: dead survived
2 이들 변수가 포함되면, 예를 들어 ‘이름’에 따라 생존 여부를 알려주는 의미 없는 모델이 만들어지게 된다. 그보다는 객실이나 연령, 성별에 따른 생존 여부를 알려주는 모델이 필요하다.