cha_kabu
コンペに参加された皆様、お疲れさまでした。 また、運営の皆様、トピックで情報共有くださった皆様、ありがとうございました。 自分用メモを少し改定したもので伝わりづらい点もあるかと思いますが、ご参考になればと思い投稿させて頂きます。
LGBMのみ。
lobby-mode(ガチ/レギュラー)でモデルを分けた。modeやrankでモデルを分けることも試みたが、CVもLBも大差は無かったが下がったのでやめた。
2000ほど特徴量を作り、そこから使用する特徴量を組み替えたものを3つアンサンブル(重み同じで多数決)した。
feature importanceの違いはあるが、null importanceを見るとほとんどの特徴量が除外候補になっていまい、非常に迷った。 おそらく、使用した特徴量(ほとんどTarget Encoding)のせいだと思うが、0.5に近い特徴量ばかりだったのでランダム分割と大差がなかったため?
結局、2000ほど特徴量を作成したが、各種重要度は気にせず、直感的に勝敗に影響するものや冗長にならないように100以下程度まで手動で選択したもののほうが精度が良かった。
直感的には重要と思われたが、subweaponやspecial、One hot特徴量も除いた方が精度が高かった(残した他の特徴量との組み合わせによる)。subweaponやspecialについてはブキ本体にも情報が含まれるのでoverfitしてしまう?One hotはパラメータとの兼ね合い?
どこまで減らせるか試したが、6特徴量でも0.553までは精度が出た。 (チームトータルレベル比、チーム平均射程比、カテゴリ2の勝率乗算、ブキの勝率乗算、lobby-mode、stage)
汎用性を意識しつつ、CV/LBを見ながら手動で調整。基本は以下。
params = {
"objective": "binary",
"metric": "binary_logloss",
"boosting_type": "gbdt",
"num_iterations": 1000,
"max_bin": 255,
"learning_rate": 0.01,
"num_leaves": 31,
"max_depth": 5,
"min_sum_hessian_in_leaf": 1,
"lambda_l1": 0,
"lambda_l2": 1,
"subsample":0.9,
"colsample_bytree":0.9
}
最初は単純なKFold(5-Fold)でやっていたが、LBとCVが全然相関しなかった。 特徴量の作り方(Target Encodingが多め)のせいも大きいと思うが、trainとtestで勝率が異なっていた?
最終的に、CV/LBを見ながらFold数は4、SEEDを複数個用いることで比較的安定した。
トピック で指摘したところ別々の対戦とのことだったが、ほとんどの試合結果は同じものだった。trainとtestを跨いで、Aチームと Bチームの入れ替えも含めて見ると(Bチーム側にもA1にあたるプレイヤーがいた?)約200ほど同じ組み合わせの試合があった。
勝敗が異なるものもあるので実際に別々の試合だった可能性が高いが、別々の試合だったとしても同じ組み合わせなら同じ結果になる可能性が高いだろうと考え、予測結果に関わらずtrainで結果が見えている勝敗で上書きしたところ、LBが上がったので採用することにした。
Public:0.566549(13th)
Private:0.563914(10th) ※Publicと別モデル