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

Weitere ähnliche Inhalte

Was ist angesagt?

LightGBMを少し改造してみた ~カテゴリ変数の動的エンコード~
LightGBMを少し改造してみた ~カテゴリ変数の動的エンコード~LightGBMを少し改造してみた ~カテゴリ変数の動的エンコード~
LightGBMを少し改造してみた ~カテゴリ変数の動的エンコード~RyuichiKanoh
 
混合ガウスモデルとEMアルゴリスム
混合ガウスモデルとEMアルゴリスム混合ガウスモデルとEMアルゴリスム
混合ガウスモデルとEMアルゴリスム貴之 八木
 
深層生成モデルと世界モデル
深層生成モデルと世界モデル深層生成モデルと世界モデル
深層生成モデルと世界モデルMasahiro Suzuki
 
ようやく分かった!最尤推定とベイズ推定
ようやく分かった!最尤推定とベイズ推定ようやく分かった!最尤推定とベイズ推定
ようやく分かった!最尤推定とベイズ推定Akira Masuda
 
研究分野をサーベイする
研究分野をサーベイする研究分野をサーベイする
研究分野をサーベイするTakayuki Itoh
 
【DL輪読会】AUTOGT: AUTOMATED GRAPH TRANSFORMER ARCHITECTURE SEARCH
【DL輪読会】AUTOGT: AUTOMATED GRAPH TRANSFORMER ARCHITECTURE SEARCH【DL輪読会】AUTOGT: AUTOMATED GRAPH TRANSFORMER ARCHITECTURE SEARCH
【DL輪読会】AUTOGT: AUTOMATED GRAPH TRANSFORMER ARCHITECTURE SEARCHDeep Learning JP
 
Word Tour: One-dimensional Word Embeddings via the Traveling Salesman Problem...
Word Tour: One-dimensional Word Embeddings via the Traveling Salesman Problem...Word Tour: One-dimensional Word Embeddings via the Traveling Salesman Problem...
Word Tour: One-dimensional Word Embeddings via the Traveling Salesman Problem...joisino
 
システム制御とディープラーニング
システム制御とディープラーニングシステム制御とディープラーニング
システム制御とディープラーニングKeio Robotics Association
 
NeurIPS'21参加報告 tanimoto_public
NeurIPS'21参加報告 tanimoto_publicNeurIPS'21参加報告 tanimoto_public
NeurIPS'21参加報告 tanimoto_publicAkira Tanimoto
 
【DL輪読会】The Forward-Forward Algorithm: Some Preliminary
【DL輪読会】The Forward-Forward Algorithm: Some Preliminary【DL輪読会】The Forward-Forward Algorithm: Some Preliminary
【DL輪読会】The Forward-Forward Algorithm: Some PreliminaryDeep Learning JP
 
ナレッジグラフ入門
ナレッジグラフ入門ナレッジグラフ入門
ナレッジグラフ入門KnowledgeGraph
 
Non-autoregressive text generation
Non-autoregressive text generationNon-autoregressive text generation
Non-autoregressive text generationnlab_utokyo
 
金融時系列のための深層t過程回帰モデル
金融時系列のための深層t過程回帰モデル金融時系列のための深層t過程回帰モデル
金融時系列のための深層t過程回帰モデルKei Nakagawa
 
特徴選択のためのLasso解列挙
特徴選択のためのLasso解列挙特徴選択のためのLasso解列挙
特徴選択のためのLasso解列挙Satoshi Hara
 
Granger因果による 時系列データの因果推定(因果フェス2015)
Granger因果による時系列データの因果推定(因果フェス2015)Granger因果による時系列データの因果推定(因果フェス2015)
Granger因果による 時系列データの因果推定(因果フェス2015)Takashi J OZAKI
 
クラスタリングとレコメンデーション資料
クラスタリングとレコメンデーション資料クラスタリングとレコメンデーション資料
クラスタリングとレコメンデーション資料洋資 堅田
 
実践多クラス分類 Kaggle Ottoから学んだこと
実践多クラス分類 Kaggle Ottoから学んだこと実践多クラス分類 Kaggle Ottoから学んだこと
実践多クラス分類 Kaggle Ottoから学んだことnishio
 

Was ist angesagt? (20)

LightGBMを少し改造してみた ~カテゴリ変数の動的エンコード~
LightGBMを少し改造してみた ~カテゴリ変数の動的エンコード~LightGBMを少し改造してみた ~カテゴリ変数の動的エンコード~
LightGBMを少し改造してみた ~カテゴリ変数の動的エンコード~
 
因果推論の基礎
因果推論の基礎因果推論の基礎
因果推論の基礎
 
混合ガウスモデルとEMアルゴリスム
混合ガウスモデルとEMアルゴリスム混合ガウスモデルとEMアルゴリスム
混合ガウスモデルとEMアルゴリスム
 
深層生成モデルと世界モデル
深層生成モデルと世界モデル深層生成モデルと世界モデル
深層生成モデルと世界モデル
 
ようやく分かった!最尤推定とベイズ推定
ようやく分かった!最尤推定とベイズ推定ようやく分かった!最尤推定とベイズ推定
ようやく分かった!最尤推定とベイズ推定
 
FOBOS
FOBOSFOBOS
FOBOS
 
研究分野をサーベイする
研究分野をサーベイする研究分野をサーベイする
研究分野をサーベイする
 
【DL輪読会】AUTOGT: AUTOMATED GRAPH TRANSFORMER ARCHITECTURE SEARCH
【DL輪読会】AUTOGT: AUTOMATED GRAPH TRANSFORMER ARCHITECTURE SEARCH【DL輪読会】AUTOGT: AUTOMATED GRAPH TRANSFORMER ARCHITECTURE SEARCH
【DL輪読会】AUTOGT: AUTOMATED GRAPH TRANSFORMER ARCHITECTURE SEARCH
 
Word Tour: One-dimensional Word Embeddings via the Traveling Salesman Problem...
Word Tour: One-dimensional Word Embeddings via the Traveling Salesman Problem...Word Tour: One-dimensional Word Embeddings via the Traveling Salesman Problem...
Word Tour: One-dimensional Word Embeddings via the Traveling Salesman Problem...
 
システム制御とディープラーニング
システム制御とディープラーニングシステム制御とディープラーニング
システム制御とディープラーニング
 
NeurIPS'21参加報告 tanimoto_public
NeurIPS'21参加報告 tanimoto_publicNeurIPS'21参加報告 tanimoto_public
NeurIPS'21参加報告 tanimoto_public
 
【DL輪読会】The Forward-Forward Algorithm: Some Preliminary
【DL輪読会】The Forward-Forward Algorithm: Some Preliminary【DL輪読会】The Forward-Forward Algorithm: Some Preliminary
【DL輪読会】The Forward-Forward Algorithm: Some Preliminary
 
ナレッジグラフ入門
ナレッジグラフ入門ナレッジグラフ入門
ナレッジグラフ入門
 
Non-autoregressive text generation
Non-autoregressive text generationNon-autoregressive text generation
Non-autoregressive text generation
 
金融時系列のための深層t過程回帰モデル
金融時系列のための深層t過程回帰モデル金融時系列のための深層t過程回帰モデル
金融時系列のための深層t過程回帰モデル
 
特徴選択のためのLasso解列挙
特徴選択のためのLasso解列挙特徴選択のためのLasso解列挙
特徴選択のためのLasso解列挙
 
Granger因果による 時系列データの因果推定(因果フェス2015)
Granger因果による時系列データの因果推定(因果フェス2015)Granger因果による時系列データの因果推定(因果フェス2015)
Granger因果による 時系列データの因果推定(因果フェス2015)
 
クラスタリングとレコメンデーション資料
クラスタリングとレコメンデーション資料クラスタリングとレコメンデーション資料
クラスタリングとレコメンデーション資料
 
LDA入門
LDA入門LDA入門
LDA入門
 
実践多クラス分類 Kaggle Ottoから学んだこと
実践多クラス分類 Kaggle Ottoから学んだこと実践多クラス分類 Kaggle Ottoから学んだこと
実践多クラス分類 Kaggle Ottoから学んだこと
 

Neko kin