Kaggle Tutorial

Playground Series — 表形式コンペ実践

毎月開催の表形式コンペ Playground Series を題材に、CV 構築から特徴量・アンサンブルまでを通します。

概要#

Playground Series は、Kaggle が 毎月開催する表形式の練習コンペです。実データに近い(合成された)データで、評価指標は回によって AUC・RMSE などさまざま。入門(Titanic / House Prices)の次に、L4〜L6 の手法を統合的に試すのに最適です。

メモ

まず Overview と評価指標を確認します。指標に合わせて検証(交差検証)と後処理を設計するのが第一歩です。

1. EDA と検証設計#

import pandas as pd

train = pd.read_csv("/kaggle/input/<competition>/train.csv")
test = pd.read_csv("/kaggle/input/<competition>/test.csv")
train.shape, train["target"].value_counts(normalize=True)

目的変数の偏り・欠損・型を確認し、データ構造に合った分割(不均衡なら層化)で 信頼できる 交差検証 を組みます。これが以降のすべての判断の土台です。

2. ベースライン(LightGBM + CV)#

import numpy as np
import lightgbm as lgb
from sklearn.model_selection import StratifiedKFold
from sklearn.metrics import roc_auc_score

X = train.drop(columns=["id", "target"]); y = train["target"]
oof = np.zeros(len(X))
skf = StratifiedKFold(n_splits=5, shuffle=True, random_state=42)
for tr, va in skf.split(X, y):
    model = lgb.LGBMClassifier(n_estimators=2000, learning_rate=0.03)
    model.fit(X.iloc[tr], y.iloc[tr],
              eval_set=[(X.iloc[va], y.iloc[va])],
              callbacks=[lgb.early_stopping(100), lgb.log_evaluation(0)])
    oof[va] = model.predict_proba(X.iloc[va])[:, 1]
print("CV AUC:", roc_auc_score(y, oof))

勾配ブースティング(GBDT)早期終了 で素早く強いベースラインを作ります(L5)。

3. 改善#

4. アンサンブル#

# 系統の違うモデルの OOF を加重平均(重みは OOF で最適化)
blend = 0.5 * oof_lgbm + 0.3 * oof_xgb + 0.2 * oof_linear

LightGBM / XGBoost / 線形など多様なモデルを ブレンディング / スタッキング で統合します(L6)。 重みは OOF で決め、Public LB に合わせ込まない(シェイクアップ回避)。

関連トラック#