关注【索引目录】服务号,更多精彩内容等你来探索!
探索了如何预测英超球队在 2024/25 赛季的胜率,并以 2023/24 赛季的成绩为基准。我使用了 Python、API-Football API 和一些简单的统计数据来建模每支球队的胜率。
让我们分解一下
目标
使用以下公式预测 2024/25 赛季每支球队可能获胜的比赛场次:
- 伯努利分布
(赢或不赢) - 二项式概率模型
-
使用 Seaborn 和 Matplotlib 进行可视化
⚙️ 工具和库
import requests
import pandas as pd
from scipy.stats import binom
import matplotlib.pyplot as plt
import seaborn as sns
步骤 1:从 API-Football 提取 2023/24 赛季比赛数据
我使用API-Football服务获取了 2023/24 赛季英超联赛的比赛数据:
API_KEY = 'your_api_key'
BASE_URL = 'https://v3.football.api-sports.io'
HEADERS = {'x-apisports-key': API_KEY}
params = {'league': 39, 'season': 2023}
response = requests.get(f'{BASE_URL}/fixtures', headers=HEADERS, params=params)
fixtures = response.json()['response']
第 2 步:处理结果
每场比赛都会经过检查以确定获胜的队伍,我会计算每支队伍参加了多少场比赛并获胜。
data = []
for match in fixtures:
if match['fixture']['status']['short'] == 'FT':
home_team = match['teams']['home']['name']
away_team = match['teams']['away']['name']
home_goals = match['goals']['home']
away_goals = match['goals']['away']
if home_goals > away_goals:
winner = home_team
elif away_goals > home_goals:
winner = away_team
else:
winner = None # draw
data.append({'home': home_team, 'away': away_team, 'winner': winner})
df = pd.DataFrame(data)
步骤 3:计算获胜概率
我按球队对比赛进行分组,计算胜率(胜场数/场次),并使用二项式 PMF来估计他们在 38 场比赛的赛季中赢得一定场次比赛的机会。
teams = list(set(df['home']).union(set(df['away'])))
records = []
for team in teams:
played = df[(df['home'] == team) | (df['away'] == team)]
wins = (df['winner'] == team).sum()
win_rate = wins / played.shape[0]
records.append({'team': team, 'wins': wins, 'played': played.shape[0], 'win_rate': win_rate})
df_stats = pd.DataFrame(records)
步骤 4:可视化预测
我使用 Seaborn 为每支球队创建了一条线图,显示了他们在下个赛季(假设 38 场比赛)可能获胜的概率分布。
season_games = 38
plot_data = []
for _, row in df_stats.iterrows():
team = row['team']
p = row['win_rate']
for x in range(0, season_games + 1):
prob = binom.pmf(x, n=season_games, p=p)
plot_data.append({'team': team, 'wins': x, 'probability': prob})
viz_df = pd.DataFrame(plot_data)
plt.figure(figsize=(14, 8))
sns.lineplot(data=viz_df, x='wins', y='probability', hue='team')
plt.title('Predicted Win Probability Distribution (2024/25 Season)')
plt.xlabel('Number of Wins')
plt.ylabel('Probability')
plt.tight_layout()
plt.show()

为什么这很重要
-
这种方法不能预测准确的结果,但可以为每个团队提供可靠的概率概况。 -
这有助于分析师和球迷了解球队的表现趋势。 -
可以通过添加球员级别数据、主场/客场影响、伤病或转会影响来改进该模型。
最后的想法
这是一次将体育与数据科学相结合的有趣探索。将历史数据与概率论相结合,可以带来比仅仅依靠“直觉”更深刻的洞察。
关注【索引目录】服务号,更多精彩内容等你来探索!

