ステップ8:モデルに学習させて予測する

🎯 このステップでやること機械学習モデルに法則を覚えさせ、418人の生死を予測する。所要時間:約8分。たった3行で機械学習が動きます。


8-1. モデルを用意して学習させる

📋 コード

from sklearn.ensemble import RandomForestClassifier

model = RandomForestClassifier(
    n_estimators=300,   # 決定木を300本作る
    max_depth=6,        # 1本あたりの深さは6まで
    random_state=0,     # 結果を毎回同じにするための固定値
)

model.fit(X, y)

print("学習が完了しました")

✅ こう出れば成功

学習が完了しました

数秒で終わります。これで機械学習が終わりました。 本当にこれだけです。

⚠️ うまくいかないときは

エラー原因
could not convert string to float文字が残っています。ステップ7の prepare() を実行してください
Input contains NaN空欄が残っています。ステップ7-4で0を確認してください
NameError: X is not definedステップ7のセルを実行していません

8-2. 予測する

📋 コード

pred = model.predict(X_test)

print(pred[:20])
print("予測した人数:", len(pred))
print("生存と予測した人数:", pred.sum())

✅ こう出れば成功

[0 0 0 0 1 0 1 0 1 0 0 0 1 0 1 1 0 0 1 0]
予測した人数: 418
生存と予測した人数: 150 前後

数字は環境によって多少変わります。418人分出ていればOKです。

8-3. 何を学んだのか覗いてみる

モデルが「どの列を重視したか」を見られます。

📋 コード

import pandas as pd

importance = pd.DataFrame({
    "特徴量": X.columns,
    "重要度": model.feature_importances_
}).sort_values("重要度", ascending=False)

importance

✅ こう出れば成功だいたいこういう順番になります(数値は多少変わります)。

特徴量重要度
Sex最大(0.4〜0.5程度)
Fare0.15前後
Age0.15前後
Pclass0.1前後
SibSp / Parch / Embarked小さい

🎯 モデルも「性別がいちばん大事」と判断しました。ステップ4であなたがデータを見て立てた仮説と、機械の判断が一致しています。

この表を 特徴量重要度(feature importance) と呼びます。「どの列が効いているか」がわかるので、次に何を作ればいいかのヒントになります。

8-4. 提出ファイルを作る

📋 コード

submission = pd.DataFrame({
    "PassengerId": test["PassengerId"],
    "Survived": pred
})
submission.to_csv("submission.csv", index=False)

print(submission.shape)
submission.head()

✅ こう出れば成功

(418, 2)

ステップ5とまったく同じ形です。中身(予測)だけが賢くなりました。

⚠️ ここではまだ提出しません。ステップ9で「提出する前に自分で採点する方法」を学んでから提出します。


💡 何をしたのか(読み飛ばし可)

3行の意味

⚠️ 下は説明用の図解です。... の部分が入っているので、そのまま貼り付けても動きません。

model = RandomForestClassifier(...)   ← ① どんなモデルを使うか決める
model.fit(X, y)                       ← ② 学習(材料Xから答えyを当てる法則を覚える)
pred = model.predict(X_test)          ← ③ 推論(覚えた法則で未知のデータに答えを出す)

この3行は、どんなモデルでも同じ形です。 RandomForestClassifier を LightGBM に変えても、fit と predict はそのまま使えます。だから、モデルの差し替えは 1行変えるだけ で済みます。

ランダムフォレストとは

決定木 を何百本も作って、多数決を取るモデルです。

決定木1本:  性別は女性? → はい → 等級は3未満? → はい → 「生存」
決定木2本目:運賃は10以上? → いいえ → 年齢は16以上? → はい → 「死亡」
          :
          (これを300本作って、多数決)

1本の木は間違いだらけですが、少しずつ違う木を大量に作って多数決すると、驚くほど精度が上がります。「森(フォレスト)」という名前はここから来ています。

パラメータの意味

設定意味大きくすると
n_estimators=300木の本数精度が安定するが遅くなる
max_depth=6木の深さの上限細かく覚えるが過学習しやすくなる
random_state=0乱数の固定毎回同じ結果になる(再現性)

💡 random_state を指定しないと、実行するたびに結果が変わります。「昨日のスコアと比べられない」という事故を防ぐため、Kagglerは必ず固定します。


✅ ここまでできたら

次のステップでは、提出する前に自分で点数を測ります。 Kaggleで最も重要な技術です。