対戦ゲームデータ分析甲子園

目指せ"Another" バトル優勝!

賞金: 100,000 参加ユーザー数: 606 3年以上前に終了

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した日時だけでなく、コメントも含む最終更新日も表示してほしい。いちいち開いて更新有無を確認するのがめんどうなので。。。

Icon12
TASSAN

1位おめでとうございます!
解法がずっと気になっていたので共有してくださりありがとうございます。

自分はTargetEncodingでスコアを改善させることができなかったのでとても参考になります。

コードを少し拝見しましたが、全体的に綺麗に整理されており、ただただ感心するばかりです...
自分はコードが汚くなってしまう傾向にあるので、hamano_tetsuoさんのコードをみて勉強させていただきます!

Icon13
hamano_tetsuo

コメントありがとうございますm(__)m
TargetEncodingは書籍「Kaggleで勝つデータ分析の技術」も参考にしながらコードを書いています。
Tassanさんの解法も読ませて頂きましたが、スプラトゥーン経験者ならではの特徴量作成がなされていて、とても興味深かったです(^^)/

Favicon
new user
コメントするには 新規登録 もしくは ログイン が必要です。