DSB2019 4th place solution まとめ

はじめに

DSB2019の4th place solutionまとめました。

結論

  • なんかすごく読みにくい英語だと思ったらロシアの人だった。
    • まぁ、自分も英語まともに書けないから言えないけど。
      • というか間違って訳しているかも...。
  • RNN(codeみたらBidirectional GRUっぽい)を用いているってところが肝なんだろうな。

以下、solutionまとめ

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

summary

  • best submitはNNのblending
    • private: 0.561
    • public: 0.571
  • second submitは3-levelのstacking
    • private: 0.560
    • public: 0.566
  • *stackingは、意外に使われないことおおいよね。

Some ideas first

  1. trainと同じ手順でラベルされたtest setは、trainに用いることができる。
  2. events sequenceのtfidf
    • それぞれのevent_idは、title + event_code + correct + incorrectであらわすことができる
    • その後、installation_idのhistoryをsequenceとして見て、それをtfidf化したものを学習する。
    • *学習前に上記変形を適用したってことかな?
      • *最初 actual sequenceのactualを「実際の」だと訳して、tfidf化する前のものかと思ったけど、「現実の」とか「現在の」みたいな使われ方なんだろうな
  3. いくつかのclipsとtitleはassesmentにおけるaccuracyの予想にとても重要である。おそらく、これらの順番はそれほど重要ではないが、RNNでは、user historyにおけるこれらをうまく扱うことができる。
    • *RNNは順番が重要だからじゃないのって思うけど...?
  4. 少量のデータしかないため、安定性は実際のスコアよりも重要である。もし、行を入れ替えるとスコアが悪くなるなら、それは何か間違ったことをしている
    • *うーん、しっくりこない。順番が大事なものと大事じゃないものがある気がするけど...。

Models

Neural network

tf-idf features + RNN (featureとしてtitle sequenceと以下を追加した。)

  1. 次元数7でのtitleの埋め込みベクトル
  2. 各titleにおけるcorrectの数
  3. 各titleにおけるincorrectの数
  4. 上記、2と3の比
  5. 各titleにおける経過時間のlog
  6. 前のtitleにおけるcorrectの数
  7. 前のtitleにおけるincorrectの数
    • *ラグ特徴量みたいにしたってことかな?
  8. 上記、7と6の比
  9. モデル内にcounterを含めたかったが、最終的に断念した。しかし、これらのモデルはprivate LBでよい結果をだした。
    • ほとんどのsingle networkは0.56程度であった。おもしろかったことは、privateとpublicのscoreが同じであったことである。
      • *あれ?最初に書かれているところでは、score微妙に違う気がするけど...?
    • *counterっていうのは、何のcounterのことなんだろう?
    • *2位の人も一緒だったけど、結構同じになる人もいるんだなぁ。

Tree based models

Lightgbm, Xgb, Catboost. (will be soonらしい)

Stack

  • 0 level) NN , lgbm, catboost.
  • 1st level) MLP, Lightgbm.
  • 2nd level) Ridge.
  • https://www.kaggle.com/c/data-science-bowl-2019/discussion/127312 から抜粋
    • 全てのモデルは回帰モデルで学習した。
    • 木系はtest dataを直接用いると悪く働く。
    • 以下は効果がなかった。
      • counters, assesment単体等のtfidf
      • world, succsessful attempts等

Validation

  • いろいろ考えたけど、結局sinpleなものを使用したよということらしい。
    • *普通のKFoldってことかな?

What doesn’t work for us

  • Transformers, GPT-2 , BERT, Graph NN.
    • *Graph NN やってみたい!
    • *とりあえず、BERTが適用できるか何らか試すっていうのは、いろんなタスクで行われるようになっている気がする。ちゃんと理解していると、うまく転用できるんだろうな。