~第2章~ 絶望! Rコンペ 編

(前回までのあらすじ)
hmdhmdは初めて参加したkaggleコンペ2つで銀メダルを獲得し、「kaggle master、案外簡単になれるのでは?」と調子に乗っていたが…

Home creditコンペで勢いづいた私は、Google Analytics Customer Revenue Predictionコンぺに参加することにしました(Rstudioがスポンサーについており、通称Rコンペと呼ばれていました)。内容は、顧客のGoogleStore上のアクセスログから、購入金額を予測するというものでした。

Home Creditコンペを経てある程度思ったことが実装できるようになると、今度はいかに高速に試行錯誤できるか、というのが気になってきました。

そのためには、下記の2パターンがあります

①物理的に時間をつくる
②コードを変更して時間を節約する

①は、寝ない、食べない(*1)というのが王道です(半分冗談ですが、半分本当です)。

②については、並列処理やライブラリの見直しを行いました。並列処理についてはそのままで、joblibなどでマルチプロセスで処理しました。ライブラリについては、時系列データなので差分をとる処理をよく行っていたのですが、同じsklearn内でも下記のようなことがありました。

# groupby.diff を使うと遅い
diff_y = df.groupby['x']['y'].diff(1)

# groupby.shift させて差分をとったほうが早い
shift_y = df.groupby['x']['y'].shift(1)
diff_y = df['y'] - shift_y

また、それまではGoogle colab上で作業していたのですが、GCPのクラウドインスタンス(*2)に替えることで、メモリエラーの心配をせずに済むようになりました。

やらかした運営

そんなこんなで、最初は戸惑いもなく取り組んでいったのですが…CVとLBが思うように連動しません。逆に、「これでスコア上がるわけないよな・・・」とサブミットしたものが上がったりしていました。

discussionでも、実は評価指標に誤りがあるのではないか・・・つまり運営はsum(log)だといっているが、実際はlog(sum)なのではないか、という議論がなされていました。が、運営は「sum(log)で間違いない」と断言したため、謎は深まるばかりでした。

が、その断言から10日程度経過すると、突然リーダーボードの順位が滅茶苦茶に動き始めました。そしてdiscussionには運営が立てたスレッドが・・・「やっぱりlog(sum)が正しかったわ、リーダーボードも再調整したわ、すまんな」(意訳)というものでした。しかもあろうことか、「影響範囲は小さいから大丈夫やろ」(意訳)といらんことを言ってしまったため、kagglerたちに大いに叩かれていました。(そのあとは、しっかり謝罪していましたが・・・)

というわけで、指標を新たに、コンペが再スタートしました。私もこの運営はやばいかもしれないと思いながらも、コードを修正してとりあえずサブミットしてみると、なんとLB1位を獲得してしまったのです!

あくまでpublicLBですが、それでも1位というのは気分が良かったので、調子に乗っていた私はコンペを続けることにしました。(結果から見れば、ここで辞めておけばよかったのですが・・・)

Xデー到来

その後も、1位からは順位は落ちましたが、金メダルは狙えるであろうところで踏ん張っていました。
そして「このままいけば、kaggle masterになれるのでは・・・」という考えが現実味を帯びてきたある日の朝、リーダーボードを見た私の顔は青ざめました。
1位の人が異次元に良いスコアを叩きだしていたのです! 

ま さ か の L E A K 

Googleアナリティクスのデモアカウントから拾えるデータに、testデータと同じものが混じっていたのでした。かくしてコンペはリスタートして別物になってしまい、意気消沈した私は撤退することになりました・・・。

hmdhmdは、
・時間を効率的に使う方法を考えるようになった!
・GCPの使い方を身につけた!
・kaggle masterには、そう簡単にはなれなかった!

次回、~第3章~ 共闘! PLAsTiCC 編 に続く

*1 例えば食事を完全食グミに替えることで、食事の時間を大幅に削減することができます

*2 最初は3万円の無料クーポンが配布されるので、余程インスタンスを立てすぎたりしなければ、しばらく無料で使えます。AWSでも良いですが、環境にお困りの方は是非クラウドを使ってみてください

この記事が気に入ったらサポートをしてみませんか?