Google Research Football環境を利用した選手の行動分析
はじめに
この記事スポーツアナリティクス Advent Calendar 202016日目の記事になります。
この記事ではGoogle Researchが提供しているサッカーゲーム環境を使って選手の行動や試合の分析を行ってみたいと思います。これをやろうと思ったきっかけとしては、先月までkaggleで開催されていたサッカーゲームのコンペに参加しており、自由にデータを取得できるゲーム環境で分析をしてみたら面白いのでは?と思ったからです。コンペの内容については以下の記事で書いています。
それでは早速進めていきます。
概要
ゲーム環境の説明
今回はGoogle Research Footballというサッカーゲーム環境を利用しています。試合の様子はウイイレやFIFAとほとんど同じと考えてもらって大丈夫です。本ゲーム環境はAPIが用意されておりpipでinstall可能となっています。
詳細はGitHubをご覧ください。
試合の設定
試合設定についてご説明します。
1試合は前半1500steps、後半1500stepsの合計3000stepsから構成されています。アディショナルタイムはありません。
操作可能な選手はアクティブプレイヤーと呼ばれるボールに一番近い選手のみとなっています。これも通常のサッカーゲームと同じ仕様ですね。今回はこのアクティブプレイヤーをコンペで作成された2つのエージェントを持ってきて対戦させることで分析を行いたいと思います。なおこれは本ゲーム環境の特殊な点なのですが、前半後半でコートチェンジがありません。なので今後は両チームをそれぞれleftチーム, rightチームと呼ぶこととします。
選択可能な行動一覧
方向キー8個に加えてパス、シュートなど合計18種の行動が用意されています。詳細は以下。
試合の様子
leftチームとrightチームで10試合対戦してみた結果がこちらになります。
- | left team | right team | 勝ちチーム |
---|---|---|---|
1試合目 | 1 | 6 | right |
2試合目 | 3 | 3 | - |
3試合目 | 4 | 3 | left |
4試合目 | 1 | 3 | right |
5試合目 | 1 | 7 | right |
6試合目 | 1 | 7 | right |
7試合目 | 0 | 3 | right |
8試合目 | 2 | 7 | right |
9試合目 | 5 | 4 | left |
10試合目 | 1 | 6 | right |
総得点 | 19 | 49 | left:1 right:7 |
どうやらrightチームの方が強そうです。今回はこの試合の1試合目を対象に分析を行いたいと思います。今回の分析対象の試合の様子は以下のリンクから見れます。
分析
ここから本題の分析に移っていきたいと思います。
今回は以下の分析を行いたいと思います。
- 試合内容の分析
- ボールのトラッキング
- アクティブプレイヤーの行動分析
- 任意の選手の行動分析
試合内容の分析
まずは基本的な試合の内容に関して両チームで比較してみます。
rightチームの方がボール支配率やコーナーキックの回数が多いです。これらの結果が得点ともリンクしてそうです。
ボールトラッキング
次に試合中のボールの位置を可視化してみたいと思います。
ボールのトラッキング
ボール位置のヒートマップ
中央の動きが多くてサイドをめいいっぱい使った動きは少ないようですね。またボールは右コート側に多く存在していることが分かります。leftチームが攻めている、あるいはrightチームが自陣でボールを回していることが考えられます。また左コートでのみコーナーキックが起きていることも分かります。これは試合内容の分析とも一致しています。
アクティブプレイヤーの行動分析
アクティブプレイヤーがどのような行動をとっているかをみていきたいと思います。
アクティブプレイヤーの全行動の数を集計
(注意点:rightは両チーム攻め方向を表す)
左チーム 右チーム
どちらもsprint(ダッシュ)や移動行動(攻め方向であるright)が上位にあります。一見左チームの行動がバランスよく行動を選択しているように見えますが、3000回の内、shotを100回以上選択しているように、通常では考えられない数のシュート行動をとっていることから不要な箇所でシュート行動を選択してしまっていることも考えられます。
ただこの図は全18種類の行動で可視化していますが、idleやrelease_directionなどゲーム特有の行動がありノイズが多いです。また両チームdribbleが異常に小さいことが分かります。どうやらdribbleはここではうまくカウントされていないようです。
そこでここでは簡易的に攻めの方向に移動している行動(right, top_right, bottom_right)をdribbleとします。こうして作成したdribble特徴量と主要な行動であるsprint, sliding, shot, high pass, short pass, long passの7つに絞って以下のように可視化してみました。
どちらのチームもドリブルやスプリントが全体的に多めです。leftチーム(赤)はパス、シュート、スライディングがrightチームと比べると多いようです。一方rightチーム(青)はスプリントとドリブルがより多めのようです。このことからざっくりですがleftチームはパスで攻めるチーム、rightチームはドリブルで攻めるチームであることが予想されます。
任意の選手の行動
ここでは両チームのプレイヤーに関する動きを見ていきます。分析対象は両チームの10番の選手です。10番は本設定ではレフトミッドフォルダーとして定義されています。
10番トラッキング
10番の動きのヒートマップ
当たり前ですが、ポジションがレフトミッドフォルダーなのでどちらの選手も左側にいることが多いです。上では試合中の全ての動きをトラッキングしていますが、今度はボールを保有しているときの様子を見てみることにします。
ここではトラッキングデータとヒートマップを重ねて表示しています。ボール保有状態にするとデータ数と対象範囲がかなり小さくなったのが分かります。全ての動きを可視化したものと比べると、より真ん中のエリアでボールに触れていることが分かります。このことからボールはやはり中央部分に集まっており、ライン側を使った攻めは少ないことが考えられます。
その他行ったこと
- 走行距離
選手の座標記録から『走行距離』を算出しようとしたのですがおそらく計算ミスでうまく出せず諦めました。
- 疲労度評価
本ゲームにはプレイヤーごとに疲労度パラメータが割り振られているのでそれを可視化すると面白いと思ったのですが、どうやら試合が止まると疲労度が回復する仕様?になっていたので今回はぼつになりました。
- 特定のシナリオでの分析
本ゲーム環境には特定のシナリオからプレイを始める機能が備わっています。例えばコーナーキックやゴール前での3 vs 1などです。シナリオの種類は以下参照。
https://github.com/google-research/football/blob/master/gfootball/doc/scenarios.md
しかし人数が変わると今回使用しているagentの挙動がおかしくなってしまったので今回は見送りました。
おわりに
今回はサッカーゲームを用いて試合や選手の分析をしてみました。実際のサッカーの試合とはもちろん異なるところは多々あると思いますが、データが入手しやすい点からスポーツ分析の練習として良いのではないかと思いました。また今後このようなシミュレーション環境の性能が上がっていくと、ゲームを通して実際の試合の戦略を立てるといったこともあるのかなと思いました。
分析に用いたレポジトリ