DSB2019 2nd solution まとめ

はじめに

DSB 2019 の 2nd solution まとめました。

結論

  • 思いついたアイデアもあったけど、word2vecによるfeatureやMeta Featureといった全く思いつかないのもあったので、おもしろかったし勉強になった。
  • 1st solutionでもあったけど、null importance によるfeature selectionはちゃんと覚えておいた方がよさそう。

以下、solutionまとめ

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

Results

  • public score: 0.563
  • private score: 0.563
    • *publicとprivate一緒なのすごくない?local cvのscoreが気になる。

Feature Engineering

Word2Vec features of title series

  • targetであるassessmentまでの科目のseries(historyと一緒?)をdocumentとみなすと、これらをword2vecとして処理でき、取得したベクトルから mean/std/max/minを計算した。
    • *全く発想になかったので面白い。本当にこんなことしていいのって感じもする笑

Historical feature

  • world(all, treetop, magma, crystal)でgroupby してsession, world, types, title, event_id, event_code を countした.
  • Count, mean, max of (event_round, game_time, event_count).
    • *この辺はやったけど、あんまり利かなかった気がしたんだよなぁ(なお、CV)。

Decayed historical feature

  • 直訳すると減衰させたhistorical feature (title, type, world, event_id, event_code).
  • 各セッションで history の蓄積を半分に減少させた。
    • *最近のデータに重みづけをしているということだと思う。
    • *似たようなことをやったけど、どのくらい減衰させるかは決めかねた。(なお)

Density of historical feature

  • historical data の頻度(密度) (title, type, world, event_id, event_code).
  • Density = (count) / (開始してからの経過時間).
    • *これも似たようなことをやったけど、なぜか各カウントに対して行うって発想がなくて、全体のカウントに対してしかやらなかった。

Lagged Assessment

  • num_correct, num_incorrect, accuracy, accuracy_group.の mean/std/...等
    • *これらのラグ特徴量を作ったってことかな。
  • 過去のassessmentからのどのくらい時間がたったか。
  • 評価回数あたりの特徴量(?)

Meta Features

  • 「事前のgame_sessionがどのような評価結果をもたらすか」を示すために、各assessment titleに対し、meta target featuresを作成した。
  • train dataにはout of foldを用い、testやmeta targetのような他のデータにはKFold averageを用いた。
    • *要はtarget encodingみたいなことをしているってのはわかる。
    • *どうやら、過去のgame sessionのデータに各assessments titleごとの今の評価結果をtargetとしていれて、out of foldでそれを予測してあげて、その予測値の平均をmeta feature として用いるといったことをしているみたい(画像のコピペはなんとなく避けました)。
      • *なんとなく、leakしそうな感じするんだけど、うまくいくんだなぁ。

Feature Selection

  • Delete duplicate columns.
  • Delete high-correlated columns (over 0.99).
  • null importanceで top 300 のscoreのfeatureを用いた.
    • *1st solution でもそうだったけど、2nd solution null importanceが使われている。

Modeling

  • validation setではuserごとに、1件づつsampleするようにした。
    • *あれ?地味にこうなってなかったかもしれない。
  • Stratified Group K Fold, 5-fold.
    • *これは一緒
  • RSA (5 random seed) of LGB, CB, and NN.
    • *LGB, NNはやってる。CBはやってないけど、kNNをやった。

Post Processing

  • Ensemble = 0.5 * LGB + 0.2 * CB + 0.3 * NN.
    • *自分もensemble したけど、scoreが伸びなかったので、lgbのみだった。
  • cv の qwkが高くなるようにthresholdを決めた。
    • *threshold は初めにoptunaかなんかで決めたけど、なんかそこ以外のところに原因があると思ったので、途中からは、途中で決めた数字をとりあえず使ってた。