TOC
コンペ概要
選手とボールの座標情報の軌跡からバスケのあるプレイがスクリーンプレイかどうかを予測するコンペ。
https://competitions.codalab.org/competitions/23905
データ概要
スクリーンのユーザーとスクリーナー、ユーザーのディフェンス、ボールの座標情報が25fpsで提供されている。座標情報は SportVU というトラッキングシステムを利用して計測されている。
特徴量
自分は以下のような特徴量を考えて、プレイごとに平均値や最小値、前フレームとの差分等を集計した。
- 各選手間の距離
- スクリーンプレイが発生すると選手間の距離は小さくなる傾向があるため。
- 各選手とバスケットゴールの距離
- スクリーンプレイが発生するとバスケットゴールに向かう傾向があるため(と思ったけどそうでもない気がする)。
- 3選手の面積
- スクリーンプレイが発生すると選手間の距離は小さくなる傾向があるため。
- 各選手間のコサイン類似度
- スクリーンプレイが発生するとスクリナーとディフェンスは逆方向に動く傾向があるため。
モデル
- LightGBM Optuna
- metric AUC
- 10folds StratifiedKFold
- optimize threshold
- ref. Kaggleコード遺産
可視化
BasketballAnalyzeR を参考にNBAコートを matplotlib で描画するコードを自作した(DrawNBACourt)。matplotlib animation を利用して gif 化すると選手の軌跡がよく分かった。以下に正例と負例を書いてみる。
- red circle: screen user
- orange circle: screener
- blue cross: screen user's defender
- black star: ball
上の正例を見てみると おそらくスクリナーがユーザーがボールを受けやすいようにオフボールスクリーンをしていることが確認できる。
また、下の負例を見ると スクリナー(とされている選手)のシュートフェイクでディフェンスを飛ばせ、ユーザー(とされている選手)にパスを出しシュートを打たせているように見える。
1位解法
「Basketball Behavior Challenge BBC2020」で4チーム中1位に - u++の備忘録
自分との差分だなと思ったのは以下。
- tsfresh
- 1dcnn
- ensemble
atma-cup #5 での経験を上手く利用したとのことでした。シングルモデルでの Public における性能はほぼ同等だったように思われましたが、アンサンブルで大きく底上げしたようです。自分はうまくアンサンブルを上手く機能させることができず、シングルモデルのままだったところで大きく差がついたのかなと考えています。その他、細かいけど重要な部分で差がついていそうな気がするのでコードを追ってみようと思います。