タイタニック ~災害からの機械学習~
タイタニック号の沈没は歴史上最も悪名高い船の難破事故の一つです。
1912年4月15日は、当時世界で最も豪華で最大の旅客クルーズ船であるタイタニック号が大西洋に沈没したことを記録しています。2,200人の乗客を乗せて処女航海を行っていた英国所有の船は、氷山にぶつかった後、カナダのニューファウンランドの南約643kmの海域に沈没しました。
Kaggleという機械学習のコンペサイトには、この時タイタニックに乗船していた方の様々な情報を含んだリスト等が掲載されており、データセットが入っています。
これは伝説的な Titanic ML コンテストです。ML コンテストに飛び込んで Kaggle プラットフォームの仕組みを理解するための、最初の、そして最高のチャレンジです。
コンテストはシンプルです。機械学習を使用して、タイタニック号の沈没でどの乗客が生き残ったかを予測するモデルを作成します。
課題
タイタニック号の沈没は歴史上最も悪名高い船の難破事故の一つです。
1912 年 4 月 15 日、処女航海中、「沈まない」と思われていた タイタニック号が氷山に衝突して沈没しました。残念ながら、乗船者全員を乗せられるだけの救命ボートがなかったため、乗客と乗組員 2,224 人のうち 1,502 人が死亡しました。
生き残るにはある程度の運の要素もあったが、一部の人々のグループは他の人々よりも生き残る可能性が高いようです。
このチャレンジでは、乗客データ(名前、年齢、性別、社会経済階級など)を使用して、「どのような人が生き残る可能性が高いか」という質問に答える予測モデルを構築していただきます。
このコンテストではどのようなデータを使用する…のでしょうか?
このコンテストでは、名前、年齢、性別、社会経済階級などの乗客情報を含む 2 つの類似したデータセットにアクセスできます。1 つのデータセットのタイトルは でtrain.csv
、もう 1 つのデータセットのタイトルは ですtest.csv
。
Train.csv
この報告書には、搭乗していた乗客の一部(正確には891人)の詳細が含まれ、重要な点として、彼らが生き残ったかどうか、つまり「グラウンドトゥルース」が明らかになる。
データtest.csv
セットには同様の情報が含まれていますが、各乗客の「真実」は公開されていません。これらの結果を予測するのはあなたの仕事です。
データで見つかったパターンを使用してtrain.csv
、( で見つかった)船に乗っていた他の 418 人の乗客がtest.csv
生き残ったかどうかを予測します。
「データ」タブをチェックして、データセットをさらに詳しく調べてください。競争力のあるモデルが作成されたと感じたら、それを Kaggle に送信して、他の Kaggler と比較して、自分のモデルがリーダーボードでどの位置にいるかを確認してください。
Kaggleに予測を提出する方法(ついつい忘れがち。)
提出してリーダーボードに載る準備ができたら、次の手順に従ってください。
- 「予測を送信」ボタンをクリックします
提出時のファイル形式:
PassengerId
正確に 418 個のエントリとヘッダー行を含む csv ファイルを送信する必要があります。余分な列 (および以外) または行がある場合、送信時にエラーが表示されますSurvived
。
ファイルには正確に 2 つの列が必要です。
PassengerId
(任意の順序で並べ替え)Survived
(バイナリ予測が含まれます: 生存の場合は 1、死亡の場合は 0)- 以下のようになるはず、です。
PassengerId , Survived
892,0
893,1
894,0
・・・
確か、学習用という性質のため、2か月でリストから消える…はずです。
では開始!!
まず、私の環境ですが、
・Windows11 Home
・Google Drive
・Google Colab上のPython Version3
で行っています。
Gooleアカウント取得や、GoogleDriveへのリンク、Kaggleデータのダウンロード及びGoogleDriveへのアップロードは省略します。
Python起動&データ読み込み!!
Google Colaborateで、ノートブックの新規作成により、コード入力可能な画面に遷移します。ライブラリ、モジュールのインポート、パスマウント等のためのコードを入力します。
https://colab.research.google.com/drive/1KSHh_MVomc9jcKVIuzM33HvWdECrVh9X#scrollTo=VteyBqF9_phI&line=1&uniqifier=1
!pip install lime
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
import lightgbm as lgb
from sklearn.metrics import accuracy_score
from lime.lime_tabular import LimeTabularExplainer
from google.colab import drive
import warnings
drive.mount(‘/content/drive’)
warnings.simplefilter(‘ignore’)
|
コードの解説です。
1.
|
続けて、trainCSVを読み込むコード、上3行を表示するコードを入力します。
train = pd.read_csv(‘/content/drive/MyDrive/Colab Notebooks/kaggle/Titanic/train.csv’)
train.head(3)
|
コードの解説はこちら。
1.
|
結果以下のように表示されます。
|
続けて、testCSVを読み込むコード、上3行を表示するコードを入力します。
test = pd.read_csv(‘/content/drive/MyDrive/Colab Notebooks/kaggle/Titanic/test.csv’)
test.head(3)
|
コードの解説はこちら。
1.
|
結果以下のように表示されます。
PassengerId | Pclass | Name | Sex | Age | SibSp | Parch | Ticket | Fare | Cabin | Embarked | |
---|---|---|---|---|---|---|---|---|---|---|---|
0 | 892 | 3 | Kelly, Mr. James | male | 34.5 | 0 | 0 | 330911 | 7.8292 | NaN | Q |
1 | 893 | 3 | Wilkes, Mrs. James (Ellen Needs) | female | 47.0 | 1 | 0 | 363272 | 7.0000 | NaN | S |
2 | 894 | 2 | Myles, Mr. Thomas Francis | male | 62.0 | 0 | 0 | 240276 | 9.6875 | NaN | Q |
データの説明は以下の通り。
カラム名 | 説明 |
PassengerId | 乗客の一意の識別番号 |
Survived | 乗客が生存したかどうか(1: 生存, 0: 死亡) |
Pclass | 乗客の社会経済的地位を示すクラス(1st, 2nd, 3rd) |
Name | 乗客の名前 |
Sex | 乗客の性別 |
Age | 乗客の年齢 |
SibSp | タイタニック号に同乗している兄弟または配偶者の数 |
Parch | タイタニック号に同乗している親または子供の数 |
Ticket | チケット番号 |
Fare | 乗船料金 |
Cabin | 部屋番号 |
Embarked | 乗船した港(C: Cherbourg, Q: Queenstown, S: Southampton) |