더북(TheBook)

가족 정보를 사용한 ctree() 모델링

이제 all 데이터를 사용해 모델을 만들고 성능을 평가해보자. 지금까지 추가한 컬럼 중 type, avg_prob, maybe_parent, maybe_child, avg_parent_prob, avg_child_prob를 사용할 것이다.

첫 번째 폴드에 지금까지 설명한 내용을 적용한 all 데이터 프레임의 모습은 다음과 같다.

> str(all)
'data.frame': 1178 obs. of 19 variables:
 $ pclass         : Factor w/ 3 levels "1","2","3": 1 1 1 1 1 1 1 1 1 1 ...
 $ survived       : Factor w/ 2 levels "dead","survived": 2 2 2 2 1 2 1 1 1 1 ...
 $ name           : chr "Cherry, Miss. Gladys" "Maioni, Miss. Roberta" "Rothes, the Countess. of (Lucy Noel Martha Dyer-Edwards)" "Taussig, Miss. Ruth" ...
 $ sex            : Factor w/ 2 levels "female","male": 1 1 1 1 2 1 2 2 2 2 ...
 $ age            : num 30 16 33 18 52 39 NA 47 30 42 ...
 $ sibsp          : int 0 0 0 0 1 1 0 0 0 0 ...
 $ parch          : int 0 0 0 2 1 1 0 0 0 0 ...
 $ ticket         : chr "110152" "110152" "110152" "110413" ...
 $ fare           : num 86.5 86.5 86.5 79.7 79.7 ...
 $ cabin          : chr "B77" "B79" "B77" "E68" ...
 $ embarked       : Factor w/ 3 levels "C","Q","S": 3 3 3 3 3 3 3 3 3 3 ...
 $ type           : chr "T" "T" "T" "T" ...
 $ prob           : num 0.0591 0.0591 0.0591 0.0591 0.6364 ...
 $ family_id      : Factor w/ 861 levels "TICKET_1","TICKET_2",..: 1 1 1 2 2 2 3 3 4 5 ...
 $ avg_prob       : num 0.0591 0.0591 0.0591 0.2515 0.2515 ...
 $ maybe_parent   : logi FALSE FALSE FALSE FALSE TRUE FALSE ...
 $ maybe_child    : logi FALSE FALSE FALSE TRUE FALSE FALSE ...
 $ avg_parent_prob: num 0.0591 0.0591 0.0591 0.6364 0.6364 ...
 $ avg_child_prob : num 0.0591 0.0591 0.0591 0.0591 0.0591 ...

all에 있는 정보 중 훈련 데이터를 사용해 ctree( )를 수행하고 이를 검증 데이터에 적용해보자.

f$train <- subset(all, type == "T")
f$validation <- subset(all, type == "V")

(m <- ctree(survived ~ pclass + sex + age + sibsp + parch + fare + embarked + maybe_parent + maybe_child + age + sex + avg_prob + avg_parent_prob + avg_child_prob,
            data=f$train))

print(m)
predicted <- predict(m, newdata=f$validation)

그 결과 첫 번째 폴드로부터 만들어진 ctree( )는 다음과 같다.

> print(m)

    Conditional inference tree with 7 terminal nodes

Response: survived
Inputs: pclass, sex, age, sibsp, parch, fare, embarked, maybe_parent, maybe_child, avg_prob, avg_parent_prob, avg_child_prob
Number of observations: 1060

1) avg_prob <= 0.5751314; criterion = 1, statistic = 385.146
  2) sex == {male}; criterion = 1, statistic = 65.12
    3) age <= 11; criterion = 1, statistic = 20.899
      4)* weights = 21
    3) age > 11
      5)* weights = 80
  2) sex == {female}
    6) pclass == {3}; criterion = 1, statistic = 63.64
      7) avg_parent_prob <= 0.4238411; criterion = 0.965, statistic = 8.81
        8)* weights = 116
      7) avg_parent_prob > 0.4238411
        9)* weights = 9
    6) pclass == {1, 2}
      10)* weights = 203
1) avg_prob > 0.5751314
  11) avg_child_prob <= 0.6507765; criterion = 1, statistic = 47.28
    12)* weights = 126
  11) avg_child_prob > 0.6507765
    13)* weights = 505

확인 결과 avg_prob, avg_child_prob 등이 유용하게 사용되고 있다.

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