Kaggle - 神々に近づくために

PyDataTokyoに触発されたので、Kaggleで上位を取るための戦略、そして神々に近づくための学習戦略を考えてみました。 kaggle master (自慢)ではありますが、kaggle歴は浅いので、いろんな突っ込みどころがあると思います。

1. 初参加 ~ top25%

  • まずはtitanicのtutorialを始めてみる
  • 終わったら、ちゃんとポイントのもらえる本番コンペに参加する

    • お遊びコンペだとなかなか気合いが入らないので(人によります)
    • いろんなコンペがあるが、とりあえず興味があるのに参加してみる

      • 無理そうならあきらめる
  • beat the benchmark(btb)というのがForumに出てくるので、まずはbeat the beat the benchmarkを目指す。これができればtop25%とか行けるのではなかろうか。

    • ツールの使い方を覚える良い機会
    • btbは特徴量をそんな真剣に作っていないと思うので、利く特徴量を1-3個作ればbeatできそう。(それが大変なのですが)
  • 基本の流れは、特徴量をくっつけてデータフレームを作る→ツールにぶっこむ。まずはxgboost。

2. top25% ~ top10%, top 10, kaggle master

以下のことを考えつつ、機械学習手法を覚えたり、特徴量作成技術を磨く。

  • 上位に行きやすいコンペを中心に参加する

    • 「なにかしら特殊で多くの人はどこかを間違えたりなにかが足りなかったりする問題を狙うといい」by nagadomiさん
    • 細かい精度を競う典型的な問題のコンペは神々たちの遊び場という説

  • 求められているタスクおよび評価基準を理解し、それに合致したアプローチをとることが重要。

    • 考えまくるのと、過去の優績者のドキュメントを見るしかないか
    • 時系列データに対して将来の値を予測に使うのは変だけど、使えるものは(ルールが許す限り)何でも使う心意気

  • train dataへのleakを逃さないことは重要
    Leakとは、本来は予測に使うことを想定していないけれど有用な情報の漏れ

    • Couponでは一部のtest couponのデータがvisit logに出ていた
    • KDD Cup 2015でも、leakyな特徴量がいくつか使われている
    • Caterpillarではtube ID自体が特徴量として有用だったそうな(kaggleちゃんと仕事しろ)
    • Forumをウォッチしましょう

  • public leaderboardへのleak

    • Couponではuserでpublic/privateが分割されているため、人気クーポンの情報が漏れ出る。
    • Caterpillarでは 同じtube IDで数量というパラメータが違うレコードがpublic/privateに分割されていたので、public LBの信頼度が高め (kaggleちゃんと仕事しろ)
    • わかっても使えなかったり、使いすぎて死亡することはあるが、local validationの妥当性を考察する上では役に立つ。

  • local validation

    • 問題によっては単純に分割するだけではダメ。train setがvalidation setの情報を持たないようにする。  

      • Caterpillarではtube IDごとに分けないとダメでした。
    • Couponなど、データ量によってはcrossさせる必要はないかも。
    • いまいちしっくりこないこともあるが、信頼できるlocal validationを持ってないと勝機は無さそう。

3. kaggle master ~ 神

特殊なコンペだけでなく、典型的でensembleが利くようなコンペでも上位に入れるレベル。
ここに至るには、KDD CUP 2015で優勝チームがやった成果の1/5くらいを出せるようになれば良いと考える。
過去問で点数を取れれば本番でも点数を取れるはず理論。

  • 手法・ツールの学習
    KDD CUP 2015優勝チームが使用している手法は以下の通り。あとはt-SNEなどの次元削減手法か。
    Gradient Boost Machine(Xgboost), Neural Network, Factorization Machine, Logistic Regression, Kernel Ridge Regression, Extreme Trees, Random Forest, K-Nearest Neighbor

  • 特徴量作成技術のレベルアップ
    過去の優績者のドキュメント・コードを見るしかなさそう。

  • 環境構築・パラメータ調整
    hyperoptなどで自動的にパラメータ調整を行う技術を身に着ける必要がありそう。さらに、AWSでスポットインスタンスなどを利用して格安に高速で回せるようになる必要もありそう。
    必要そうなツール全部入りのマシンイメージ(Local PC用 および AWS用)を整えておきたいところ。(誰か作って…)

  • ensemble技術
    基本のensemble手法のいくつかをマスターし、overfitしないようにensembleできるようになる。

  • チームメンバーになれる英語力とコミュ力
    むりぽ

Material

http://blog.kaggle.com/
kaggleのブログ。入賞者のインタビューはちゃんと読みたい。
http://blog.kaggle.com/2015/06/22/profiling-top-kagglers-owen-zhang-currently-1-in-the-world/
Owenへのインタビュー。言っていることがいちいち納得感がある。
http://www.slideshare.net/OwenZhang2/winning-data-science-competitions
Owenのスライド
http://people.inf.ethz.ch/jaggim/meetup/slides/ML-meetup-9-vonRohr-kaggle.pdf
Mattさんという人のスライド。わりとKaggleの戦い方がまとまっている。
https://speakerdeck.com/smly/techniques-tricks-for-data-mining-competitions
smlyさんの京大での講演資料
https://kddcup2015.com/information-winners.html
KDD CUPの入賞者スライドまとめ
http://mlwave.com/kaggle-ensembling-guide/
Ensembleの技法について

http://blog.kaggle.com/2015/07/27/crowdflower-winners-interview-1st-place-chenglong-chen/
https://github.com/ChenglongChen/Kaggle_CrowdFlower
CrowdFlowerコン1stのinterviewと、そのコード。hyperoptを活用して多数のモデルをぶん回しているようで、近々研究しようと思っています。

http://blog.kaggle.com/2015/09/22/caterpillar-winners-interview-1st-place-gilberto-josef-leustagos-mario/
キャタピラコン1stのinterview
http://blog.kaggle.com/2015/10/21/recruit-coupon-purchase-winners-interview-2nd-place-halla-yang/
クーポンコン2ndのinterview