Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Neko kin

182 views

Published on

kaggle recruit competition

Published in: Art & Photos
  • Be the first to comment

Neko kin

  1. 1. 猫なら取れる金メダル プログラマーから見た機械学習
  2. 2. 猫でも取れる・取れない金メダル 猫でも取れる金メダル ・Recruitコンペでのモデル(Master向け) 猫しか取れない金メダル ・素人でも金メダルを取る方法論(Novice向け)
  3. 3. 自己紹介 ・名前:pocket@Kaggle ・仕事:証券会社のバックエンドエンジニア ・能力 ・プログラマー歴5~6年 ・英語はチョットデキル ・機械学習/統計/数学は素人
  4. 4. 猫でも取れる金メダル Recruitコンペのモデル
  5. 5. 目次 ・コンペ概要 ・解法 ・学んだこと
  6. 6. 概要 ・お題 飲食店の来客数を予測する ・評価尺度 実際の来客数と予測値の対数に対し、RMSE ・データ ※200k行ほど 店情報、予約。+気象データ(外部) 2016/01/01~2017/04/22(train) 2017/04/23~2017/05/31(test) ・コンペ開催期間 2017/11/29~2018/02/06
  7. 7. データ詳細 日付 店名 ジャンル 場所 来客数 2016/01/01 A店 焼き肉 東京 20名 2016/01/01 B店 そば 福岡 1名 2016/01/02 A店 焼き肉 東京 30名 2016/01/02 B店 そば 福岡 5名 店ID 予約日 来店日 予約者数 A店 2017/04/22 2017/04/22 10名 B店 2017/04/22 2017/04/23 3名 A店 2017/04/22 2017/04/24 20名 B店 2017/04/22 2017/04/24 3名 こんな感じです(+天気と店の経度緯度) 予約データはtrain期間中に予約されたもののみ
  8. 8. 目次 ・コンペ概要 ・解法 ・学んだこと
  9. 9. 解法概要 ・モデル概要 LightGBMで作成した、週毎の時系列予想モデル ・特徴量 Rossman Competitionの優勝解法を参考 過去n週の統計情報が中心 ・Validation 試行錯誤 trainの一週先がtestデータ兼Validation. これを四組使用 ・アンサンブル(追加したモデル) ・外れ値除外モデル ・一年分のデータがある店だけで学習したモデル ・第二週だけ日毎のモデルを作成
  10. 10. 気づき:予約の減衰 予約は日を追うごとに減る ⇒日毎、週毎にモデルを作れば、より正確に ※作らないと予約情報を過大評価してしまう。 PublicLBが直近一週間なので、予約情報を過大評価した人がPrivateで多数転落
  11. 11. 統計情報のシフト 統計情報をn週分、シフトさせた。 例えば、2週先を予想するモデルでは、2週先にシフト 2017/03/12 04/08 04/16 04/22 日付 店名 先月平均 先月中央 来客数 2017/04/16 A店 12 10.5 20名 2017/04/17 A店 12 10.5 21名 2017/04/18 A店 12 10.5 30名 2017/04/19 A店 12 10.5 25名
  12. 12. 週毎のモデル シフト統計情報のモデルから予想を行う 予想 2017/02/19 03/18 03/26 04/01 2017/02/26 03/25 04/02 04/08 2017/03/05 04/01 04/09 04/15 2017/03/12 04/08 04/16 04/22 2017/03/26 04/22 05/0504/29 Private LB ※他には日毎のモデルなども作成 Public LB
  13. 13. 祝日処理 土曜>金曜>日曜>その他 の順番で来客数が多い ⇒翌日が休みかどうかに左右される? 日付 店名 ジャンル 場所 予約 曜日 翌日休フラグ 来客数 2016/02/09 A店 焼き肉 東京 10名 火曜 0 20名 2016/02/10 A店 焼き肉 東京 10名 水曜 1 20名 2016/02/11 A店 焼き肉 東京 10名 木曜(祝) 0 20名 2016/02/12 A店 焼き肉 東京 10名 金曜 1 20名 ※他にはGWを金曜扱いにするなど、 チーム毎に様々な手法があった。
  14. 14. Validation 何週間か予想させて、その結果を評価 ※他にはGWを数日hold outするなど、 GWに向けた確認なども行いました 2016/01/01 04/08 04/16 04/22 評価値 2016/01/01 04/01 04/08 04/15 評価値 2016/01/01 03/25 04/01 04/07 評価値
  15. 15. 目次 ・コンペ概要 ・解法 ・学んだこと
  16. 16. 優勝チームの手法 データを増幅していた。 「Label set」はLeakが起きないように工夫されている。 ※例えば、予約情報は、「Label set」には「Statistical set」の間にされた予約のみを含めている。
  17. 17. 全体的な手法の傾向 ・LightGBM系が多かった 優勝チーム含め、LightGBMが多く使用された ・ニューラルネットは苦戦していた データが少なめだったのが原因? コンペ後、data augmentationでそれなりの精度と判明 ・巨大なモデルStackingは見当たらなかった。 弱学習器などをStackする手法は全くなかった。 理由はよくわかりません・・・
  18. 18. データは全て使ってみよう 上級者にはたぶん当たり前の話ですが、 提供されたデータは全て使って学習させてみましょう。 コンペ序盤、12月は忘年会で来客数が多いため(ドメイン知識) 12月を除去して学習したのですが、かなり精度が悪かったです。 月を特徴量として含めれば、LightGBMはきちんと違いを学習。 ⇒LightGBMの方が自分より賢い
  19. 19. 猫しか取れない金メダル 素人が金メダルを取る方法論
  20. 20. 目次 ・学び方 ・攻略法 ・最後に
  21. 21. 機械学習歴 ・2016秋:Courseraの機械学習コース 四話くらいで飽きる ・2016冬:Kaggleに取り組もうと思い立つ XGBoostがWindowsに入らなくて挫折 ・2017秋:LightGBMが入ったのでPortoSeguro 何すればいいのかわからなくて挫折 ・2017冬:お正月を使ってRecruitコンペ Rossmanコンペのサル真似をしたら金メダル圏に入ってしまった
  22. 22. 学ぶべきこと ・機械学習ライブラリの使い方 試行錯誤したらいける。 処理時間短縮のためデータを削ったデバッグ用データを作る ・Kernelのコードが読めるように 手元で動かす。 printデバッグ、同じAPI叩いたり ・Discussionが理解できるように わからない用語などはググって調べる
  23. 23. 学んでいないこと(できた方がよい) ・機械学習の理論 想像力と実験で補う ・数学・統計 あまり使わない ・ニューラルネット コンペによってはGBDTのみでいける ・プログラミングの文法 必要になった文法だけ学ぶ Classも書かずに終わりました
  24. 24. 目次 ・学び方 ・攻略法 ・最後に
  25. 25. コンペの本質的テクニック ・実験速度が全て チューニングやアンサンブルは最後 前処理は一回やって吐き出す ハイスペックPC ・Validationが全て 羅針盤が狂っていると何もかも無駄 ・過去コンペのSolutionを真似る まずはKernelやSolutionに沿って実装してみる
  26. 26. コンペの非本質的テクニック ・コンペの選定 データが少ない初心者に優しいコンペを選ぶ 人気のあるコンペが同時開催されているときを狙う ・重要なDiscussionは見逃さない 最低限、Hotnessでソートして読む 議論が伸びている場合、重要なヒントがあることも ・時間を投入する いくら実験速度が速くても、 結果として実験回数が少なければ意味なし
  27. 27. くじけないために ・途中、スコアが伸びなかった時 ・チームを組む ・金メダル取ります、と宣言することで自分を追い込む ・「世界一になるぞー」と独り言をつぶやきながら帰宅する
  28. 28. 目次 ・学び方 ・攻略法 ・最後に
  29. 29. プログラマーから見た機械学習 ・大衆化 機械学習未経験でも金メダル級のモデルが作れる ライブラリの進化、環境構築方法の進化⇒Windows可 ・Kaggle楽しい! 楽しいKaggleみんなで学ぼう

×
Save this presentationTap To Close