LoginSignup
3
3

More than 3 years have passed since last update.

66日目 【Kaggle入門】一番カンタンなTitanic予想

Last updated at Posted at 2020-01-19

Kaggleの「Titanic: Machine Learning from Disaster」にチャレンジしてみました。

Kaggleは機械学習の練度を競う武闘会・・・のようです。
エントリーすると初心者向けのコンテンツがありましたので、さっそくガイダンスの動画を見ます。

How to Get Started with Kaggle’s Titanic Competition | Kaggle

超早口な英語!!!
中身はタイタニックの事故の概要と、データセットの解説、チュートリアル、Kaggleの使い方などなどでした。

早口すぎて聞き取れないので、日本語Wikiのタイタニック号沈没事故に目を通しておきます。

ざっくりまとめると、

・深夜眠っている間の事故だったので、初動が遅れに遅れた。
・救命道具が十分になかった。(安全だと思われていた)
・貴族と平民、男性と女性、年齢で生存率が大きく違う。

図を見た印象ですが、氷山にぶつかって穴があいたエリアの死亡率が高いのではと思います。

船の全景がわかるトレーラー。映画ですが船の大きさ、人数、当時の雰囲気がつかめると思います。(この人たちがこれから・・・)

タイタニック (吹替版) - Trailer
タイタニック (吹替版) - Trailer

予測に使うデータ

訓練用が891、テストデータが418ありました。
データの定義は次のとおりです。

変数 定義 備考
Survived 生存したかどうか 0 = No, 1 = Yes
Pclass チケットのクラス 1 = 1st, 2 = 2nd, 3 = 3rd
Name 名前
Sex 性別
Age 年齢
SibSp 乗船していた兄弟姉妹・配偶者の数
Parch 乗船していた親・子供の数
Ticket チケット番号
Fare チケット料金
Cabin キャビン番号
embarked 乗船した港 C = Cherbourg, Q = Queenstown, S = Southampton

さてプログラミング!

プログラムの例は「Notebook」にどっさり投稿されてるので人気のものをいくつかチェック。

日本語のチュートリアルもありました。
Kaggleタイタニック はじめの一歩 (1st Step for Kaggle Titanic)

ざっくり読んで頭がごちゃごちゃになったので、まずは話をカンタンにするため全員生存モデルを作りました。"Survived"がぜんぶ1の列を作ってKaggleにアップするだけです。

Titanic全員生存モデル["Survived"] = 1

00.py
import pandas as pd

# CSVを読み込む
test = pd.read_csv('test.csv')

# Survived列を追加。
test["Survived"] = 1

#確認
print(test["Survived"])

#提出用にPassengerIdとSurvivedだけにする。
test = test.loc[:,['PassengerId','Survived']]

#CSVに出力(インデックスは不要)
test.to_csv('titanic1-1.csv',index=False)

できたCSVを確認し、Kaggleにコミットします。

Public Score 0.37320
lederbord 15800位

Public Scoreが実際の生存率(31.9%)に近い値となりました。
lederbordはその人の最高だったスコアで順位がつくらしく、正確な順位はわからなかったのですが0.37320は15800位のあたりでした。同じスコアの集団、つまり世界には同じ事を考えている人がこんなにいる・・・これはちょっと・・・感動してしまいました。

スクリーンショット 2020-01-19 19.08.26.png

最下位は0、下から数えて70位でした。スコア0ということは全問正解の裏返しということで、これはこれで気になるスコアです。

全員死亡モデル

["Survived"] = 0としたCSVをKaggleにアップします。
1 - 0.37320 = 0.6268なので同じくらいの値を期待した所、Public Score:0.62679でした。だいたい合っています。

男性死亡、女性生存モデル

今度は男性なら死亡、女性なら生存と単純に割り振ってみます。
タイタニックでは男性の死亡率が高く、女性の生存率が高かったので、これでも予測が上がるはずです。

01.py
#pandasを使います
import pandas as pd

# CSVを読み込む
test = pd.read_csv('test.csv')

# Survived列を追加
test["Survived"] = 0

#女性だったら1(生存)に置き換え
test.loc[test["Sex"] == 'female', "Survived"] = 1

#提出用にPassengerIdとSurvivedだけにする。
test = test.loc[:,['PassengerId','Survived']]

#CSVに出力(インデックスは不要)
test.to_csv('titanic1.csv',index=False)

Public Score:0.76555
lederbord:12457位/15000人くらい?

Gender Based ModelのCSVと中身が一緒のようです。
スクリーンショット 2020-01-19 19.41.28.png

ごくシンプルなモデルでも0.76555ですから、ここからどうやって予測の精度をあげるかが腕の見せ所なのでしょう。

まずはルールの確認というあたりです。

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3