Kaggle Tutorial

データリークの発見と外部データの扱い

意図せぬリークの発見・防止と、コンペが許す範囲でのリーク活用・外部データの扱いを学びます。

2 種類のリーク#

データリークには立場の異なる 2 つの側面があります。

  • 作ってはいけないリーク:自分の前処理や検証設計に紛れ込む漏れ。CV を無意味にする
  • データに内在するリーク:配布データ自体に答えと相関する情報(ID・行順・時刻など)がある場合。 コンペ規約が許す範囲では、これを活用するのも実力のうち

内在リークの発見#

「不自然に効く特徴」はリークのサイン。次を疑います。

  • ID / 行インデックス / ファイル順が目的変数と相関する
  • 時刻・更新日時から答えが推測できる
  • 集計済みの値や、未来情報を含む列
# ID や行番号が効いていないかを確認
import lightgbm as lgb
X["row_id"] = np.arange(len(X))
model = lgb.LGBMClassifier().fit(X, y)
# row_id の重要度が高ければ、行順に情報が漏れているサイン

注意

自分が作るリークは厳禁です。前処理の統計量は fold 内(訓練側)で計算し、ターゲット系特徴は OOF で作ります。adversarial validation や 「単一特徴で目的変数をほぼ説明できる」兆候で早期に気づきましょう。

外部データの扱い#

  • コンペの Rules で外部データの可否を必ず確認する(禁止なら使わない)
  • 許可される場合も、ライセンス公開・共有義務(フォーラムで開示など)を守る
  • 個人情報や規約違反のデータは使わない

メモ

リークの「発見」と「フェアな活用」は上級者の腕の見せ所ですが、土台は規約遵守です。 グレーな手段で一時的に勝っても、失格や信頼喪失で長期的には損をします(L6 の倫理も参照)。

理解度チェック#

Quiz自分の分析で「作ってはいけない」リークの例は?

次のステップ#

次は、大規模データを現実的に扱うメモリ最適化と高速ライブラリを学びます。