SlideShare a Scribd company logo
猫なら取れる金メダル
プログラマーから見た機械学習
猫でも取れる・取れない金メダル
猫でも取れる金メダル
・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みんなで学ぼう

More Related Content

What's hot

SSII2022 [SS2] 少ないデータやラベルを効率的に活用する機械学習技術 〜 足りない情報をどのように補うか?〜
SSII2022 [SS2] 少ないデータやラベルを効率的に活用する機械学習技術 〜 足りない情報をどのように補うか?〜SSII2022 [SS2] 少ないデータやラベルを効率的に活用する機械学習技術 〜 足りない情報をどのように補うか?〜
SSII2022 [SS2] 少ないデータやラベルを効率的に活用する機械学習技術 〜 足りない情報をどのように補うか?〜
SSII
 
PyData.Tokyo Meetup #21 講演資料「Optuna ハイパーパラメータ最適化フレームワーク」太田 健
PyData.Tokyo Meetup #21 講演資料「Optuna ハイパーパラメータ最適化フレームワーク」太田 健PyData.Tokyo Meetup #21 講演資料「Optuna ハイパーパラメータ最適化フレームワーク」太田 健
PyData.Tokyo Meetup #21 講演資料「Optuna ハイパーパラメータ最適化フレームワーク」太田 健
Preferred Networks
 
SSII2020SS: グラフデータでも深層学習 〜 Graph Neural Networks 入門 〜
SSII2020SS: グラフデータでも深層学習 〜 Graph Neural Networks 入門 〜SSII2020SS: グラフデータでも深層学習 〜 Graph Neural Networks 入門 〜
SSII2020SS: グラフデータでも深層学習 〜 Graph Neural Networks 入門 〜
SSII
 
勾配ブースティングの基礎と最新の動向 (MIRU2020 Tutorial)
勾配ブースティングの基礎と最新の動向 (MIRU2020 Tutorial)勾配ブースティングの基礎と最新の動向 (MIRU2020 Tutorial)
勾配ブースティングの基礎と最新の動向 (MIRU2020 Tutorial)
RyuichiKanoh
 
レコメンドエンジン作成コンテストの勝ち方
レコメンドエンジン作成コンテストの勝ち方レコメンドエンジン作成コンテストの勝ち方
レコメンドエンジン作成コンテストの勝ち方
Shun Nukui
 
【DL輪読会】Scaling Laws for Neural Language Models
【DL輪読会】Scaling Laws for Neural Language Models【DL輪読会】Scaling Laws for Neural Language Models
【DL輪読会】Scaling Laws for Neural Language Models
Deep Learning JP
 
backbone としての timm 入門
backbone としての timm 入門backbone としての timm 入門
backbone としての timm 入門
Takuji Tahara
 
最近のKaggleに学ぶテーブルデータの特徴量エンジニアリング
最近のKaggleに学ぶテーブルデータの特徴量エンジニアリング最近のKaggleに学ぶテーブルデータの特徴量エンジニアリング
最近のKaggleに学ぶテーブルデータの特徴量エンジニアリング
mlm_kansai
 
最新リリース:Optuna V3の全て - 2022/12/10 Optuna Meetup #2
最新リリース:Optuna V3の全て - 2022/12/10 Optuna Meetup #2最新リリース:Optuna V3の全て - 2022/12/10 Optuna Meetup #2
最新リリース:Optuna V3の全て - 2022/12/10 Optuna Meetup #2
Preferred Networks
 
機械学習のためのベイズ最適化入門
機械学習のためのベイズ最適化入門機械学習のためのベイズ最適化入門
機械学習のためのベイズ最適化入門
hoxo_m
 
【DL輪読会】ViT + Self Supervised Learningまとめ
【DL輪読会】ViT + Self Supervised Learningまとめ【DL輪読会】ViT + Self Supervised Learningまとめ
【DL輪読会】ViT + Self Supervised Learningまとめ
Deep Learning JP
 
最適化超入門
最適化超入門最適化超入門
最適化超入門
Takami Sato
 
【メタサーベイ】数式ドリブン教師あり学習
【メタサーベイ】数式ドリブン教師あり学習【メタサーベイ】数式ドリブン教師あり学習
【メタサーベイ】数式ドリブン教師あり学習
cvpaper. challenge
 
最近のDeep Learning (NLP) 界隈におけるAttention事情
最近のDeep Learning (NLP) 界隈におけるAttention事情最近のDeep Learning (NLP) 界隈におけるAttention事情
最近のDeep Learning (NLP) 界隈におけるAttention事情
Yuta Kikuchi
 
最適輸送入門
最適輸送入門最適輸送入門
最適輸送入門
joisino
 
【DL輪読会】EPro-PnP: Generalized End-to-End Probabilistic Perspective-n-Pointsfor...
【DL輪読会】EPro-PnP: Generalized End-to-End Probabilistic Perspective-n-Pointsfor...【DL輪読会】EPro-PnP: Generalized End-to-End Probabilistic Perspective-n-Pointsfor...
【DL輪読会】EPro-PnP: Generalized End-to-End Probabilistic Perspective-n-Pointsfor...
Deep Learning JP
 
XGBoostからNGBoostまで
XGBoostからNGBoostまでXGBoostからNGBoostまで
XGBoostからNGBoostまで
Tomoki Yoshida
 
学振特別研究員になるために~2023年度申請版
学振特別研究員になるために~2023年度申請版学振特別研究員になるために~2023年度申請版
学振特別研究員になるために~2023年度申請版
Masahito Ohue
 
PFP:材料探索のための汎用Neural Network Potential - 2021/10/4 QCMSR + DLAP共催
PFP:材料探索のための汎用Neural Network Potential - 2021/10/4 QCMSR + DLAP共催PFP:材料探索のための汎用Neural Network Potential - 2021/10/4 QCMSR + DLAP共催
PFP:材料探索のための汎用Neural Network Potential - 2021/10/4 QCMSR + DLAP共催
Preferred Networks
 
TalkingData AdTracking Fraud Detection Challenge (1st place solution)
TalkingData AdTracking  Fraud Detection Challenge (1st place solution)TalkingData AdTracking  Fraud Detection Challenge (1st place solution)
TalkingData AdTracking Fraud Detection Challenge (1st place solution)
Takanori Hayashi
 

What's hot (20)

SSII2022 [SS2] 少ないデータやラベルを効率的に活用する機械学習技術 〜 足りない情報をどのように補うか?〜
SSII2022 [SS2] 少ないデータやラベルを効率的に活用する機械学習技術 〜 足りない情報をどのように補うか?〜SSII2022 [SS2] 少ないデータやラベルを効率的に活用する機械学習技術 〜 足りない情報をどのように補うか?〜
SSII2022 [SS2] 少ないデータやラベルを効率的に活用する機械学習技術 〜 足りない情報をどのように補うか?〜
 
PyData.Tokyo Meetup #21 講演資料「Optuna ハイパーパラメータ最適化フレームワーク」太田 健
PyData.Tokyo Meetup #21 講演資料「Optuna ハイパーパラメータ最適化フレームワーク」太田 健PyData.Tokyo Meetup #21 講演資料「Optuna ハイパーパラメータ最適化フレームワーク」太田 健
PyData.Tokyo Meetup #21 講演資料「Optuna ハイパーパラメータ最適化フレームワーク」太田 健
 
SSII2020SS: グラフデータでも深層学習 〜 Graph Neural Networks 入門 〜
SSII2020SS: グラフデータでも深層学習 〜 Graph Neural Networks 入門 〜SSII2020SS: グラフデータでも深層学習 〜 Graph Neural Networks 入門 〜
SSII2020SS: グラフデータでも深層学習 〜 Graph Neural Networks 入門 〜
 
勾配ブースティングの基礎と最新の動向 (MIRU2020 Tutorial)
勾配ブースティングの基礎と最新の動向 (MIRU2020 Tutorial)勾配ブースティングの基礎と最新の動向 (MIRU2020 Tutorial)
勾配ブースティングの基礎と最新の動向 (MIRU2020 Tutorial)
 
レコメンドエンジン作成コンテストの勝ち方
レコメンドエンジン作成コンテストの勝ち方レコメンドエンジン作成コンテストの勝ち方
レコメンドエンジン作成コンテストの勝ち方
 
【DL輪読会】Scaling Laws for Neural Language Models
【DL輪読会】Scaling Laws for Neural Language Models【DL輪読会】Scaling Laws for Neural Language Models
【DL輪読会】Scaling Laws for Neural Language Models
 
backbone としての timm 入門
backbone としての timm 入門backbone としての timm 入門
backbone としての timm 入門
 
最近のKaggleに学ぶテーブルデータの特徴量エンジニアリング
最近のKaggleに学ぶテーブルデータの特徴量エンジニアリング最近のKaggleに学ぶテーブルデータの特徴量エンジニアリング
最近のKaggleに学ぶテーブルデータの特徴量エンジニアリング
 
最新リリース:Optuna V3の全て - 2022/12/10 Optuna Meetup #2
最新リリース:Optuna V3の全て - 2022/12/10 Optuna Meetup #2最新リリース:Optuna V3の全て - 2022/12/10 Optuna Meetup #2
最新リリース:Optuna V3の全て - 2022/12/10 Optuna Meetup #2
 
機械学習のためのベイズ最適化入門
機械学習のためのベイズ最適化入門機械学習のためのベイズ最適化入門
機械学習のためのベイズ最適化入門
 
【DL輪読会】ViT + Self Supervised Learningまとめ
【DL輪読会】ViT + Self Supervised Learningまとめ【DL輪読会】ViT + Self Supervised Learningまとめ
【DL輪読会】ViT + Self Supervised Learningまとめ
 
最適化超入門
最適化超入門最適化超入門
最適化超入門
 
【メタサーベイ】数式ドリブン教師あり学習
【メタサーベイ】数式ドリブン教師あり学習【メタサーベイ】数式ドリブン教師あり学習
【メタサーベイ】数式ドリブン教師あり学習
 
最近のDeep Learning (NLP) 界隈におけるAttention事情
最近のDeep Learning (NLP) 界隈におけるAttention事情最近のDeep Learning (NLP) 界隈におけるAttention事情
最近のDeep Learning (NLP) 界隈におけるAttention事情
 
最適輸送入門
最適輸送入門最適輸送入門
最適輸送入門
 
【DL輪読会】EPro-PnP: Generalized End-to-End Probabilistic Perspective-n-Pointsfor...
【DL輪読会】EPro-PnP: Generalized End-to-End Probabilistic Perspective-n-Pointsfor...【DL輪読会】EPro-PnP: Generalized End-to-End Probabilistic Perspective-n-Pointsfor...
【DL輪読会】EPro-PnP: Generalized End-to-End Probabilistic Perspective-n-Pointsfor...
 
XGBoostからNGBoostまで
XGBoostからNGBoostまでXGBoostからNGBoostまで
XGBoostからNGBoostまで
 
学振特別研究員になるために~2023年度申請版
学振特別研究員になるために~2023年度申請版学振特別研究員になるために~2023年度申請版
学振特別研究員になるために~2023年度申請版
 
PFP:材料探索のための汎用Neural Network Potential - 2021/10/4 QCMSR + DLAP共催
PFP:材料探索のための汎用Neural Network Potential - 2021/10/4 QCMSR + DLAP共催PFP:材料探索のための汎用Neural Network Potential - 2021/10/4 QCMSR + DLAP共催
PFP:材料探索のための汎用Neural Network Potential - 2021/10/4 QCMSR + DLAP共催
 
TalkingData AdTracking Fraud Detection Challenge (1st place solution)
TalkingData AdTracking  Fraud Detection Challenge (1st place solution)TalkingData AdTracking  Fraud Detection Challenge (1st place solution)
TalkingData AdTracking Fraud Detection Challenge (1st place solution)
 

Neko kin