忍者ブログ
統計、機械学習、AIを学んでいきたいと思います。 お役に立てば幸いです。

【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))

【 分析結果:生存率との相関係数 】

  • 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"]

前回は「ありそう」と推測した項目のうち、FareAge を除いた 4項目を特徴量として利用しました。今回の計算結果を見ると、利用しなかった Fare が一定の相関(0.25)を示しており、これを特徴量に加えることでモデルの判断材料がどう変化するかを試す価値はありそうです。

また、Age については相関係数こそ低いですが、欠損値を適切に補完した上で投入することで、どのような変化が出るかを検証する必要があります。



PR