分析の流れ(コンペの「型」)

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)

新しい列を作る作業。アイデア勝負。

実務的な進め方:

  1. ドメイン知識から考える:「タイタニックなら家族で行動したはず」→家族人数の列を作る
  2. EDAで見つけた偏りを列にする:「敬称Masterの生存率が高い」→敬称を列にする
  3. 機械的に量産する:集約統計量(平均・最大・件数)を総当たりで作る
  4. 効かない特徴量を削る:特徴量重要度(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つだけ変える。 複数同時に変えると、何が効いたのかわからなくなります。

実験記録をつけましょう(スプレッドシートでも十分)。

実験変更内容CVPublic LB採用
exp001ベースライン0.80140.779◯
exp002FamilySize追加0.81370.785◯
exp003Cabin頭文字追加0.80090.780✕
exp004LightGBMに変更0.82650.789◯

これがあると、自分の成長と、効いた施策が可視化されます。上位勢は例外なく記録を取っています。

⑧ アンサンブル

終盤の工程です。

  • 乱数シードを変えた同じモデルを複数作って平均する(seed averaging)
  • LightGBM / XGBoost / CatBoost の予測を平均する
  • 異なる特徴量セットのモデルを混ぜる

まったく性質の違うモデルを混ぜるほど効きます。

⑨ 最終提出を選ぶ

終了直前、提出済みのものから 2つ を選びます。定石は:

  1. CVスコアが最も良いもの(本命)
  2. Public LBが最も良いもの(保険)

または「堅実なモデル」と「攻めたモデル」の2本立て。選択を忘れると自動でPublic上位2つが選ばれるので、shakeで沈みやすくなります。必ず手動で選びましょう。


コンペ後にやるべき、いちばん大事なこと

終了後、上位陣が Discussion に解法(solution)を投稿 します。これを読むのが、Kaggleで最も学習効率の高い瞬間です。

読むときの観点:

  • 自分と何が違ったか(特徴量?CV?モデル?後処理?)
  • 自分が思いつかなかった発想は何か
  • 次のコンペで真似できることは何か

そして可能なら、自分の取り組みも短くてよいので言語化して残す(ブログ・Zenn・Qiita等)。理解が段違いに定着します。


まとめ

  • 流れは 理解 → EDA → CV設計 → ベースライン → 特徴量 → モデル → 比較 → アンサンブル → 最終提出。
  • CVの設計が最重要。物差しがなければ改善できない。
  • 効果の大きさは 特徴量 ≫ モデル > パラメータ。
  • 1回の実験で変えるのは1つだけ。記録を取る。
  • 終了後の解法読みが最大の学習機会。