EurekaMoments

ロボットや自動車の自律移動に関する知識や技術、プログラミング、ソフトウェア開発について勉強したことをメモするブログ

卓球の試合における得点確率のベイズ推定を考える

目次

背景・目的

以前、こちらの記事で紹介したように、
卓球の試合の勝率の推移をシミュレート
するPythonプログラムを作りました。

www.eureka-moments-blog.com

なんとなくそれっぽくなっていますが、
計算された勝率が100%あるいは0%に
なる部分がちらほら見られ、実際の
試合とはまだまだギャップがある
状態です。
この計算精度を上げるべく、今回は
ベイズ推定による確率の推定を検討
してみたので紹介します。

スポーツにおけるベイズ推定

ベイズ推定とは、ベイズの定理に
基づいて、事前に立てた仮説が
どのくらいの確率で成立するかを
様々な条件を考慮しながら推定
する手法です。

ja.wikipedia.org

スポーツの場合だと、例えばこの
記事にあるような試合の勝敗予想
に用いられます。

www.pinnacle.com

過去の対戦成績などから大体の
勝率を予測し、そこに天候や
会場の状態、戦術、選手の
コンディションなどを反映させ
ながら予測した勝率をどんどん
更新して精度を高めるという
ものです。

卓球の試合で予測したい確率とは

卓球の試合データを分析する際に、
予測したくなる確率の種類は下記の
ようなものが考えられます。

  • 試合の勝率
  • 得点率
  • 失点率

前回の記事では勝率を予想して
いましたが、ここ最近では得点率
を予測する事こそが一番重要
なのではないかと考えています。

選手は試合の中で相手の出方を
予測した上でプレーし、実際の
プレーの結果から自分の予測を
逐次更新していくはずです。

そしてその中で、自分が得点できる
確率が一番高い戦術を選択していく
でしょう。
失点率も予測したくなりますが、
失点以上に自分が得点すれば良い
と前向きに考えれば、そこまで
重要ではありません。

また、得点率が高い選択をして
いけば自ずと勝率もついてくると
思うので、ここから先は自分の
得点率をベイズ推定で予測して
いく事を考えていきます。

得点率を予測する一連の流れ

得点率を予測する理論を立てるに
あたり、実在する卓球選手の統計
データを例として取り上げます。

元になるデータは、2019~2020年
にかけて行われたTリーグの現時点
までの全試合のスタッツです。

tleague.jp

この中から2人の選手AとBを選び、
Aが自身の過去の戦績と、対戦相手
であるBの過去の戦績を考慮しながら
次にまた対戦する際の自身の得点率
を予測するものとします。

まず、自身の得点率を予測したい
選手Aとなるのは神巧也選手です。

tleague.jp

次に、対戦相手Bとなるのは、
吉村真晴選手です。

tleague.jp

0. 戦術の分類を定義する

自身の得点率を予測するための
手がかりになるのは、相手が
取るであろう戦術と、自身が
取るべき戦術です。

この戦術をいくつかのパターン
に分類しなければなりませんが、
今回はざっくりと下記の4パターン
の戦術をそれぞれに取り得ると
します。

  1. サーブ→3球目の間で得点
  2. 5球目 or 以上のラリーで得点
  3. レシーブ→4球目の間で得点
  4. 6球目 or 以上のラリーで得点

1. 相手が各戦術を取る事前確率を定義する

自分が取るべき戦術を決めるために、
まずは相手がどの戦術を取る確率が
高いかを考えます。

戦術1~4という条件をT_1~T_4
して、それぞれが取られるであろう
確率をP(T_1)~P(T_4)とします。
これらは、得失点にかかわらず、相手が
全試合の中で各戦術を実行した割合に
相当します。

  • P(T_1)=\frac{276}{873}=0.32
  • P(T_2)=\frac{160}{873}=0.18
  • P(T_3)=\frac{337}{873}=0.39
  • P(T_4)=\frac{100}{873}=0.11

これらは事前確率と呼ばれ、ベイズ
推定ではこの事前確率をいろんな
情報を反映させながら更新し、
精度を向上させる事になります。

今回は相手の過去の成績が分かるという
前提ですが、逆にまったく過去の情報が
ない場合は、それぞれが均等な確率で
実行されると仮定して下記のように
します。

  • P(T_1)=\frac{1}{4}=0.25
  • P(T_2)=\frac{1}{4}=0.25
  • P(T_3)=\frac{1}{4}=0.25
  • P(T_4)=\frac{1}{4}=0.25

これを「理由不十分の原則」といいます。

2. 相手が各戦術を取った場合の得点率を定義する

戦術1~4によって得点したという条件を
Sとし、その確率をP(S|T_1)~(S|T_4)
とします。これは統計学では尤度と呼ばれ、
各戦術がどれだけ得点に結びつきやすい
かという信頼度のようなものです。

全部の得点回数に対する、各戦術実行
時の得点回数の割合として下記のよう
になります。

  • P(S|T_1)=\frac{169}{457}=0.37
  • P(S|T_2)=\frac{57}{457}=0.12
  • P(S|T_3)=\frac{190}{457}=0.42
  • P(S|T_4)=\frac{41}{457}=0.09

3. 相手のトータルでの得点確率を定義する

ここまでの1と2で定義した事前確率と
尤度を利用して、戦術の全パターンを
考慮したトータルの得点確率P(S)
定義します。

戦術1~4を全て考慮するとして、下記の
ように計算出来ます。

f:id:sy4310:20200308140612p:plain

4. 相手が各戦術を取る確率を更新する

前述した1~3にて定義した確率の値を
ベイズの定理に当てはめる事で、
各戦術を相手が取るであろう確率を
下記のように更新します。

f:id:sy4310:20200308141619p:plain

ここで、事前に定義した各戦術の
確率P(T_1)~P(T_4)の値と
比べてみましょう。

  • 戦術1: 0.32 -> 0.38
  • 戦術2: 0.18 -> 0.07
  • 戦術3: 0.39 -> 0.52
  • 戦術4: 0.25 -> 0.03

それぞれの戦術を相手が取る確率が
更新前と後で変化している事が
分かります。
これは、相手の過去の戦術の実行
確率とそれによる得点確率を考慮
する事で、過去の実施確率と得点
確率が最も高い戦術3を取る確率が
より高いだろうと、自分の予測を
改めた事を意味します。
逆に、過去の実施確率も得点確率
も低い戦術2や4を相手が取る確率
は低いだろうという事で、事前より
さらに低い確率で見積もるように
なります。

5. 各戦術における自分の得点確率を事前定義する

相手が取るであろう戦術を予測する
と同時に、自分が取るべき戦術も
考えなければなりません。
この場合、得点が出来る確率が
一番高い戦術を選択するのが
自然なので、ここで推定したい
のは、各戦術を実行した時に
得点できる確率とします。

まずは事前確率として、どの
戦術とかは関係なしに、自分が
相手から得点できる確率P(S_1)と、
相手から失点する確率P(S_2)
定義します。

相手との過去の戦績から決める
事もできますが、ここでは
得点する確率も失点する確率も
イーブンだと考える状態から
始めます。よって、

  • P(S_1)=\frac{1}{2}=0.50
  • P(S_2)=\frac{1}{2}=0.50

とします。

6. 自分の得失点時に各戦術を取った確率を定義する

続いて尤度として、自分が得点
あるいは失点した際に、どの
戦術を取った確率が高かった
のかを考えます。

まずは、自分が過去に得点した
際に各戦術を取った確率です。

  • P(T_1|S_1)=\frac{219}{612}=0.36
  • P(T_2|S_1)=\frac{126}{612}=0.21
  • P(T_3|S_1)=\frac{191}{612}=0.31
  • P(T_4|S_1)=\frac{76}{612}=0.12

続いて、自分が過去に失点した
際に各戦術を取った確率です。

  • P(T_1|S_2)=\frac{131}{560}=0.23
  • P(T_2|S_2)=\frac{120}{560}=0.21
  • P(T_3|S_2)=\frac{231}{560}=0.42
  • P(T_4|S_2)=\frac{78}{560}=0.14

7. 自分がトータルで各戦術を取った確率を定義する

得点した場合と失点した場合の
両方を考慮して、各戦術を取った
確率を下記のように定義します。

f:id:sy4310:20200308170015p:plain

8. 各戦術を取った場合の得点確率を推定する

前述した5~7で定義した各種
確率をベイズの定理に当て
はめて、各戦術を実行したら
どれくらいの確率で得点出来る
かを推定します。

推定結果は下記の通りになります。

f:id:sy4310:20200308171159p:plain

事前には、得点確率は失点確率と
イーブンで0.5としたのと、この
推定結果を比べてみましょう。

  • 戦術1: 0.5 -> 0.6
  • 戦術2: 0.5 -> 0.5
  • 戦術3: 0.5 -> 0.43
  • 戦術4: 0.5 -> 0.46

戦術1が一番得点出来る確率が
高いという事になっていますね。
戦術1の実行確率は全体の30%
ですが、得点した場合だけに
限定すると、4つの戦術の中で
一番実行確率が高い36%です。

この事から、戦術1を実行した
方が一番得点しやすいとされ、
元々の想定である50%よりも
少し高めの60%に確率を見積り
直したという事なります。

今後の取り組み

卓球の試合分析にベイズの定理を
応用する感覚が掴めました。

Tリーグのスタッツを見てみると、
各ゲームの勝率やその時点での
点差などもまとめられていました。

これらも利用して、試合の流れを
より高精度に予測できないかを
次回は考えてみようと思います。