더북(TheBook)

생존 확률 예측

이제 탑승자들을 가족 단위로 묶을 수 있음이 확실해졌으므로 각 가족 구성원의 생존 확률을 구해보자. 이 생존 확률은 후에 가족 단위로 묶일 것이다.

rpart, ctree에서와 마찬가지로 교차 검증을 위해 다음 형태의 foreach 반복문을 만든다.

family_result <- foreach(f=folds) %do% {
  ...
}

이후 내용은 이 foreach 블록에 들어가는 코드를 설명할 것이며, 한 개 폴드를 뜻하는 f를 변수로 사용할 것이다.

가족 정보를 훈련 데이터와 테스트 데이터를 모두 사용해 구하기로 했으므로 데이터를 합치자. 그런 다음 조건부 추론 나무에서 보인 모델을 적용해 생존 여부를 예측하는 확률 prob 컬럼을 추가한다.

f$train$type <- "T"
f$validation$type <- "V"
all <- rbind(f$train, f$validation)
ctree_model <- ctree(
  survived ~ pclass + sex + age + sibsp + parch + fare + embarked,
  data=f$train)
all$prob <- sapply(
  predict(ctree_model, type="prob", newdata=all),
  function(result) { result[1] })

이 코드는 한 폴드 내 훈련 데이터(train)와 검증 데이터(validation)를 합쳐 하나의 데이터 프레임 all을 만든다. 이때 type 컬럼을 추가해 훈련 데이터와 검증 데이터를 나중에 분리할 수 있게 해둔다. ctree( )는 훈련 데이터만 사용해 만들되, predict( )는 훈련 데이터와 검증 데이터 모두에 수행한다(당연한 얘기지만 validation은 ctree( )를 사용한 모델링에서는 사용하지 않는다. validation$survived를 훈련 과정에서 사용해버리면 validation을 사용한 성능 평가가 무의미해져버리기 때문이다). 최종 결과로 생존 확률만 뽑기 위해 sapply( )를 사용해 predict( ) 결과의 첫 번째 컬럼만 선택해 사망 확률이 저장된 두 번째 컬럼을 제외한다. 코드 수행 결과 all에는 type 컬럼과 prob 컬럼이 추가된다.

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