KaggleのTitanicチュートリアルをやってみた


# やったこと
kaggleの最初の一歩の課題にある、難破したタイタニック号の生存者を予測するモデルを作成して、コンペティションに参加するところまでを、Kaggleのチュートリアルのとおりやってみました。


#コンペティション概要
タイタニック号の沈没は、歴史上最も悲惨な沈没事故のひとつで、1912年4月15日、処女航海中、「不沈船」と広く考えられていたRMSタイタニック号は氷山に衝突し沈没し、救命ボートが乗客全員分なく、乗客・乗員2224人のうち1502人が死亡した事件です。

生存には運の要素もあり、ある集団は他の集団よりも生き残る可能性が高かったようです。

乗客のデータ（名前、年齢、性別、社会経済階級など）を使用して、「どのような種類の人々が生き残る可能性が高いか」という質問に答える予測モデルを構築して、生存者予想精度が高いものがランク上位になります。

#コンペティションへの参加
とりあえず
https://www.kaggle.com/
でログインIDは取得はできている前提で進めます。


##コンペティションへの参加
まずはコンペティションに参加します。
新しいウィンドウでTitanicコンペティションページを開き、「Join Competition」（コンペティションに参加する）ボタンをクリックします。
（「Submit Predictions」「予想を投稿する」ボタンが表示されている場合は、すでに大会に参加していますので、再度参加する必要はありません)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684662/193153fb-bd2b-64f8-23a0-787c6aa57e7b.png)

##コンペティションデータ
コンペデータを見るには、コンペページの上部にある「Data」タブをクリックします。その後、下にスクロールすると、ファイルのリストがあります。
データには3つのファイルがあります。
(1) train.csv
(2) test.csv
(3) gender_submission.csvです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684662/c360a5aa-d65f-b120-9f96-d37f7e57afdd.png)

**(1) train.csvファイル**
train.csvには、乗客の一部（正確には891人）の詳細が含まれています。
画面の左側にあるファイル名をクリックするとすべてのデータが表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684662/335a4036-cd9e-cba1-66cc-62dceffffff0.png)

2列目の（"Survived"）「生存」列から、各乗客が生存しているかどうかを判断することができます。

"1 "：生存
"0 "：死亡

例えば、train.csvの最初の行の乗客Braund,Owen Harris氏は、「0」なので死亡したことになります。

**(2) test.csvファイル**
train.csvで見つけたパターンを使って、test.csvにある他の乗客418人が助かったかどうかを予測します。

画面左のtest.csvをクリックすると、その中身を見ることができます。
test.csvには（"Survived"）「生存」列の列はありません。この情報は隠されており、この隠された値をいかにうまく予測するかがモデル作成の腕の見せ所となります。

**(3) gender_submission.csvファイル**
このファイルは、仮に、女性乗客は全員生存し、男性乗客は全員死亡したとした場合の成果物提出のサンプルファイルです。

実際は作成したモデルから以下のように各乗客ID毎の生存、非生存のデータを作成して最終成果物として提出します。

test.csv の各乗客の IDである 「PassengerId」(パッセンジャーID) 行と
Survived"(生存者）行に カラムに乗客が生存していると予測した行に "1" を、乗客が死亡したと予測した行 "0" を入れ、「submisson.csv」ファイルとして最終的にコンペティションへ提出します。

##モデル構築
###ノートブックの準備
まず最初に、Kaggle Notebookを作成します。
Kaggleノートブックを使えば、コンピュータに何もインストールすることなく、コードを書き始めることができます。

コンペティションページで「Code」(コード)タブから、「New Notebook」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684662/c1ee275a-b252-f24f-5932-3bdb55427adb.png)

画面左上のタイトル「notebookcc8261ca00）」は、「Titanic model」等好きな名前に変更できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684662/b727cc67-412f-3779-7aca-26fab897f8d0.png)

最初のコードは自動で入力されていおり、numpay関数およびpandas関数のインポートとファイルを読み込めるようにディレクトリ設定をしてくれます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684662/452a0a43-3d6c-4c87-373a-fc1aeeb2a6fc.png)

矢印ボタンをクリックするか、[Shift]+[Return]で実行します。しばらく待つとファイルパスが表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684662/559928a7-daa6-88c7-a55f-a5ab462f77d8.png)

###データロード

以下の2行のコードを2番目のコードセルに入力して、訓練データをロードします。

`train_data = pd.read_csv("/kaggle/input/titanic/train.csv")`
`train_data.head()`

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684662/277d3c3d-6871-11e8-b2c9-5f8dc353275e.png)

以下の2行のコードを2番目のコードセルに入力して、テストデータをロードします。

`test_data = pd.read_csv("/kaggle/input/titanic/test.csv")`
`test_data.head()`

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684662/bbbce5c1-1584-768f-c2cf-4e882d8e2649.png)

###男女別の生存率
最初に男女別の生存率を計算してみます。

`men = train_data.loc[train_data.Sex == 'male']["Survived"]`
`women = train_data.loc[train_data.Sex == 'female']["Survived"]`
`rate_men = sum(men)/len(men)`
`rate_women = sum(women)/len(women)`

`print("% of men who survived:", rate_men)`
`print("% of women who survived:", rate_women)`
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684662/e921560f-4934-e46e-b315-f617704801d1.png)


結果、
　男性19%
　女性74%
の生存率となっており、基本女性の生存率のほうが高そうであり、性別は生存率に強い関係を持っていそうです。

これは性別のみであり、複数の行の関係を考慮するために機械学習をしてみます。

###機械学習モデル

ここでは、ランダムフォレストモデル(決定木）を利用してみます。

`from sklearn.ensemble import RandomForestClassifier`

`y = train_data["Survived"]`

`features = ["Pclass", "Sex", "SibSp", "Parch"]`
`X = pd.get_dummies(train_data[features])`
`X_test = pd.get_dummies(test_data[features])`

`model = RandomForestClassifier(n_estimators=100, max_depth=5, random_state=1)`
`model.fit(X, y)`
`predictions = model.predict(X_test)`

`output = pd.DataFrame({'PassengerId': test_data.PassengerId, 'Survived': predictions})`
`output.to_csv('submission.csv', index=False)`
`print("Your submission was successfully saved!")`

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684662/5861cbdf-9998-30f4-0445-8dcb4000dfef.png)

メッセージ (Your submission was successfully saved!) が出力されることを確認できたら、ノートブックの右上にあるSave Version(バージョンを保存する)ボタンをクリックして保存します。

##結果の提出

Save Versionの右に表示されている番号をクリックして、Version履歴を表示させて、最新のバージョンの右側にある省略記号（...）をクリックし、「Open in Viewer」(ビューアで開く)を選択します。
画面右上の省略記号（...）から、「Submit to competition」をクリックして、Submitファイルが問題なければ、「Submit」ボタンをクリックして、結果を送信します。

結果、スコアとして77.511%との回答がKaggleから返ってきました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684662/c91709aa-48ee-4604-727f-144b0c5627ea.png)

Leaderboardに順位が表示されました!!
大体8000位弱くらいでしょうか。
これからモデルの改善をして順位を上げていく感じになります。