ステップ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程度) |
| Fare | 0.15前後 |
| Age | 0.15前後 |
| Pclass | 0.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で最も重要な技術です。