ふかふかブログ

興味のあることについてゆる~く書きます

スプラコンペを雑に振り返る

スプラコンペとは

ProbSpaceで開催されたスプラトゥーンの勝敗を予測するコンペで2020/8/19~2020/10/18にわたり開催されました。 利用できるデータは、ブキ・ルール・ランクなど試合が始まる前のデータのみ(試合中のキル・デス数などは利用できない)。 prob.space

個人的な振り返り

テーブルデータを触るのがほぼ初めてだったので初めの提出に一苦労しました。予測精度55-56%当たりからほぼ精度が上がらずそこからは放置...。

自分の最終的な順位はCatboostで予測した55%で71/288位、思っていたより良かった。ちなみに1位の方は58%の予測精度でした。

スプラトゥーン2を2000時間程度やっている身からしても予測精度が60%いかないと考えていたので概ね想定通り。

時間がなくて取り組めなかったものとしては、

  • NNでの予測
  • train/testのリーク確認
  • データ水増し

がありました。

おそらく効いたであろう特徴量

興味深いトピック

今回のデータを使って気になるデータを計算してみた

※ データ数が少なく実際の統計値とは大きく外れている可能性があります。気になる人は自分で計算してみよう! 真面目に見たい場合はstat.inkさんなどのサイトをお勧めします。

ロングブラスターとL3リールガンDの勝率比較

  • ロングブラスター

    • エリアの勝率: 43.09%
    • アサリの勝率: 49.01%
    • ヤグラの勝率: 49.17%
    • ホコの勝率: 47.56%
    • ナワバリの勝率: 47.10%
  • L3リールガンD

    • エリアの勝率: 51.56%
    • アサリの勝率: 57.96%
    • ヤグラの勝率: 54.95%
    • ホコの勝率: 54.33%
    • ナワバリの勝率: 60.53%
  • ソイチューバー

    • エリアの勝率: 37.93%
    • アサリの勝率: 36.36%
    • ヤグラの勝率: 42.11%
    • ホコの勝率: 42.59%
    • ナワバリの勝率: 45.71%

こんな感じで計算

def win_rate(df, weapon_key):
  A_ = df.loc[(df["A1-weapon"] == weapon_key) |
              (df["A2-weapon"] == weapon_key) |
              (df["A3-weapon"] == weapon_key) |
              (df["A4-weapon"] == weapon_key), ["y"]]
  A_win = A_.loc[A_["y"] == 1]  # y=1のときAの勝利

  B_ = df.loc[(df["B1-weapon"] == weapon_key) |
              (df["B2-weapon"] == weapon_key) |
              (df["B3-weapon"] == weapon_key) |
              (df["B4-weapon"] == weapon_key), ["y"]]
  B_win = B_[B_["y"] == 0]  # y=0のときBの勝利

  return (len(A_win) + len(B_win)) / (len(A_) + len(B_))