Kaggleで行われていたcriteoのDisplay Advertising Challengeが終了し,最終的にPublic LB:0.47880,Private LB:0.47831の354th/718だった.1位のチームが0.44464,Top10あたりが0.44台のスコアを叩き出しているので,結果としては惨敗だけれども,初めてにしては健闘できたほうだと思う.まあ最初の方はLogistic regressionのBenchmarkすら越せなくて厳しい状態だったが,そこから抜けだしてある程度成果が出始めると,あとは計算してはサブミットしてを繰り返しスコアに一喜一憂するという感じで競技性があって非常に楽しめた.次はもっと上の方に行きたいと思いつつ,現在参加しているAfrica Soil Property Prediction Challengeは一時期10位圏内まで行ったもののそこから怒涛のランク落ちで現在300位くらいまで下がってしまったので,世間は厳しい.Kaggle Masterへの道はまだまだ遠い.

予測方法

さて,こんな中途半端な順位のヤツの解法なんて見てもどうしょうもないとは思うけれども,個人的な記録のためにも書いておく.

使用したのはVowpal Wabbit(VW).主に参考にしたのはMLWaveのPredicting CTR with online machine learningで,とりあえず動くコードの例があって,あとはVWのパラメータチューニングで頑張ったという流れ.実はこれ以前にscikit-learn + pandasも試していたのだけれども,あまりにデータ量が多すぎてpandasのget_dummiesでダミー変数作るのが不可能だったりと早々に諦めていた.その点VWは高速で動いてメモリ消費量も少ないので,初心者にとっては使いやすいソフトウェアだった.あとMLWave/kaggle-criteoでデータ形式の変換コードがあったのが助かった.

さて,最終的なサブミットに使用したのは以下のパラメータ.

  • 損失関数(–loss_function):logistic
  • Feature Hashingのbit数(-b):30
  • L2正則化(–l2): 1e-08
  • データのイテレーション回数(–passes):10

少し前の記事の私的Vowpal Wabbitまとめ - Wolfeyes Bioinformatics betaにも書いたけど,loss_functionはlogisticにしておくと学習が終わったときにだいたいのスコアがわかって便利.あと-bを増やすとfeature hashingでcollisionしなくなるけれども,そのかわり必要なメモリ容量が増える.L2正則化はL1とともに1e-01から1e-12くらいまで試したんだけど,スコアが劇的に変わるわけではなかった.–passesは必須だけど,ある程度のイテレーション回数でスコアに変動がなければ途中で切られるみたいなので,パラメータを変更後に必要回数を確認してからは変えていない.

1
2
$ vw click.train.vw -f click.model.b30.pass10.l2_1e-08.vw --loss_function logistic -c -k -b 30 --passes 10 --l2 0.00000001
$ vw click.test.vw -t -i click.model.b30.pass10.l2_1e-08.vw -p click.preds.b30.pass10.l2_1e-08.vw

感想戦

Kaggleのフォーラムで上位ランクの人が自分の解析方法を公開してくれているので,その中からVWに関するトピックを幾つか拾ってみる.

まずは,15thのLuca MassaronがVWを使った解析例を示してくれている(link).VWのコマンドは非常に参考になるし,自分もNNのHidden Unitsを10とか20でやったんだけどなーと思いつつ,何よりもまずデータの前処理の必要性を感じた.

あとは19thのKonrad BanachewiczはVWのより詳細な結果を示してくれていて(link),こっちではNNが効かないみたいな話があったり,quadratic feature頑張ってたり.

あとはLibFMとかNNとかAutoencoderとか色々な方法で予測している人がいて,非常に参考になる.

今後のCriteo Display Advertising Challengeの動向

Kaggleでのコンペは終わってしまったが,上に書いたようなフォーラムでの議論は続くし,それにコンペ用のデータセットが学術向けに公開された.これでもしかしたら上位ランクのグループの成果が論文として出てくるかもしれない.

あと,Criteoの資料によると”Winners will release code publicly(Popular OSI-approved license)”らしいので,ぜひともコードを公開してほしいところ.

といった感じで,まだまだCriteo Display Advertising Challengeは終わらない.

追記: