Crowdsolvingに参加して7/42位だった

http://sucrose.hatenablog.com/entry/2013/04/19/001748
http://d.hatena.ne.jp/repose/20130419/1366375616

結果が微妙な上に既に上位陣が記事を書いているのでいまさらな感じもあるが記録として。
やってることそんなに変わらなかったなーという感想。

使用言語

Pythonのpandasとscikit-learnの両ライブラリで通した。
Rの方が慣れているんだけど、Pythonをがっつり勉強する良い機会なのでPythonしばりとした。
ただ、不均衡データの調整についてはRのDMwRライブラリのSMOTEを用いた(最終的には使わなかった)。
http://d.hatena.ne.jp/sfchaos/20111202/p1

特徴量

基本的にアクションカウント。月単位、曜日単位、時間単位等。アクションのバイグラムもとった。
特徴量が膨大になるので、以下を参考にしてGradientBoostingのImportanceで上位200位(閾値はいくつか試して決めた)をとってモデルを適用した。RandomForestのImportanceも試してみたがGradient Boostingの方がスコアが良かった。
http://blog.kaggle.com/2012/11/05/team-takes-3rd-in-the-merck-challenge/

モデル

最終的にGradientBoostingとRandomForestのstacking(いわゆる線形和)を用いた。RandomForestの代わりにExtraTreeを使ったりもしたが、手元のAUCは上がるものの提出時のスコアは下がったのでやめた。過学習してんのかなと思ってLassoに替えたりもしたけど今度は手元のAUCも提出時のスコアも下がったのでやめた。
悔やまれるのは、パラメータを定石に従ってグリッドサーチしなかったこと。いくつか適当に組み合わせてそんなに結果が変わらなかったので手を抜いてしまった。

その他

正解データが少ないので、不均衡を調整した方がいいかなと思いSMOTEを使ったりもしたけどGradientBoostingをそのまま使ったほうがはるかに結果が良かったのでやめた。
月単位でデータを分けて学習させたりもしたが全然ダメだった。

コンペ開始後、2週間くらいは試行錯誤の成果が現れて楽しかったがその後やればやるほど結果が悪くなっていきモチベーションを保つのが辛かった。
Pythonに慣れるためと割りきって色々試していたのでsubmitを続けられたように思う。結果ドリブンだったら無理だった。
あとあまり考えずに始めたのでコードと結果の管理が大変だった。