Upgrade to Pro — share decks privately, control downloads, hide ads and more …

初手が爆速になるフレームワークを作ってコンペ設計した話

Yamaguchi Takahiro
November 30, 2019
5.6k

 初手が爆速になるフレームワークを作ってコンペ設計した話

Yamaguchi Takahiro

November 30, 2019
Tweet

Transcript

  1. Hello! 山口貴大 twitter @nyker_goto atma(アートマ)株式会社 取締役 / DS / ふろんと

    / ばっくえんど / いんふら 京都大学大学院 最適化数理卒 SGDが好き Kaggle Master kaggle.com/nyk510 2
  2. 17 初手(開始30分ぐらい)でこれができます 特徴量 • 指定カラムの Count Encoding • 指定カラムの OneHotEncoding

    • 集計系の特徴量 モデル • Single Model (LightGBM/XGBoost/RandomForest…) • Optuna での parameter tuning • Seed averaging • 上記モデルのEnsemble・Stacking (Ridge/LightGBM/XGBoost)
  3. 18

  4. 22 1.学習モデルを fold ごとに保存 2.Fold ごとの feature importance 3.Log と

    OutOfFold, そのスコアの保存 やってくれること
  5. 23 大枠は Base Class で定義 • Fold ごとの学習・予測 • target/input

    の scaling • Early Stopping • Optunaでのチューニング • Metric・feature importance の出力 ...
  6. 25 色々Stacking 1. XGBoost 2. Optuna で tuning するXGBoost 3.

    SeedAveraging するXGBoost 4. 1~3+特徴量のstacking + Optuna で tuning する Ridge 5. 1~3+特徴量のstacking する XGBoost 6. Stacking モデルのアンサンブル
  7. 27 Good Points • 共通部分の見える化 そのプロジェクト固有のコードと汎用部分を意識して コーディングするようになるので自ずと見やすくなる • Version 管理できる

    昔のプロジェクトでも問題なく使える 改良部分がわかりやすい(コピペだと何が良くなったかわから なくなりがち) • テストが容易 (GitlabCI で master merge ごとにテスト)
  8. 課題設計: 大きく3つの要素 Targetの選定 • そもそもどのカラムを予測する? 加工はいらない? • 回帰? 分類? Train/Public/Private

    の設定 • 時系列で切る? ユーザーIDで切る? 何も考えないで切る? 実際に解いたときのスコアの見積り • ほんまに予測できるの? privateで破綻してたりしない? • 予測が無理だと「コンペとしては」成立しない (仕事ならわからないでもOKだけど) 33
  9. atmaCup#2の場合 Target候補: 16種類 • アンケートのカラム (x5) • コンディション (atmaCup#2で採用したもの含む) 切り方

    (train/private/public)候補: 6種類 • User で分離する・時系列で分離する・testの割合 モデル: 10種類ぐらい • みんな本気で来るのでモデリングも手は抜けない… 34
  10. 課題の設計 Target候補: 8種類ぐらい • アンケートのカラム (x5) • コンディション (atmaCup#2で採用したもの)... 切り方

    (train/private/public)候補 6種類ぐらい • User で分離する・時系列で分離する・割合 モデル: 5種類ぐらい • みんな本気で来るのでモデリングも手は抜けない… 35 16x6 = 96種類のデータセットに対して 特徴量とモデルx10を作成して Target と切り方ごとに性能評価 やらなあかんこと