Kaggle Days Tokyo 参加記録

12月11日、12日に六本木のGoogle Japanにて開催されたKaggle Days Tokyoに参加してきました。
諸事情により、2日目の午後には帰宅しなければならなかったのですが、大変学びが多く、良い経験になりました。
簡単に内容と感想を残しておきます。

 

1日目

PresentationとWorkshopが同時進行で開催されていました。
私はPresentationのみの参加だったので、こちらについて振り返ります。

 

「Levelling-up Kaggle Competitions」 Ben Hamner, Kaggle CTO

Kaggle CTOのBenさんによる、Kaggleの歴史と今後についての発表でした。
Kaggleが設立されたのは2010年で、当初のコンペで用いられていた手法の主流はRandom Forestだったそうです。
今でこそよく用いられている、GBDT(Gradient Boosting Dicision Tree)や、DNN(Deep Neural Network)が主流になるよりも前にKaggleが存在していたとは驚きでした。
メモリや実行時間に制限が設けられているCode Competitionは、実世界でも有効で、今後増えていくそうです。
また、今後強化学習のコンペも始める予定とのことでした。

 

「Essential techniques for tabular competition」 Kazuki Onodera

Kaggle Grand MasterのOnoderaさんによるテーブルコンペの取り組み方についての発表でした。
始めにデータを見るときは、以下を行うそうです。

  • 統計量を見る(特にnull countやnumber of uniques等が重要)
  • trainとtestのtargetの分布を確認する
  • カテゴリのvar plotを行う
  • venn diagramを行う

その後、instacartコンペKDD Cup 2015、Home Creditコンペの解法の説明がありました。
当たり前ですが、モデルにとりあえず特徴量をぶち込むのではなく、データを丁寧に見て、どの特徴量が効くのか、なぜ効くのかを理解しながら進めることが非常に重要だということを再認識しました。

Onoderaさんの考えるKaggleのいいコンペランキングも発表されていたので、掲載しておきます。
1位:Instacart Market Basket Analysis
理由:列名がわかる(匿名化されていない)
   レコメンデーションは実世界でも役立つ問題設定
   metric(F1-score)を理解していないと良いスコアが出ない
   Augmentationができる

2位:PLAsTiCC Astronomical Classification
理由:testに比べ、trainが非常に少ない

3位:Otto Group Product Classification Challenge
理由:マルチクラスのアンサンブルの勉強になる
   (NNとXGBoostのアンサンブルが効くコンペだった)

 

 「Hosting Kuzushiji the Competition」Tarin Clanuwat

kuzushijiコンペのホストであるTarinさんによる、Kaggleコンペでのホストの取り組みについての発表でした。
賞金額設定の背景(上位は運次第なので、5位以上は賞金を同額にした)や、なぜPlaygroundのコンペにしたのか(リークが防げないため)等の説明がありました。
ホストをやりたいときに気を付けることは以下だとおっしゃってました。

  • ホスト側でベースラインモデルを用意する
  • 分かりやすいタスク、評価指標にする
  • 日本語話者かどうかに関わらず、だれでも参加できるようにする

「参加者の本気を引き出せるのがコンペのいいところ」という言葉が印象に残りました。

 

「Joining NN Competitions(for beginners)」 Tomohiko Takesako

Kaggle MasterのTakesakoさんによる初心者向け画像コンペへの取り組み方についての発表でした。
以下、気を付けることです。

  • まずはデータを見て飽きないことが大切
  • Baselineモデルはどこかのタイミングで自力で作れるようにする
  • Loss/Metric historyを見る、初期検討は10epochで切る
  • Augmentationはデータをよく見る
  • random seedは固定する
  • layerの改良ではなく、module単位で変更する方が効くことが多い
  • 論文をよく読む(すべて実装することは不可能なので、論文を読んで効く手法を試す)
  • discussion、notebookをよく読む
  • 画像データでもEDAは大切
  • 学習に時間がかかるので工夫が必要

画像コンペは何度か参加したのですが、notebook写経するくらいしかしていないかったので、次回参加するときは論文しっかり読んで、自力をつけたいと思いました。

 

「Imputation Strategy」 Yuji Hiramatsu

「Kaggleで勝つデータ分析技術」の著者の1人でもあるHiramatsuさんによる欠損値の扱い方についての発表でした。

 

MICE(多重代入法)を用いるときは欠損値かどうかの情報を加えることで、うまく予測モデルを立てることができるそうです。
XGBoostの場合は、下手に欠損値を埋めるよりも、欠損値のまま入力してあげた方が良い結果が出ることが多いそうです。
MICEはコストがかかるそうですが、一度使ってみたいと思いました。

 

「How to encode categorical features for GBDT」 Ryuji Sakata

こちらも「Kaggleで勝つデータ分析技術」の著者の1人でもあるSakataさんによるカテゴリカル特徴量の扱い方についての発表でした。

 

Target encodingは素晴らしいですよという内容でした。
Taraget encodingは取り扱いが少々面倒な印象でしたが、使い方をマスターしたいなと思いました。

 

「専業Kagglerの1年半 & LANL Earthquake Prediction 3rd place solution」 Hideki Murata

Murataさんによる専業Kagglerの生活とコンペの取り組み方についての発表でした。
以前は財務省勤務で、残業時間は多い時で月300h超だったそうです。
その後、金融庁に異動後、Kaggleにはまり、専業Kagglerになったそうです。
妻、子どもがいてその決断ができるのはすごすぎます。
その後、地震コンペの解法についてのご紹介がありました。
一般的にリークしていると面白くない、意味がないと言われがちですが、リークが起こっていてもしっかりと戦略をたて、様々実験するのは面白いなと思いました。

 

「Intro to BigQuery ML for Kagglers」 Polong Lin

PolongさんのBQMLについての発表でした。
BQMLでパイプラインや予測モデルの作成ができ、Kaggle notebookでも連携できるそうです。
資料があれば再度復習したいと思ったのですが、ぱっと調べても当日の発表資料は出てこなかったので、後日自分で調べて試してみようと思います。

 

「Feature Engineering Techniques & GBDT implementation」 Daisuke Kadowaki

こちらもKaggle本著者の一人であるKadowakiさんによるカテゴリ特徴のエンジニアリングと、GBDTの実装についての発表でした。

 

XGBoostをごりごり実装してみたとおっしゃってました。
以下Python版とCython版のソースコードです。

www.kaggle.com

 

www.kaggle.com

 中身の細かい部分は理解できていないので、コードを見て勉強したいと思います。

 

「ML Modeling with Auto ML Tables」T-n-Yun Ho & Da Huang

Google CloudのAutoML Tablesについての発表でした。
簡単にベースラインモデルが作れる、AutoMLの出力結果から得られる知見もあるといったところが利点のようです。

 

「My Journey to Grandmaster: Success & Failure」 Jin Zhan

 JinさんのGrandmasterになるまでの道のりについての発表でした。

 

過去に取り組んだ様々なコンペの解法についてを説明いただきました。
本人はShake down特性があるとおっしゃられていましたが、それでも十分な実績です。
アンサンブルが好みのようで、Stackingをよく使用するとのことでした。

 

「How to succeed in code (kernel) competitions」 Dmitry Gordeev

The Zooの一員であるDmitryさんの発表でした。
メモリ、計算時間に制約のあるCode Competitionでの戦い方についてご紹介いただきました。

 

2日目

オフラインコンペティションが開催されました。
冒頭にも書きましたが、途中で帰宅しなければならなかったので、今回はオフラインコンペの空気を味わうのみで、不完全燃焼に終わりました。
ただ、最後までいても上位争いは無理だろうなという感覚を抱きました。
というのも、データ分析の経験が浅く、どの手法や特徴が効くのかわからない、EDAが定型化されていない等で、初手にかなり時間がとられてしまいました。
自分自身がいかに時間で解決していたのかということを身をもって体験できました。

 

強い人たちに追いつき追い越すのは並大抵のことではないですが、一歩一歩積み上げて成長していければと思っております。
今回様々な情報を得ることができたので、これからいろいろと試していきたいです。