天色グラフィティ

技術ちっくなことを書きます

atmaCup #5に参加しました(Public2位→Private6位)

f:id:ejinote:20200606231048p:plain

先週土曜日から今週土曜日にかけて1週間、atma社が主催するatmaCup #5に初参戦しました。

結果はPublic2位からのPrivate6位で、残念ながらメダルは逃す結果となりました( ´•̥ו̥` )クヤシイ

個人的には短期間のコンペで複数のモデルを試し、最終的にエレガントっぽい解法を作れたので満足しています。メダルほしかったけどね!!!

2020-06-07追記:実装を公開しました!

github.com

問題概要

  • テーブルデータとスペクトルデータが与えられてとある現象が発生しているか否かを予測する2値分類問題
  • 負例の多いimbalanced data
  • 評価指標はPrecision-Recall CurveのAUC
  • LightGBMもニューラルネットも同じくらいのスコアが出る(良問!)

解法

共通部分

  • スペクトルにはscipyのSavitzky-Golay Filteringをかけた
  • Savitzky-Golay Filteringをかける際にn次微分を算出し、それを新たなスペクトルとしてデータ拡張した

LightGBM

  • テーブル部分は特に凝った特徴量作成はしていない
  • スペクトル部分は、スペクトルをn次微分したものに対して集約をかけて特徴量を作成
  • パラメータは温かみのある手動調節
  • optunaのLightGBMTunerCVがコンペ中にリリースされ、意気揚々と試したが今回はworkしなかった

NN

  • テーブル部分をMLPに通し、スペクトル部分をConv1Dに通し、concatして予測
  • テーブル部分
    • LightGBMのときに作った特徴をrankgaussにかけた
  • スペクトル部分
    • スペクトルの微分をチャネル方向に追加した
    • 大きめのkernel_sizeが効いた
    • 複数のkernel_sizeでConv1D→BatchNorm→ReLU→Dropout→GlobalMaxPoolしたものをconcatした

バリデーション

GroupKFoldとStratifiedKFoldを試した。CVとLBの動きに相関が取れていたStratifiedKFoldを採用した。

アンサンブル

OOFを見ながらLGBM:NN=0.25:0.75でrank averageした。爆死した。

コンペ中の動き

序盤(初日〜2日目)

微分が絶対に効くというのは最初から確信していたので、微分×ピーク周りの集約で特徴量を作り、LightGBMにかけた。

結果、早い段階でPublic 1位になり、スタートダッシュ完了。

しばらく同僚のtakuokoさんとshimacosくんとのデッドヒートを楽しむ。

中盤(3日目〜7日目)

平日で仕事があったためあまり時間を割けず、LightGBMの特徴量を機械的に作ろうと考えた。 tsfreshを利用して網羅的に特徴生成をしたあと、Null Importanceに基づいて特徴を削った。しかし、微分×ピーク特徴に全く勝てず、LB上の進捗はなし。

水曜日は有給をとって特徴量をちびちび手作りしていたが、これも効果なし。

悲しくなってオートチェスに逃げたが、オートチェスでも惨敗したので泣く泣くatmaCupに帰ってくる。

終盤(締切前日〜最終日)

DiscussionでNNが強いという噂を聞き、NNを作ろうと考える。

微分が効くのが分かっていたため、スペクトルの微分をチャネル方向に加え、Conv1Dに通すシンプルなモデルを作成。9位くらいに帰ってくる。

kernel_sizeを大きくして、複数のkernel_sizeを並列すると良いことに気づき、5位に進捗。

作っておいたLightGBMとアンサンブルして2位に。

結果、shakedownして6位に。悲しみを背負う。NN single modelで出していたらprivate2位だった(なおこいつはCVはそんなに良くなかったので、たぶんどう頑張っても選べなかった)

感想

工夫のしがいがあるとてもよいコンペで、atmaCup初参戦ながらとても楽しめました。最近はあまりKaggleには触れていないのですが、データ分析コンペの感覚も少し取り戻すことができました。

面白い問題を用意し、コンペサイトのUIアップデートを含めて1週間コンペを盛り上げ続けてくださった運営の方々、本当にありがとうございました!

LBでいっしょにデッドヒートを繰り広げたみなさま、楽しかったです。入賞されたみなさま、おめでとうございます。次は負けないぞ〜〜〜

以上!