더북(TheBook)

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 이들 변수가 포함되면, 예를 들어 ‘이름’에 따라 생존 여부를 알려주는 의미 없는 모델이 만들어지게 된다. 그보다는 객실이나 연령, 성별에 따른 생존 여부를 알려주는 모델이 필요하다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.