Kaggle Tutorial

【House Prices】特徴量強化とアンサンブルの入口

特徴量を強化し、複数モデルの予測を平均するブレンディングでスコアを底上げします。

特徴量を強化する#

ドメイン知識から、効きそうな特徴を作ります。House Prices の定番は面積系の合算です。

def add_features(df):
    df = df.copy()
    # 総面積(地下 + 1 階 + 2 階)
    df["TotalSF"] = df["TotalBsmtSF"].fillna(0) + df["1stFlrSF"] + df["2ndFlrSF"]
    # 築年・改装からの経過
    df["Age"] = df["YrSold"] - df["YearBuilt"]
    df["RemodAge"] = df["YrSold"] - df["YearRemodAdd"]
    return df

歪んだ数値特徴は対数変換すると線形モデルに効くことがあります。

アンサンブルの入口:ブレンディング#

異なる性質のモデルの予測を平均すると、単体より安定して精度が上がることがよくあります。 最も簡単なアンサンブル学習が、予測値の加重平均=ブレンディングです。

import numpy as np
from sklearn.linear_model import Ridge
from sklearn.ensemble import GradientBoostingRegressor

# それぞれ学習済みとする(前処理 Pipeline 込み)
pred_ridge = np.expm1(ridge.predict(X_test))   # 線形モデル
pred_gbr = np.expm1(gbr.predict(X_test))        # 勾配ブースティング

# 単純平均でブレンド
pred = 0.5 * pred_ridge + 0.5 * pred_gbr

線形モデル(ロジスティック回帰の回帰版 Ridge)と勾配ブースティングは得意・不得意が異なるため、 組み合わせると弱点を補い合えます。

ヒント

ブレンドの重みは交差検証OOF 予測で決めると過学習しにくくなります。 まずは 0.5 : 0.5 から試し、CV を見ながら調整しましょう。

メモ

本格的なスタッキング(メタモデルで統合)や勾配ブースティング(GBDT)の本命 (LightGBM / XGBoost)は、次トラック L5・L6 で詳しく扱います。

理解度チェック#

Quiz性質の異なる複数モデルの予測を平均(ブレンド)すると効果が出やすいのはなぜ?

次のステップ#

最後に、提出フローの完全理解と、よくある submission 形式エラーのデバッグを学びます。