HAKUTAI Tech Notes

IT関連、数学のことなどを主として思いつきで色々書き溜めていきます

確率計算だけでカタールW杯優勝国を予想する

先日、サッカーのカタールW杯に出場する日本代表のメンバーが発表され、いよいよ開催の気運が高まってきた。ということでW杯に絡めて何かやりたいなと思い、今大会でどこが優勝しそうかを予想するシミュレーションをやってみた。予想とは言っても真面目にチーム毎の戦力分析を行うとかいったものではなく、単に各チームの勝利確率を計算してそれだけを根拠に大会のレギュレーションに沿って対戦を進めていき、どこが優勝しそうかをシミュレーションしてみるというお遊びのものです。
シミュレーションの肝となる勝利確率の計算はイロレーティング(Elo Rating)の値をベースにした。



イロレーティングから勝利確率を計算する

イロレーティングとは

対戦型の競技において相対評価によって双方の実力を表すために使われる指標(レート)である。元々はチェスの強さを評価するために考案されたものだそうだ。
ある競技において参加プレイヤーの平均のレートを主に1500と定め、その値の大小により実力を評価することができる。試合が行われる度に2プレイヤー(チーム)のレート差と結果に応じて双方のレートが更新される。
サッカー競技におけるイロレーティングは、各国の国際Aマッチの結果を用いてその試合の重み(最高値がW杯決勝の60、最低値が親善試合の20)、ホームチームのアドバンテージ、得失点差を考慮して計算されている。いわゆる強豪国であればレートは2000を超えているところが多い。
各国の最新のレートは、「World Football Elo Ratings」というサービスで確認することができる。

www.eloratings.net

なお、サッカーの世界ランキングとしてFIFAランキングがあるが、2018年に計算方法が改訂されイロレーティングをベースに計算されるようになった。これにより、南米と欧州びいきの不公平な指標でしかなかった「大陸連盟間の強さ」は考慮されなくなった。

勝利確率の計算

対戦する2チームのレート差から勝利確率を計算することができる。

チームA、Bの勝利確率を$P_A$, $P_B$、レートを$R_A$, $R_B$とすると、

$$ P_A = \frac{1}{10^{\frac{R_B - R_A}{400}}+1} $$

で計算される。
チームBの勝利確率は余事象の確率から$P_B = 1 - P_A$である。

World Football Elo Ratings - About

引き分けについて

イロレーティングの対象は引き分けのない競技であることを前提としており、サッカーなどのように引き分けがあり得る競技の場合、引き分けは0.5勝0.5敗という扱いでレートが計算されている。このため、対戦両チームのレートから引き分けの確率だけを逆算して求めるといったことができない。したがって、なんらかの方法で引き分けの確率を別に求め(後述)、あらかじめレート差から計算しておいた両チームの勝利確率に対して引き分けを考慮した補正を行う必要がある。
引き分け確率を$P_d$として、$P_d$を考慮した時のチームA、Bの勝利確率$P_A'$, $P_B'$を下記のように計算した。(下の図は$P_A$ = 65%, $P_B$ = 35%, $P_d$ = 20%とした場合の例)

$$ \begin{align} P_A'& = P_A - \frac{P_d}{2}\\ P_B'& = P_B - \frac{P_d}{2} = 1-P_A - \frac{P_d}{2} \end{align} $$

なお、「$\frac{P_d}{2}$ ≧ 弱い方の勝利確率」となってしまう場合、「$P_d$ = 弱い方の勝利確率」とした。

シミュレーションの条件

実際のW杯における対戦の組み合わせに沿って、対戦国同士のレート差から算出した勝利確率・引き分け確率を用いて抽選を行い結果を決定していく。 本物の試合であれば実力差以外にも対戦の順序や選手の士気、コンディションなどが対戦結果に影響してくると思われるが、このシミュレーションでは対戦結果を左右するものはレート差から計算される確率だけである。また、他チームの対戦結果などの外的要因の影響は一切考慮しない独立なものとする。
また、途中の対戦結果を受けて各チームのレートが変動することは考えず、シミュレーション開始時点のレートを最後まで使う。

グループリーグの考え方

  • 勝利確率に基づき勝敗を決定する
  • 引き分けを考慮する
  • 勝:3、分:1、負:0の勝ち点を計上していき各グループの成績上位2チームが決勝トーナメントへ進む


実際のレギュレーションにおいて、グループリーグ内の順位を決定する項目の優先度は下記の通りである。

1. 勝点
2. 得失点差
3. 総得点
4. 直接対決の結果
5. フェアプレーポイント・反則ポイント
6. くじ引き

しかし、このシミュレーションはレート差しか見ておらず、チームごとの得失点などは考慮できないので下記の通りにしている。

1. 勝点
2. 直接対決の結果
3. くじ引き


なお、同グループ内で勝点が並ぶパターンは以下の3通りが考えられる。

(1) 2チームが同じ勝点で並ぶ
➡︎ 直接対決の結果で判断し、引き分けだったらくじ引き
(2) 3チームが同じ勝点で並ぶ
➡︎ 残りの1チームは全勝or全分けor全敗になっており、当該3チーム同士の直接対決の結果は全分けor三すくみ状態なのでくじ引き
(3) 全チーム同じ勝点になる
➡︎ リーグ戦6試合が全て引き分けになるか全チーム1勝1分1敗であり、直接対決の結果が同じなのでくじ引き

トーナメント戦の考え方

  • 勝率確率に基づき勝敗を決定する
  • 引き分けを考慮する
  • 引き分けの場合は勝敗50%ずつの抽選(PK戦のつもり)で決着を付ける

A〜Hの各グループリーグを1位、2位通過した16チームをトーナメントに割り振る方法も実際のレギュレーションに従う。


引き分け確率の求め方

前述の通りイロレーティングでは引き分けの確率を直接算出することができないので、なんらかの方法で別途求めなければならない。
そこで、実際に過去に行われたW杯10大会分(1982年スペイン大会〜2018年ロシア大会)のデータを利用し、対戦チームのレート差と引き分けの試合数の傾向から引き分け確率を求める式を推定した。幸いWorld Football Elo Ratingsには現在のレートだけでなく、過去に世界中で行われた国際親善試合や公式戦の結果も膨大に記録されているので非常にありがたい。
まず、過去10大会分の全試合のレート差の絶対値を幅50ずつの階級に分け、各階級毎の引き分けの割合(各階級の引き分けの試合数 / 各階級の総試合数)を算出した。さらに、各階級の中央値と引き分けの割合の分布から最小二乗法により近似直線の式を求め、レート差$\Delta R$から引き分け確率$R_d$を計算するための式とした。

$$ R_d = -0.00045\left| \Delta R \right| + 0.316 $$

なお、$450 < \left| \Delta R \right| \leq 500$の階級の引き分けの割合が飛び上がってしまっているが、この階級に含まれる試合数は他と比べて少ないことを考慮して近似式を計算する際には除外した。
「レート差が小さい、つまり力が拮抗しているほど引き分けになりやすい」という感覚的にもなんとなく良さそうだ。
ちなみに、この式は単純な一次関数なのでレート差が702以上の場合は引き分け確率が0以下になってしまうが、W杯出場国同士ではまずあり得ないレート差だと思われるのでとりあえずはヨシ。

シミュレーションの実行

各グループリーグの対戦〜トーナメントの決勝戦までを1回の試行として、全部で1000回繰り返した結果を集計する。
大会のシミュレーションを行うコードはPython 3.10.5で作成・実行した。
ソースコードは下記のGithubで公開している。
world_cup_winner_simulator


シミュレーションに用いた参加32ヶ国のレートの一覧は下記になる。括弧内はイロレーティングでの順位 である。※2022年11月1日時点

A 🇶🇦カタール 1664(50位)
🇪🇨エクアドル 1840(18位)
🇸🇳セネガル 1687(43位)
🇳🇱オランダ 2040(4位)
B 🏴󠁧󠁢󠁥󠁮󠁧󠁿イングランド 1920(14位)
🇮🇷イラン 1817(21位)
🇺🇸アメリカ 1798(24位)
🏴󠁧󠁢󠁷󠁬󠁳󠁿ウェールズ 1790(26位)
C 🇦🇷アルゼンチン 2141(2位)
🇸🇦サウジアラビア 1632(56位)
🇲🇽メキシコ 1813(22位)
🇵🇱ポーランド 1809(23位)
D 🇫🇷フランス 2005(6位)
🇦🇺オーストラリア 1719(39位)
🇩🇰デンマーク 1971(9位)
🇹🇳チュニジア 1687(43位)
E 🇪🇸スペイン 2045(3位)
🇨🇷コスタリカ 1736(35位)
🇩🇪ドイツ 1960(10位)
🇯🇵日本 1798(24位)
F 🇧🇪ベルギー 2025(5位)
🇨🇦カナダ 1770(29位)
🇲🇦モロッコ 1753(32位)
🇭🇷クロアチア 1922(13位)
G 🇧🇷ブラジル 2169(1位)
🇷🇸セルビア 1892(16位)
🇨🇭スイス 1929(12位)
🇨🇲カメルーン 1613(61位)
H 🇵🇹ポルトガル 2004(7位)
🇬🇭ガーナ 1540(74位)
🇺🇾ウルグアイ 1936(11位)
🇰🇷韓国 1783(28位)

結果

ローカルPC上でカタールW杯を1000回開催するのに要した時間は13.24秒だった。
なお、今回のシミュレーションで試行1回当たりの引き分け試合数の平均は14.7試合だった。実際の過去10大会における引き分け試合数の平均が1大会当たり14.6試合であることを考えるとかなり良い線を行っているのではないだろうか。

結果の集計方法

各国毎に最終到達ランクが「グループリーグ敗退、ベスト16、ベスト8、ベスト4、準優勝、優勝」になった回数をそれぞれカウントして度数分布で表す。
さらに、「グループリーグ敗退→0ポイント、ベスト16→1ポイント、ベスト8→2ポイント、ベスト4→3ポイント、準優勝→4ポイント、優勝→5ポイント」としてポイントの期待値(ポイント* 各ランクの到達回数 / 全試行回数)を計算する。期待値が5に近いほど今大会で好成績を残す可能性が高く、(期待値の意味から言えば厳密には異なるが)優勝に近い国であるといえる。

結果発表

では期待値の昇順で32位から発表していこう。


◆ 第32位 ◆

🇬🇭 ガーナ (期待値:0.030 / レート:1540)
リーグ 敗退 972
ベスト16 26
ベスト8 2
ベスト4 0
準優勝 0
優勝 0

◆ 第31位 ◆

🇨🇲 カメルーン (期待値:0.039 / レート:1613)
リーグ 敗退 966
ベスト16 30
ベスト8 3
ベスト4 1
準優勝 0
優勝 0

◆ 第30位 ◆

🇹🇳 チュニジア (期待値:0.119 / レート:1687)
リーグ 敗退 895
ベスト16 93
ベスト8 10
ベスト4 2
準優勝 0
優勝 0

◆ 第29位 ◆

🇸🇦 サウジアラビア (期待値:0.144 / レート:1632)
リーグ 敗退 880
ベスト16 100
ベスト8 16
ベスト4 4
準優勝 0
優勝 0

◆ 第28位 ◆

🇦🇺 オーストラリア (期待値:0.163 / レート:1719)
リーグ 敗退 858
ベスト16 124
ベスト8 15
ベスト4 3
準優勝 0
優勝 0

◆ 第27位 ◆

🇨🇷 コスタリカ (期待値:0.184 / レート:1736)
リーグ 敗退 860
ベスト16 108
ベスト8 22
ベスト4 8
準優勝 2
優勝 0

◆ 第26位 ◆

🇶🇦 カタール (期待値:0.218 / レート:1664)
リーグ 敗退 834
ベスト16 123
ベスト8 34
ベスト4 9
準優勝 0
優勝 0

◆ 第25位 ◆

🇲🇦 モロッコ (期待値:0.230 / レート:1753)
リーグ 敗退 818
ベスト16 142
ベスト8 33
ベスト4 6
準優勝 1
優勝 0

◆ 第24位 ◆

🇨🇦 カナダ (期待値:0.321 / レート:1770)
リーグ 敗退 757
ベスト16 179
ベスト8 55
ベスト4 5
準優勝 3
優勝 1

◆ 第23位 ◆

🇸🇳 セネガル (期待値:0.329 / レート:1687)
リーグ 敗退 765
ベスト16 156
ベスト8 67
ベスト4 10
準優勝 1
優勝 1

◆ 第22位 ◆

🇰🇷 韓国 (期待値:0.353 / レート:1783)
リーグ 敗退 714
ベスト16 236
ベスト8 36
ベスト4 11
準優勝 3
優勝 0

◆ 第21位 ◆

🇯🇵 日本 (期待値:0.354 / レート:1798)
リーグ 敗退 731
ベスト16 197
ベスト8 59
ベスト4 13
準優勝 0
優勝 0

◆ 第20位 ◆

🇺🇸 アメリカ (期待値:0.532 / レート:1798)
リーグ 敗退 631
ベスト16 247
ベスト8 91
ベスト4 23
準優勝 6
優勝 2

◆ 第19位 ◆

🏴󠁧󠁢󠁷󠁬󠁳󠁿 ウェールズ (期待値:0.580 / レート:1790)
リーグ 敗退 591
ベスト16 277
ベスト8 98
ベスト4 29
準優勝 5
優勝 0

◆ 第18位 ◆

🇵🇱 ポーランド (期待値:0.636 / レート:1809)
リーグ 敗退 566
ベスト16 305
ベスト8 72
ベスト4 43
準優勝 12
優勝 2

◆ 第17位 ◆

🇮🇷 イラン (期待値:0.670 / レート:1817)
リーグ 敗退 539
ベスト16 300
ベスト8 121
ベスト4 33
準優勝 6
優勝 1

◆ 第16位 ◆

🇲🇽 メキシコ (期待値:0.671 / レート:1813)
リーグ 敗退 532
ベスト16 334
ベスト8 81
ベスト4 41
準優勝 8
優勝 4

◆ 第15位 ◆

🇷🇸 セルビア (期待値:0.731 / レート:1892)
リーグ 敗退 570
ベスト16 246
ベスト8 108
ベスト4 44
準優勝 23
優勝 9

◆ 第14位 ◆

🇨🇭 スイス (期待値:1.028 / レート:1929)
リーグ 敗退 420
ベスト16 315
ベスト8 151
ベスト4 61
準優勝 37
優勝 16

◆ 第13位 ◆

🇪🇨 エクアドル (期待値:1.126 / レート:1840)
リーグ 敗退 356
ベスト16 306
ベスト8 240
ベスト4 60
準優勝 30
優勝 8

◆ 第12位 ◆

🇭🇷 クロアチア (期待値:1.181 / レート:1922)
リーグ 敗退 302
ベスト16 382
ベスト8 207
ベスト4 64
準優勝 32
優勝 13

◆ 第11位 ◆

🇩🇪 ドイツ (期待値:1.244 / レート:1960)
リーグ 敗退 304
ベスト16 359
ベスト8 208
ベスト4 67
準優勝 42
優勝 20

◆ 第10位 ◆

🇺🇾 ウルグアイ (期待値:1.293 / レート:1936)
リーグ 敗退 197
ベスト16 512
ベスト8 163
ベスト4 71
準優勝 43
優勝 14

◆ 第9位 ◆

🏴󠁧󠁢󠁥󠁮󠁧󠁿 イングランド (期待値:1.435 / レート:1920)
リーグ 敗退 239
ベスト16 352
ベスト8 236
ベスト4 104
準優勝 46
優勝 23

◆ 第8位 ◆

🇩🇰 デンマーク (期待値:1.704 / レート:1971)
リーグ 敗退 146
ベスト16 411
ベスト8 182
ベスト4 150
準優勝 76
優勝 35

◆ 第7位 ◆

🇵🇹 ポルトガル (期待値:1.724 / レート:2004)
リーグ 敗退 117
ベスト16 453
ベスト8 198
ベスト4 110
準優勝 65
優勝 57

◆ 第6位 ◆

🇧🇪 ベルギー (期待値:1.946 / レート:2025)
リーグ 敗退 123
ベスト16 338
ベスト8 240
ベスト4 131
準優勝 105
優勝 63

◆ 第5位 ◆

🇫🇷 フランス (期待値:1.960 / レート:2005)
リーグ 敗退 101
ベスト16 393
ベスト8 181
ベスト4 161
準優勝 98
優勝 66

◆ 第4位 ◆

🇪🇸 スペイン (期待値:2.018 / レート:2045)
リーグ 敗退 105
ベスト16 295
ベスト8 313
ベスト4 132
準優勝 74
優勝 81

◆ 第3位 ◆

🇳🇱 オランダ (期待値:2.244 / レート:2040)
リーグ 敗退 45
ベスト16 239
ベスト8 390
ベスト4 166
準優勝 73
優勝 87

◆ 第2位 ◆

🇦🇷 アルゼンチン (期待値:2.845 / レート:2141)
リーグ 敗退 22
ベスト16 240
ベスト8 166
ベスト4 245
準優勝 97
優勝 230

◆ 第1位 ◆

🇧🇷 ブラジル (期待値:2.948 / レート:2169)
リーグ 敗退 44
ベスト16 182
ベスト8 202
ベスト4 193
準優勝 112
優勝 267


ということで、優勝に最も近い国はブラジルでした!!
🎉おめでとうございます🥳

おわりに

成績の期待値で並べてみた結果、1〜8位までの上位集団については多少の前後はあるものの概ねイロレーティング 通りの並び順になった。期待値が飛び抜けている1位ブラジル、2位アルゼンチンには是非とも20年振りに欧州以外の国として優勝を掴み取ってもらいたい。
ところで、我が日本代表の期待値は残念ながら0.354(グループリーグ 敗退濃厚)という結果となり、改めて厳しいグループであることを認識させられてしまった…。
しかし、これを言ったらこの記事の意味を根底から覆してしまうようなものだが、数字だけで試合結果が決まってしまうのであればスポーツ観戦なんて面白くもなんともなくなってしまう。スポーツくじだって成立しないでしょう。
なので、日本代表には是非ともレーティングの順位や前評判を払拭するような大番狂わせを期待したい。