【Kaggle挑戦記】Titanic 攻略 #3:データの「当たり」をつける
最短ルートで初提出(スコア:0.76794)を終えた段階で、次に行うべきは、どのデータ(特徴量)が生存に直結しているのか、論理的な仮説と数値で切り分ける作業です。
1. 仕様確認:データ項目の定義一覧
まずは手元にあるテーブルの定義を正確に把握し、全12項目の中で何が利用可能かを確認します。
| 項目名 (Column) | 意味 (Description) | 型 (Type) | 補足 (Notes) |
|---|---|---|---|
| PassengerId | 乗客ID | int | 連番。予測には使わない主キー |
| Survived | 生存フラグ | int | 【正解データ】 0=死亡、1=生存 |
| Pclass | チケットクラス | int | 1=上層(1等)、2=中層(2等)、3=下層(3等) |
| Name | 氏名 | object | 文字列 |
| Sex | 性別 | object | male / female |
| Age | 年齢 | float | 欠損値あり |
| SibSp | 兄弟・配偶者数 | int | 同乗している兄弟や配偶者の数 |
| Parch | 両親・子供数 | int | 同乗している両親や子供の数 |
| Ticket | チケット番号 | object | 文字列 |
| Fare | 旅客運賃 | float | 数値データ |
| Cabin | 客室番号 | object | 欠損値多 |
| Embarked | 出港地 | object | C / Q / S |
2. 仮説:項目の切り分け
各項目が生存に関係しそうかどうかを、とりあえず、勘で事前に切り分けます。
| 項目名 (Column) | 関連性の推論 |
|---|---|
| Sex | ありそう |
| Pclass | ありそう |
| Age | ありそう |
| Fare | ありそう |
| SibSp / Parch | ありそう |
| Name | なさそう |
| Embarked | なさそう |
| Ticket / Cabin | なさそう |
| PassengerId | なさそう |
3. 検証:相関分析の実行(完全なソースコード)
「ありそう」と踏んだ項目について、実際に Survived(生存率) との関係性を算出します。汎用性が高く、まずは全体像を把握するために適しているためピアソンの積率相関係数を採用する。
import pandas as pd
# 1. データの読み込み
train_df = pd.read_csv('train.csv')
# 2. 相関計算のため「文字列」を「数値」に一時変換(エンコード)
train_encoded = train_df.copy()
train_encoded['Sex'] = train_encoded['Sex'].map({'male': 0, 'female': 1})
# 3. 算出対象の項目選定(「ありそう」と踏んだ項目に限定)
target_columns = ['Survived', 'Pclass', 'Sex', 'Age', 'SibSp', 'Parch', 'Fare']
# 4. 相関係数(ピアソン)の算出
pearson_corr = train_encoded[target_columns].corr(method='pearson')
# 5. 「Survived」との相関を表示
print("--- Survived との相関係数(ピアソン) ---")
print(pearson_corr['Survived'].sort_values(ascending=False))
# 1. データの読み込み
train_df = pd.read_csv('train.csv')
# 2. 相関計算のため「文字列」を「数値」に一時変換(エンコード)
train_encoded = train_df.copy()
train_encoded['Sex'] = train_encoded['Sex'].map({'male': 0, 'female': 1})
# 3. 算出対象の項目選定(「ありそう」と踏んだ項目に限定)
target_columns = ['Survived', 'Pclass', 'Sex', 'Age', 'SibSp', 'Parch', 'Fare']
# 4. 相関係数(ピアソン)の算出
pearson_corr = train_encoded[target_columns].corr(method='pearson')
# 5. 「Survived」との相関を表示
print("--- Survived との相関係数(ピアソン) ---")
print(pearson_corr['Survived'].sort_values(ascending=False))
【 分析結果:生存率との相関係数 】
- Sex:0.543
- Fare:0.257
- Pclass:-0.338
- Age:-0.077
- Parch:0.081
- SibSp:-0.035
4. 前回プログラムの振り返り
第2回の最短ルートで使用した特徴量と、今回の相関計算の結果を照らし合わせます。
# 前回の特徴量選択
features = ["Pclass", "Sex", "SibSp", "Parch"]
features = ["Pclass", "Sex", "SibSp", "Parch"]
前回は「ありそう」と推測した項目のうち、Fare と Age を除いた 4項目を特徴量として利用しました。今回の計算結果を見ると、利用しなかった Fare が一定の相関(0.25)を示しており、これを特徴量に加えることでモデルの判断材料がどう変化するかを試す価値はありそうです。
また、Age については相関係数こそ低いですが、欠損値を適切に補完した上で投入することで、どのような変化が出るかを検証する必要があります。
PR