分析の流れ(コンペの「型」)
- 全体の流れ(9ステップ)
- ① コンペを理解する
- ② EDA(探索的データ分析)
- 最低限やること
- 次にやること
- 使うライブラリ
- 効率のよいEDAのやり方
- ③ 検証の枠組み(CV)を作る ── 実は最重要
- なぜ最重要なのか
- 良いCVの条件
- 「Trust your CV(自分のCVを信じろ)」
- ④ ベースラインを作る
- ⑤ 前処理と特徴量エンジニアリング
- 前処理(Preprocessing)
- 特徴量エンジニアリング(Feature Engineering)
- ⑥ モデルを選ぶ・調整する
- まずはこれだけ
- ハイパーパラメータ(Hyperparameter)
- Early Stopping(早期終了)
- ⑦ CVスコアで比較する
- ⑧ アンサンブル
- ⑨ 最終提出を選ぶ
- コンペ後にやるべき、いちばん大事なこと
- まとめ
Kaggleで実際にやる作業には、ほぼ決まった型があります。これを覚えると、どんなコンペでも「次に何をすればいいか」で迷わなくなります。
全体の流れ(9ステップ)
① コンペを理解する Overview・評価指標・ルールを読む
↓
② データを見る EDA(探索的データ分析)
↓
③ 検証の枠組みを作る CV(交差検証)の設計 ← 実は最重要
↓
④ ベースラインを作る とりあえず最後まで通す
↓
⑤ 前処理・特徴量を作る ここで差がつく
↓
⑥ モデルを選ぶ・調整する
↓
⑦ CVスコアで比較する 採用/不採用を判断
↓
⑧ アンサンブルする
↓
⑨ 最終提出を2つ選ぶ
以下、1つずつ見ていきます。
① コンペを理解する
最初の30分でやること
- Overview を読む(翻訳でOK)。何を予測するのか、ビジネス的な背景は何か。
- Evaluation(評価指標)を確認する。AUCなのかRMSEなのかで、作るものが変わります。
- Rules を確認する。外部データの使用可否、チーム人数、提出回数。
- Data の説明を読む。ファイル数、行数、列の意味。
- Discussion をざっと眺める。すでに重要な注意点が共有されていることが多い。
ここを飛ばして計算を始めると、評価指標を勘違いしたまま1週間溶かすといった事故が起きます。
② EDA(探索的データ分析)
EDA = Exploratory Data Analysis。データを眺めて、性質と仮説をつかむ作業。
最低限やること
df.shape # 行数・列数
df.head() # 先頭を見る
df.info() # 型と欠損の数
df.describe() # 統計量
df.isnull().sum() # 欠損の数
df["col"].value_counts() # カテゴリの出現回数
df["target"].value_counts(normalize=True) # 正解の偏り具合
次にやること
- 目的変数との関係を見る:
df.groupby("col")["target"].mean() - 分布を見る:ヒストグラム(
df["Age"].hist()) - 相関を見る:
df.corr()をヒートマップで可視化 - trainとtestの分布が同じか確認する(これが違うと厄介。分布シフトと呼ぶ)
使うライブラリ
import matplotlib.pyplot as plt
import seaborn as sns
sns.histplot(data=train, x="Age", hue="Survived")
plt.show()
効率のよいEDAのやり方
自分でゼロから書くより、コンペのCodeタブで「EDA」と名のついた人気Notebookを読むほうが早いです。グラフが整理された状態で見られます。そのうえで、自分の仮説を1つ2つ追加で検証する、という進め方を推奨します。
③ 検証の枠組み(CV)を作る ── 実は最重要
初心者が最も軽視し、上級者が最も重視する工程です。
なぜ最重要なのか
提出回数は 1日5回まで。しかしCVなら、手元で何十回でも試せます。「この変更は良かったのか悪かったのか」を判定する物差しがなければ、改善作業そのものが成立しません。
良いCVの条件
- LBスコアと連動して動くこと(CVが上がればLBも上がる関係)
- コンペのデータ構造を反映していること
| データの性質 | 使うべきCV |
|---|---|
| ふつうの分類 | StratifiedKFold |
| ふつうの回帰 | KFold |
| 同じ人・店が複数行ある | GroupKFold |
| 時系列(未来を予測する) | TimeSeriesSplit(または時間で区切る) |
「Trust your CV(自分のCVを信じろ)」
Public LBはテストデータの一部(例:30%)だけで計算された、サンプル数の少ない不安定な数字です。対してCVは学習データ全体を使って測った数字で、ずっと安定しています。
CVは上がったがLBは下がった → 基本はCVを信じて採用する。 CVもLBも上がった → 自信を持って採用。 CVは下がったがLBは上がった → Public LBへの過学習の疑い。採用しない。
これを守る人が、最後のshakeで生き残ります。
④ ベースラインを作る
ベースライン= とりあえず最後まで動く、最低限の一式。
精度は気にせず、「データ読み込み → 前処理 → 学習 → 予測 → 提出ファイル作成」が一本の線でつながった状態 をまず作ります。前のページでやったTitanicのコードがまさにベースラインです。
これがあると、以後の作業は「この一部を差し替えて、CVが上がるか見る」という単純作業になります。
⑤ 前処理と特徴量エンジニアリング
ここが スコアに最も効く 工程です。
前処理(Preprocessing)
機械学習にかけられる形に整える作業。
- 欠損値の処理
- 文字列→数値の変換(エンコーディング)
- 外れ値の処理
- スケーリング(標準化・正規化)※線形モデルやNNでは必要。決定木系では不要
特徴量エンジニアリング(Feature Engineering)
新しい列を作る作業。アイデア勝負。
実務的な進め方:
- ドメイン知識から考える:「タイタニックなら家族で行動したはず」→家族人数の列を作る
- EDAで見つけた偏りを列にする:「敬称Masterの生存率が高い」→敬称を列にする
- 機械的に量産する:集約統計量(平均・最大・件数)を総当たりで作る
- 効かない特徴量を削る:特徴量重要度(feature importance)を見て整理する
# LightGBMの特徴量重要度を見る
import pandas as pd
imp = pd.DataFrame({"feature": X.columns, "importance": model.feature_importances_})
imp.sort_values("importance", ascending=False).head(20)
⑥ モデルを選ぶ・調整する
まずはこれだけ
表形式データなら LightGBM 一本でほぼ足ります。
import lightgbm as lgb
model = lgb.LGBMClassifier(
n_estimators=1000, # 木の本数
learning_rate=0.05, # 学習率(小さいほど慎重)
num_leaves=31, # 木の複雑さ
random_state=0,
)
model.fit(X_train, y_train,
eval_set=[(X_valid, y_valid)],
callbacks=[lgb.early_stopping(100)])
ハイパーパラメータ(Hyperparameter)
人間が事前に決める設定値のこと(木の深さ、学習率など)。データから学習される値(重み)とは区別されます。
| 調整方法 | 内容 |
|---|---|
| 手動 | 1つずつ変えてCVを見る。感覚が身につく |
| Grid Search | 候補を総当たり。遅い |
| Optuna | 自動で賢く探す。Kaggleの定番 |
⚠️ 初心者がやりがちな失敗:パラメータ調整に時間を使いすぎること。効果の大きさは 特徴量 ≫ モデル選択 > パラメータ調整 です。パラメータいじりは最後でいい。
Early Stopping(早期終了)
検証スコアが改善しなくなったら学習を打ち切る仕組み。過学習を防ぐ標準装備です。
⑦ CVスコアで比較する
実験は1回につき1つだけ変える。 複数同時に変えると、何が効いたのかわからなくなります。
実験記録をつけましょう(スプレッドシートでも十分)。
| 実験 | 変更内容 | CV | Public LB | 採用 |
|---|---|---|---|---|
| exp001 | ベースライン | 0.8014 | 0.779 | ◯ |
| exp002 | FamilySize追加 | 0.8137 | 0.785 | ◯ |
| exp003 | Cabin頭文字追加 | 0.8009 | 0.780 | ✕ |
| exp004 | LightGBMに変更 | 0.8265 | 0.789 | ◯ |
これがあると、自分の成長と、効いた施策が可視化されます。上位勢は例外なく記録を取っています。
⑧ アンサンブル
終盤の工程です。
- 乱数シードを変えた同じモデルを複数作って平均する(seed averaging)
- LightGBM / XGBoost / CatBoost の予測を平均する
- 異なる特徴量セットのモデルを混ぜる
まったく性質の違うモデルを混ぜるほど効きます。
⑨ 最終提出を選ぶ
終了直前、提出済みのものから 2つ を選びます。定石は:
- CVスコアが最も良いもの(本命)
- Public LBが最も良いもの(保険)
または「堅実なモデル」と「攻めたモデル」の2本立て。選択を忘れると自動でPublic上位2つが選ばれるので、shakeで沈みやすくなります。必ず手動で選びましょう。
コンペ後にやるべき、いちばん大事なこと
終了後、上位陣が Discussion に解法(solution)を投稿 します。これを読むのが、Kaggleで最も学習効率の高い瞬間です。
読むときの観点:
- 自分と何が違ったか(特徴量?CV?モデル?後処理?)
- 自分が思いつかなかった発想は何か
- 次のコンペで真似できることは何か
そして可能なら、自分の取り組みも短くてよいので言語化して残す(ブログ・Zenn・Qiita等)。理解が段違いに定着します。
まとめ
- 流れは 理解 → EDA → CV設計 → ベースライン → 特徴量 → モデル → 比較 → アンサンブル → 最終提出。
- CVの設計が最重要。物差しがなければ改善できない。
- 効果の大きさは 特徴量 ≫ モデル > パラメータ。
- 1回の実験で変えるのは1つだけ。記録を取る。
- 終了後の解法読みが最大の学習機会。