大数跨境

使用 Python 预测 2024/25 赛季英超联赛获胜概率

使用 Python 预测 2024/25 赛季英超联赛获胜概率 索引目录
2025-07-31
0
导读:关注【索引目录】服务号,更多精彩内容等你来探索!探索了如何预测英超球队在 2024/25 赛季的胜率,并以 2023/24 赛季的成绩为基准。

关注【索引目录】服务号,更多精彩内容等你来探索!

探索了如何预测英超球队在 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()

为什么这很重要

  • 这种方法不能预测准确的结果,但可以为每个团队提供可靠的概率概况。
  • 这有助于分析师和球迷了解球队的表现趋势。
  • 可以通过添加球员级别数据、主场/客场影响、伤病或转会影响来改进该模型。

最后的想法

这是一次将体育与数据科学相结合的有趣探索。将历史数据与概率论相结合,可以带来比仅仅依靠“直觉”更深刻的洞察。


关注【索引目录】服务号,更多精彩内容等你来探索!


【声明】内容源于网络
0
0
索引目录
索引目录是一家专注于医疗、技术开发、物联网应用等领域的创新型公司。我们致力于为客户提供高质量的服务和解决方案,推动技术与行业发展。
内容 444
粉丝 0
索引目录 索引目录是一家专注于医疗、技术开发、物联网应用等领域的创新型公司。我们致力于为客户提供高质量的服务和解决方案,推动技术与行业发展。
总阅读12
粉丝0
内容444