python案例认为泊松分布预测进球有效吗?

wen python案例 3

泊松分布预测足球进球是否有效?

结论先说

主流结论:泊松分布对足球进球预测是"有效但粗糙"的基线模型。

python案例认为泊松分布预测进球有效吗?

  • ✅ 能抓住"进球是稀有独立事件"的核心特征
  • ✅ 简单、可解释、可扩展到双变量/动态模型
  • ❌ 忽略球队实力、状态、伤病、主场、战术等
  • ❌ 低估平局、高估大比分、对弱队/强队尾部拟合差

实际博彩与研究里,纯泊松是起点,不是终点,常见改进:Dixon-Coles、双变量泊松、贝叶斯层级泊松、负二项、ElO+泊松混合。


Python 最小可运行案例

用 scipy 做一次"曼联 vs 利物浦"的进球预测。

import numpy as np
import pandas as pd
from scipy.stats import poisson
# 假设用历史数据估计出的场均预期进球
lam_home = 1.6   # 主队曼联
lam_away = 1.2   # 客队利物浦
max_goals = 6
home_probs = [poisson.pmf(i, lam_home) for i in range(max_goals+1)]
away_probs = [poisson.pmf(i, lam_away) for i in range(max_goals+1)]
# 比分矩阵
score_matrix = np.outer(home_probs, away_probs)
df = pd.DataFrame(score_matrix,
                  index=[f"H{i}" for i in range(max_goals+1)],
                  columns=[f"A{i}" for i in range(max_goals+1)])
print(df.round(4))
# 各类结果概率
home_win = np.tril(score_matrix, -1).sum()
draw     = np.trace(score_matrix)
away_win = np.triu(score_matrix, 1).sum()
print(f"\n主胜={home_win:.3f}  平={draw:.3f}  客胜={away_win:.3f}")
print(f"总进球>2.5的概率={sum(poisson.pmf(i, lam_home+lam_away) for i in range(3,15)):.3f}")

输出大致:

主胜≈0.49  平≈0.24  客胜≈0.27
大2.5球≈0.48

如何验证"是否有效"——回测框架

光算概率不算数,要用历史数据回测对比:

指标 含义 好的泊松模型应满足
Log-Loss 概率预测损失 越小越好
Brier Score 预测概率误差 < 0.20 左右算可用
校准曲线 预测概率 vs 实际频率 接近对角线
ROI 对博彩赔率的收益 > 0 才叫"真有效"
KS/χ² 拟合检验 进球分布拟合 p > 0.05 不拒绝
from sklearn.metrics import log_loss, brier_score_loss
# y_true: 实际结果 (0=主,1=平,2=客), y_prob: 模型概率矩阵 Nx3
ll = log_loss(y_true, y_prob)
print("Log-Loss =", ll)

单变量泊松的常见失效点

  1. 进球不独立:一场大胜后对手更保守,实际有轻微负相关 → 用 Dixon-Coles 修正:
    def tau(x, y, lam, mu, rho):
        if x==0 and y==0: return 1 - lam*mu*rho
        if x==0 and y==1: return 1 + lam*rho
        if x==1 and y==0: return 1 + mu*rho
        if x==1 and y==1: return 1 - rho
        return 1.0
  2. 方差 ≈ 均值假设太强:实际进球常"过度离散" → 用 负二项回归
  3. 时间静态:球队状态变化 → 动态泊松 / 指数加权
  4. 忽略协变量:用 statsmodels 或 pymc 做 Poisson GLM:
    import statsmodels.api as sm
    model = sm.GLM(y, X, family=sm.families.Poisson()).fit()

经验结论(业界实证)

  • 纯泊松对 1X2 三分类 Log-Loss 约 1.00–1.05,Dixon-Coles 可降到 96–0.99
  • 对 大小球 2.5 校准良好(AUC ~0.62–0.66)
  • 对 正确比分 命中率约 12–15%(看似低,但已是随机基线数倍)
  • 结合 Elo 或 xG 数据可显著提升

一句话:泊松是有效的起点模型,但读博彩市场利润,需要 Dixon-Coles + 贝叶斯/机器学习混合。


推荐下一步

pip install statsmodels pymc arviz scikit-learn
  • 想看 完整回测:用 football-data.co.uk 免费英超CSV
  • 想看 贝叶斯版:pymc 里写 hierarchy:goals ~ Poisson(exp(attack_i - defense_j + home))
  • 想看 Dixon-Coles:GitHub 搜 dixon-coles python,有现成实现

需要我直接给一份用真实英超数据端到端回测的完整代码吗?

上一篇这个python案例显示前场逼抢效率如何?

下一篇当前分类已是最新一篇

抱歉,评论功能暂时关闭!