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かなんかで決めたけど、なんかそこ以外のところに原因があると思ったので、途中からは、途中で決めた数字をとりあえず使ってた。