ステップ13:完成コード全文(コピペ用)
この章でやったことを、1つのセルにまとめたものです。
- 途中で迷子になったとき
- 最初からやり直したいとき
- 次回、ゼロから再現したいとき
新しいセルにこれを丸ごと貼って Shift + Enter するだけで、提出ファイルまで完成します。
完成版(特徴量エンジニアリング込み)
import numpy as np
import pandas as pd
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import cross_val_score
# ---------- 1. データを読み込む ----------
train = pd.read_csv("/kaggle/input/titanic/train.csv")
test = pd.read_csv("/kaggle/input/titanic/test.csv")
# ---------- 2. 空欄を埋める値を学習データから決める ----------
age_median = train["Age"].median() # 28.0
fare_median = train["Fare"].median() # 14.4542
# ---------- 3. 前処理と特徴量づくり ----------
def prepare(df):
df = df.copy()
# 文字 → 数字
df["Sex"] = df["Sex"].map({"male": 0, "female": 1})
df["Embarked"] = df["Embarked"].fillna("S").map({"S": 0, "C": 1, "Q": 2})
# 空欄を埋める
df["Age"] = df["Age"].fillna(age_median)
df["Fare"] = df["Fare"].fillna(fare_median)
# 家族の人数
df["FamilySize"] = df["SibSp"] + df["Parch"] + 1
df["IsAlone"] = (df["FamilySize"] == 1).astype(int)
# 名前から敬称を取り出す
t = df["Name"].str.extract(r" ([A-Za-z]+)\.")[0]
t = t.replace(["Mlle", "Ms"], "Miss").replace(["Mme"], "Mrs")
t = t.where(t.isin(["Mr", "Miss", "Mrs", "Master"]), "Rare")
df["Title"] = t.map({"Mr": 0, "Miss": 1, "Mrs": 2, "Master": 3, "Rare": 4})
return df
features = ["Pclass", "Sex", "Age", "SibSp", "Parch", "Fare", "Embarked",
"FamilySize", "IsAlone", "Title"]
X = prepare(train)[features]
y = train["Survived"]
X_test = prepare(test)[features]
print("X:", X.shape, " X_test:", X_test.shape)
print("空欄:", X.isnull().sum().sum(), X_test.isnull().sum().sum())
# ---------- 4. 学習前にCVで実力を測る ----------
model = RandomForestClassifier(n_estimators=300, max_depth=6, random_state=0)
cv = cross_val_score(model, X, y, cv=5, scoring="accuracy")
print("CVスコア:", cv.mean().round(4), cv.round(4))
# ---------- 5. 学習して予測する ----------
model.fit(X, y)
pred = model.predict(X_test)
# ---------- 6. 提出ファイルを作る ----------
submission = pd.DataFrame({
"PassengerId": test["PassengerId"],
"Survived": pred
})
submission.to_csv("submission.csv", index=False)
print("提出ファイル:", submission.shape)
submission.head()
✅ こう出れば成功
X: (891, 10) X_test: (418, 10)
空欄: 0 0
CVスコア: 0.835 前後
提出ファイル: (418, 2)
あとは Save Version → Save & Run All (Commit) → Output の submission.csv を Submit です。
最小版(とにかく提出だけしたい人向け)
機械学習すら使わない、5行で提出まで行く版です。
import pandas as pd
test = pd.read_csv("/kaggle/input/titanic/test.csv")
pred = (test["Sex"] == "female").astype(int)
pd.DataFrame({"PassengerId": test["PassengerId"], "Survived": pred}) \
.to_csv("submission.csv", index=False)
スコアは 0.76555 になります。
確認用コード(提出前のチェック)
提出前にこれを実行すると、形式ミスをほぼ防げます。
sub = pd.read_csv("submission.csv")
print("行数 :", len(sub), "→ 418 ならOK")
print("列名 :", sub.columns.tolist(), "→ ['PassengerId', 'Survived'] ならOK")
print("空欄 :", sub.isnull().sum().sum(), "→ 0 ならOK")
print("Survivedの値:", sub['Survived'].unique(), "→ 0 と 1 だけならOK")
print("先頭ID :", sub['PassengerId'].iloc[0], "→ 892 ならOK")
次に差し替えてみると面白い部分
| 場所 | 試すこと |
|---|---|
RandomForestClassifier(...) | max_depth を 4 / 5 / 8 に変えてCVを比べる |
features | 列を1つ減らして、CVが下がるか確かめる |
prepare() | 新しい列を1つ追加する(ステップ11 のヒント参照) |
| モデルそのもの | from sklearn.linear_model import LogisticRegression に差し替える(fit/predict はそのまま使えます) |
💡 1回の実験で変えるのは1箇所だけ。 同時に2つ変えると、どちらが効いたのかわからなくなります。