【Titanic】CV と改善・スコア向上
交差検証で安定評価し、特徴量を足してベースラインからスコアを伸ばす改善ループを実践します。
CV を組む#
提出スコアだけに頼らず、手元で交差検証を組んで判断します。 分類なのでクラス比率を保つ Stratified K-Fold を使います。
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import StratifiedKFold, cross_val_score
cv = StratifiedKFold(n_splits=5, shuffle=True, random_state=42)
model = RandomForestClassifier(n_estimators=300, max_depth=5, random_state=42)
scores = cross_val_score(model, X, y, cv=cv, scoring="accuracy")
print(f"CV accuracy: {scores.mean():.4f} +/- {scores.std():.4f}")この CV スコアを基準に、変更が効いたかどうかを判断します。
特徴量を足す#
EDA の知見をもとに、効きそうな特徴を追加します。
def add_features(df):
df = df.copy()
# 家族の人数(同乗者 + 本人)
df["FamilySize"] = df["SibSp"] + df["Parch"] + 1
df["IsAlone"] = (df["FamilySize"] == 1).astype(int)
# 敬称(Mr / Mrs / Miss / Master など)
df["Title"] = df["Name"].str.extract(r",\s*([^.]+)\.")
return dfTitle(敬称)は年齢や性別・社会的地位の代理になり、生存予測に効くことが知られています。
ヒント
一度に一つだけ変えて CV を見るのが鉄則です。複数同時に変えると、何が効いたのか分かりません。 効いた変更だけを残していきましょう。
改善ループ#
- 特徴量を 1 つ足す / モデルを変える
- CV スコアを測る
- 改善したら採用 → 再提出、悪化したら戻す
注意
CV は上がったのに Public LB が下がる場合、検証設計の見直しが必要です。CV と LB が かけ離れるとシェイクアップの温床になります。基本は手元の CV を信じます。
理解度チェック#
次のステップ#
次は回帰コンペの House Prices に移り、歪んだ目的変数の扱い(対数変換)から学びます。