1st place solution
ProbSpace運営の方々、本コンペを開催して下さり、誠にありがとうございました。
また、参加者の皆様、お疲れ様です。
About me
某メーカーで、主にNLPの仕事をしています。
なお、スプラトゥーンは一回もプレイしたことは有りません(^^;
Model
LightGBMをメインに開発を進めました。Catboostもサブ的に使いました。
LightGBMはoreginさんのコードをベースにしました。
https://prob.space/competitions/game_winner/discussions/Oregin-Post344b005eb605a8777141
XGBoost、NN(ごくごくシンプルなMLPの構成です)、Logistic回帰、RandomForestも試してみましたが、上の2つのスコアが良かったです。
Validation
train/testで期間や特徴量の分布を比較して、あまり大きな違いは無さそうだったので、特別なことは何もしていません。
データをshuffleして、KFoldで10分割しました。
Feature Engineering
メインはTargetEncoding&FrequencyEncodingです。
以下の様々な条件の組み合わせで、特徴量を機械的かつ大量に作成しました。
・複数の特徴量を組み合わせる weapon×stage×levelなど
・集計の単位を変える Playerごと、全Playerマージ、A1/A234/Bごと、など
・LevelをN分位点でビニングする
・Periodを適当な期間でビニングする 2Weekなど
また、masatoさんのコードをそのまま使って、推定したA1ユーザーIDも特徴量とし、集計に使いました。
https://prob.space/competitions/game_winner/discussions/masato8823-Postb93d4bc4fde321a8215b
さらに、チームごとに集計(max,min,mean,median)を行い、チーム間の差も特徴量にしました。
全PlayerマージしたTargetEncodingからスタートしましたが、
A1のみでTargetEncodingした特徴量を追加したタイミングと、
FrequencyEncodingを追加したタイミングで、大きくスコアが上がったように思います。
最終的なモデルのimportance上位を見ると、TargetEncodingのチーム間の差分系の特徴量が多く、
FrequencyEncodingや、A1だけに限定したEncodingがぽつぽつ入っている、といった感じです。
Feature Selection
モデルに投入&全Foldでimportance=0な特徴量を除く、の繰り返し。
Ensemble
特徴量選択過程のモデルも全て含めて、モデルの予測値を特徴量としてLogistic回帰。
さらにcoefが大きい順で特徴量選択も行いました。
LightGBM、Catboostの10個のモデルのアンサンブルがベストスコアでした。
Ensamble後のスコアがPrivateLB=0.580099
Ensamble前の個々のモデルでスコアがベストなものは、LightGBMでPrivateLB=0.579817
でした。
Hyper-parameter
中盤辺りで、OptunaのLightGBMTunerでチューニングしてみましたが、
LocalCVは良くなるものの、LBがあまり上がらなかったので、重視しませんでした。
終盤辺りで、LightGBM、Catboostを軽くGridSearchもしてみましたが、似たような傾向でした。
ベストスコアのモデルは、すべてデフォルトのパラメータのままです。
外部データ
CODE
https://github.com/hamano-tetsuo/splt
ついでに運営の方への要望
- 提出回数の回復は、現状の、提出から24時間後にライフが回復、よりも、決まった時間にリセット、の方がやりやすいなぁと思いました。コンペ終盤で無駄なくサブろうと思うと、どんどん生活リズムが後ろにずれてしまうので、少し辛いです。。。
- トピック一覧には、openした日時だけでなく、コメントも含む最終更新日も表示してほしい。いちいち開いて更新有無を確認するのがめんどうなので。。。