Xリーグ X1 AreaチームのオフェンスプレーをAIが予想してランキングしてみた

# はじめに
アサヒ飲料クラブチャレンジャーズでアナライジングスタッフをやっている中村です↓
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/297216/e2e7b41b-b538-545b-e633-57fd4f84903e.png)
スポーツ × AIでスポーツをもっと面白くしたいと思っている人です。
これはやってみた + アナライジングスタッフ募集の記事です。


# Xリーグとは？
アメリカンフットボールの社会人リーグです。
https://xleague.jp/

## アメリカンフットボール？
ボールを投げたり持って走ったりして、相手陣地に持ち込んで得点を競うスポーツです。
<img width="400" alt="アメリカンフットボール" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/297216/bf0207f0-193e-715a-088e-1beefced6d10.png">

### アナライジングスタッフから見た面白ポイント
- 戦略性が高いスポーツ
- 選手以外が最も勝利に関われるスポーツ(だと個人的に思っています)

### アナライジングスタッフ？
フィールドでプレーすることはありませんが、
対戦相手の分析等をしてコーチの戦略立案を助けるポジションです。

### この記事を読む上で知ってほしいポイント
- 攻撃、守備があり、交代制
- 攻撃側も守備側も作戦を用意して、様々な要素から作戦を決定する
- 作戦には有利/不利があるため、攻撃側も守備側も相手の作戦を予想しながら決定する
- 予想がうまくいくと、勝利に近づくことが出来る

# やったこと
## Xリーグ公式サイトから試合スタッツ(通称PlayByPlay)を入手
Xリーグでは試合結果が公開されており、詳細リンクからPDFを入手することが出来ます
例) https://xleague.jp/score/9788

## OCRで文字を読み取ってテーブル形式に整形
PDFになっていればOCRできますね。
pyocr, pdfminerを利用しました
https://github.com/kyper999/pyocr
https://github.com/pdfminer/pdfminer.six

以下のようなCSVになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/297216/be0e2072-f87a-27fa-0c89-6ce341892331.png)
一般的には頑張って打ち込んでいるチームが多いと思いますが、チャレンジャーズでは時短分析を目標に掲げて、自動化出来る部分は自動化しています。

## AIが学習できる形に整形
今回はプレーがRUNなのかPASSなのかを当てたいと思います。
本当はもっとたくさん作戦の種類はあるのですが、
守備側にとって最も守り方を変えないといけないこの2種類を予想します。

### 目的変数、説明変数に分割
教師あり学習では、「推定させたいもの」と「それを推定できる情報」に分けます。
推定させたいものは`RUNかPASS`か (表のR/P列)
※記録上のRUN/PASSなのでQBスクランブルはRUNになっています。仕方ない。

それを推定できる情報は試合状況で、今回は以下を使いました
※本当はもっと色々使ったほうが良いですが、公式記録から取れるものはこのくらいです。

|  列名  |  説明  |
| ---- | ---- |
|  YARD LN  |  フィールド内のボールの位置  |
|  DN  |  第何ダウンか  |
|  DIST  |  第1ダウン獲得までの残りヤード数  |
|  HASH  |  攻撃方向からみて左右方向のボールの位置  |
|  point_diff  |  得失点差  |

### 特定のチームの攻撃プレーだけを抽出
アメリカンフットボールでは守備とキッキングをしているプレーがありますが、それは除去しました。
これで各チームの2020年の3試合分(一部2試合)の攻撃をしているプレーだけが抽出できました。

### 学習用、推定用のデータに分割
AIに学習させる際、学習用と推論用にデータを分割して評価します。
今回は5-Fold Cross Validationを使います。
https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.cross_val_score.html
つまり、2020年のすべてのプレーのうち、80%で学習して、残り20%を当ててみるタスクを5回繰り返し、その平均をスコアにします。

## GradientBoostingで分類
テーブルデータ(表形式)に強力な、決定木ベースのアンサンブル学習器であるGradientBoostingを使います。
https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.GradientBoostingClassifier.html
学習後、前出のスコアを計算します。

# 結果 (予想しやすさランキング)

|チーム名|スコア              |
|---------|-------------------|
|名古屋サイクロンズ|0.616 |
|みらいふ福岡SUNS|0.538 |
|アズワンブラックイーグルス|0.462|
|LIXIL DEERS|0.457 |
|電通キャタピラーズ|0.437 |
|アサヒビールシルバースター|0.417 |
|BULLSフットボールクラブ|0.361|
|富士ゼロックスミネルヴァAFC|0.347 |
|アサヒ飲料クラブチャレンジャーズ|0.319|
|ブルザイズ東京|0.306 |

※スコアにはF1スコア(正答率のようなもの)を使っています。

名古屋サイクロンズのRUN/PASSが一番予想しやすく、
ブルザイズ東京のRUN/PASSが一番予想しにくいという結果になりました！
我がアサヒ飲料クラブチャレンジャーズもそこそこ良い位置です。
Garrett選手のQBスクランブルがRUN扱いなのも、予想しにくくなっている要因かもしれません。

※あくまでAIがRUN/PASSを予想した結果ですので、強い弱い、良し悪しを評価しているわけではありません。ご理解ください。

## AI予想の可視化
AIで予想しやすい/しにくいのは分かりましたが、これを戦略立案にどう活かせば良いのでしょうか？
幸い、決定木ベースの分類器ではYes/Noで判断できるような決定木を書くことが出来ます。
チーム名は伏せますが、以下はとあるチームのAIで分析したプレーの決定木です。
![MF_off_graph.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/297216/5b5baeac-1b7a-8cae-7a74-39ca2e5c2487.png)
この図を日本語に直すとこのチームは

- 第1ダウン獲得まで3yd以内なら `90% RUN` を利用
- 第1ダウン獲得まで7yd以上で得失点差が-2以下 (2点以上負けている場合)、`82% PASS`
という傾向が見えてきます。

統計データを舐め回しながらこのような統計データを出していたチームは多いと思いますが、AIを使えば1秒で出してくれます。

# 最後に
アサヒ飲料クラブチャレンジャーズでは、このような取り組みも含めて、アナライジングスタッフを大募集しています！！！
以下のような方は是非。

- アメリカンフットボールが好き
- スポーツが好き
- データ分析したい
- コーチと一緒に考えたい
- 中村と一緒にやりたい

経験は必須ではありませんが、アメリカンフットボールの知識はあると良いです。
基本的に土日練習、場所は尼崎になります。

募集ページ: https://challengers-net.com/news/2021/01/25/news175/
問い合わせ先: info@challengers-net.com

あなたの応募をお待ちしております！