DSB2019 3rd place solution まとめ

はじめに

DSB 3rd place solution まとめました。

結論

  • single transformerモデルであり、1位、2位とはまた違った解法をしている。
    • transformer使って何か試してみたいなぁ。
  • data augmentationは、テーブルだしと思って、自分はまったく考えなかったんだけど割とみんなやってる。

以下、solutionまとめ

  • 一時ソース
  • * 以下、拙訳ですので気になるところは1次ソースを見てね。

summary

  • input dataを理解するよりもinput data の構造にフォーカスをあてた。
  • つまり、feature engineering よりも dataにあったNNモデルを見つけることに注力した。

Interesting point

  • 何が面白かったかといえば、positionに関係する情報(特にposition embedding)を用いることがlocal CV scoreを低下させることである。
    • BERT, ALBERT, GPT2 モデルはうまく働かなかった。(これらのモデルには、position embeddingを含む)
  • だから、position embeddingを含まないTRANSFORMER を用いることにした。
  • *BERTとtransformerは論文読んでた気がするけど、position embeddingとか全然覚えてないや。要確認

Pre-processing

Aggregation by game_session

  • installation_id のsequenceは 長すぎて、(transformerに?)用いることができない。

    • だから、game_sessionによってlog_dataを集計した。
    • *コード略、inputの形としてこれでいいの?って感じする
  • NLP の LSTM と TRANSFORMER モデルはinput として単語のsequenceを受け取ります。同じように、ここではinputとしてgame_session(またはinstallation_id)のsequence用います。

Model

  • Best private score: 0.564 (Single transformer model)

ここでのkeyは、game_sessionからのembeddingの作り方である。

  • event_codeとかのcategoricalな値はそれぞれembeddingする。その時、その categorical vectorは、それぞれのembeddingをつなげることでできる。
  • 次に、nn.lenear layerは、categorical vectorの次元削減のために用いる。
  • 連続的な値は、直接linear layerでembeddingする。
    • 連続値の正規化には、np.log1pを用いた

hyper parameters(抜粋)

Modified loss function

  • このリンクでは、accuracy_groupの0と3のクラスは、とても似ていることが言及されている。そこで、新しいtargetを定義して、それに合うようにした。
    • *つまり、accuracy_groupの0と3が意外に似ており、qwkを用いることが悪く働きそうということらしい。
      • *accuracy groupは順序を持つ(カテゴリじゃない)けど、0と3が似ているという指摘は、1回やってあきらめても0だし、1000回やってから正解しても1なわけで、1000回やってから正解する人と1回しかやってない人どっちの方が3に近いかというと、1000回やったほうとは限らないということだと思う。
    • *そこで、target に 成功数(num_correct)と失敗数(num_incorect)を定義して、それを予測し、そこから新しぅaccuracy groupを算出しているみたい?
    • *いまいちよくわからなかったけど、そうすることで元のaccuracy groupを使うよりも改善したとのこと。

Additional training data generation

  • Game typeのgame_sessionの追加のラベルを生成した。
    • event dataのcrrect trueとcorrect falseから、num correctとnum_incorrectを作ることができた。そして同様に、accuracy groupを作ることができた。
    • 追加の学習データの数は41194件
  • *要は、Assesmentだけでなくて、Gameのデータから学習データを作ったということっぽい。

Pre-training and fine-tuning steps

  • 3 epoch までで、上記データを追加して学習し、それ以降ではoriginalのデータのみを使って学習した。
  • *画像系とかでは、こういうやり方よく見るよね。まぁ、NNだからってことなんだろうな。

Data Augmentation

  • training time augmentation: 30 行以上のgame_sessionを持つinstall_idでは、50%までrandomに古い行から削除した。
  • test time augmentation: 30 行以上のgame_sessionを持つinstallation_idでは、60%までrandomに古い行から削除した。
    • *このtrainとtestの割合の違いはなんなんだろう...?
      • *まぁ、いろいろためした結果ってことなんだろうけど。