Ini bagian Monte Carlo-nya. Ini adalah loop lima langkah:
- Nilai setiap tim dari hasil, xG dan apa pun yang dimasukkan.
- Hitung harga setiap fixture sisa dengan model pertandingan di atas.
- Mainkan setiap fixture sekali secara acak, menarik skor dari probabilitas tersebut dan menambahkan poin ke klasemen. Pertandingan yang sudah dimainkan tetap persis seperti yang terjadi.
- Ulangi seluruh musim ribuan kali. 10.000 kali simulasi adalah pilihan umum, dan setiap simulasi adalah satu versi kemungkinan dari musim 2026/27.
- Hitung. Peluang juara adalah proporsi simulasi di mana sebuah tim finis di puncak. Peluang degradasi adalah proporsi di mana mereka finis di posisi ke-18, ke-19, atau ke-20.
Persentase terkenal itu hanyalah penghitungan. Menangkan liga dalam 4.300 dari 10.000 musim yang disimulasikan dan Anda berada di 43%. Dengan 50 dari 380 pertandingan sudah dimainkan per 20 September, model Premier League memutar ulang sekitar 330 fixture setiap simulasi.
Di bawah adalah versi yang berfungsi untuk liga fiktif dengan empat tim yang bermain kandang dan tandang. Ini memakan waktu satu menit untuk dibaca:
import random, math
random.seed(7)
teams = {"Reds": (1,9, 0,9), "Blues": (1,7, 1,0), "Whites": (1,4, 1,2), "Greens": (1,2, 1,3)} # (attack, defence)
AVG, HOME = 1,35, 1,15
def poisson(lam):
L, k, p = math.exp(-lam), 0, 1,0
while True:
p *= random.random()
if p <= L:
return k
k += 1
def play(h, a):
lam_h = AVG * (teams[h][0] / AVG) * (teams[a][1] / AVG) * HOME
lam_a = AVG * (teams[a][0] / AVG) * (teams[h][1] / AVG) / HOME
return poisson(lam_h), poisson(lam_a)
fixtures = [(h, a) for h in teams for a in teams if h != a]
N, titles = 10_000, dict.fromkeys(teams, 0)
for _ in range(N):
pts, gd = dict.fromkeys(teams, 0), dict.fromkeys(teams, 0)
for h, a in fixtures:
x, y = play(h, a)
gd[h] += x - y; gd[a] += y - x
if x > y: pts[h] += 3
elif x < y: pts[a] += 3
else: pts[h] += 1; pts[a] += 1
champion = max(teams, key=lambda t: (pts[t], gd[t], random.random()))
titles[champion] += 1
print({t: titles[t] / N for t in teams})
Jalankan kode tersebut dan Reds, yang nyaman menjadi tim terbaik di atas kertas, memenangkan gelar hanya dalam sekitar 53% musim. Blues mengambil sekitar 31%, Whites sekitar 11% dan Greens sekitar 4-5%. Reds mengalahkan Greens di kandang 70% dari waktu, dan dalam musim singkat, tim terbaik masih gagal hampir setengah waktu. Begitulah noisy-nya sepak bola.