ExploratryでKaggleに挑戦してみる

下記サイトでRのチュートリアルがあったので、Exploratryでもできるか試してみた。

https://www.kaggle.com/jasonm/large-families-not-good-for-survival

データの読み込み

下記ページからデータをダウンロードし、Exploratryでインポートする。
https://www.kaggle.com/c/titanic/data

年齢、性別、階級が生存に影響するのか?

まずはデータの特徴を把握するために可視化した。
下記の設定で散布図を作成した。
X軸:年齢
Y軸:階級
繰り返し:性別
色:生存(1が生存、0が死亡)

階級の低い男性の生存率が高い。
対して階級の高い男女の生存確率が低くなっている。
筋力とかが関係してるのかな。

Loading…

家族データを作成する

このチュートリアルは家族の多さが生存確率に関係するのでは?という仮設のもと構成されているのでデータとして把握することから始める。
SibSp(兄弟、配偶者の数) + Parch(両親、子供の数) + 1(自分)でその人の家族の合計数データを作成する。

mutate(famillySize = SibSp + Parch +1)
Loading…

家族データの調整

この処理が何を意味しているのかわからず、、、

sharedInd <- data$FamilySizeAdj == 1 & data$Cabin %in% sharedCabins
data$FamilySizeAdj[sharedInd] <- 2
rowCount <- sum(sharedInd)
print(c("adjusted rows", rowCount)) # 27 rows

カテゴリカルデータをダミー変数にする

Sex(性別)はそのままだと何かと不便なので1/0のデータに変換する。
また、変換する前に欠損値は無いことは確認済みなので、バリエーションは1と0だけで良さそう。

mutate(Sex = recode(Sex, female = "0", male = "1", .missing = "-1"), Sex = extract_numeric(Sex))

こんな感じで変換できた。

[未]精度の計算

何がどうなっているのかわからない、、

modelaccuracy <- function(test, rpred) {
  result_1 <- test$Survived == rpred
  sum(result_1) / length(rpred)
}

checkaccuracy <- function(accuracy) {
    if (accuracy > bestaccuracy) {
     bestaccuracy <- accuracy
     assign("bestaccuracy", accuracy, envir = .GlobalEnv)
     label <- 'better'
    } else if (accuracy < bestaccuracy) {
     label <- 'worse'
    } else {
     label <- 'no change'
    }
    label
}

library(rpart)
# starting with Age and Sex as indicators
fol <- formula(Survived ~ Age + Sex)                        # 0.845
rmodel <- rpart(fol, method="class", data=train)
rpred <- predict(rmodel, newdata=test, type="class")
accuracy <- modelaccuracy(test, rpred)
bestaccuracy <- accuracy # init base accuracy
print(c("accuracy1", accuracy))                             # baseline

[未]階級データを追加して再計算する

精度が低くなったってことなのか?? よくわかんない。。

fol <- formula(Survived ~ Age + Sex + Pclass)               # 0.838
rmodel <- rpart(fol, method="class", data=train)
rpred <- predict(rmodel, newdata=test, type="class")
accuracy <- modelaccuracy(test, rpred)
accuracyLabel <- checkaccuracy(accuracy)
# almost as good but little worse
print(c("accuracy2", accuracy, accuracyLabel))              # worse

[未]階級の代わりにチケットの料金を追加して再計算する