用Python案例检验泊松分布预测进球是否有效
泊松分布是足球进球预测中最经典的模型之一,下面我用一个完整的Python案例来实证检验它到底有没有效。

核心思想
泊松分布假设:单位时间内进球数独立、随机,且平均进球率 λ 恒定。
$$P(X=k) = \frac{\lambda^k e^{-\lambda}}{k!}$$
在足球里,如果一支球队场均进 1.5 球,那么它进 0、1、2、3... 球的概率就可以用泊松公式算出来。
完整实战代码
准备数据(模拟真实比赛结果)
import numpy as np
import pandas as pd
from scipy.stats import poisson, chisquare
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# 模拟:某球队过去 100 场比赛的进球数
np.random.seed(42)
真实场均 = 1.6
goals = np.random.poisson(lam=真实场均, size=100)
# 统计实际进球分布
实际分布 = pd.Series(goals).value_counts().sort_index()
实际分布 = 实际分布.reindex(range(0, 7), fill_value=0)
print("实际进球分布:")
print(实际分布)
用泊松分布拟合
lam = goals.mean() # 用样本均值估计 λ
print(f"\n估计的 λ = {lam:.3f}")
# 计算泊松预测的各进球数概率
k = np.arange(0, 7)
预测概率 = poisson.pmf(k, mu=lam)
预测频数 = 预测概率 * len(goals)
比较表 = pd.DataFrame({
'进球数': k,
'实际频数': 实际分布.values,
'泊松预测频数': 预测频数.round(1)
})
print("\n实际 vs 泊松预测:")
print(比较表)
卡方检验(关键一步)
# 合并尾部(保证每个格子期望频数 ≥ 5)
实际 = 比较表['实际频数'].values.copy()
期望 = 比较表['泊松预测频数'].values.copy()
实际_合并 = np.array([实际[0], 实际[1], 实际[2], 实际[3:].sum()])
期望_合并 = np.array([期望[0], 期望[1], 期望[2], 期望[3:].sum()])
chi2, p = chisquare(f_obs=实际_合并, f_exp=期望_合并)
print(f"\n卡方统计量 = {chi2:.3f}, p 值 = {p:.4f}")
if p > 0.05:
print("✅ 无法拒绝原假设:泊松分布拟合良好,预测【有效】")
else:
print("❌ 拒绝原假设:泊松分布拟合不佳,预测【存疑】")
可视化对比
plt.figure(figsize=(9, 5))
width = 0.38
plt.bar(k - width/2, 实际分布.values, width, label='实际频数', color='steelblue')
plt.bar(k + width/2, 预测频数, width, label='泊松预测', color='orange')
plt.xlabel('单场进球数')
plt.ylabel('场次')f'实际进球分布 vs 泊松分布 (λ={lam:.2f})')
plt.legend()
plt.xticks(k)
plt.tight_layout()
plt.show()
典型运行结果解读
假设输出如下:
| 进球数 | 实际频数 | 泊松预测频数 |
|---|---|---|
| 0 | 20 | 2 |
| 1 | 33 | 3 |
| 2 | 25 | 8 |
| 3 | 13 | 8 |
| 4+ | 9 | 9 |
卡方检验:p = 0.93 > 0.05
泊松分布与真实进球分布高度吻合,作为进球数预测模型是有效的。
什么时候"有效",什么时候"失效"?
✅ 有效的情形
- 预测单支球队单场进球数的大致概率
- 球队实力稳定、赛程均匀时
- 作为博彩、Fantasy Football 的基础模型
- 预测总进球数区间(如 P(≤2球))
❌ 失效/打折扣的情形
- 进球不独立——大比分领先后球队"收着踢",或落后疯狂进攻
- λ 不恒定——对手强弱差异大、伤病、主客场因素
- 低比分偏差——真实足球中 0-0、1-0 出现频率常高于泊松预测
- 过离散(Overdispersion)——方差 > 均值,此时应改用负二项分布
进阶验证(更严谨)
# 检验是否过离散:方差 / 均值
方差均值比 = goals.var() / goals.mean()
print(f"方差/均值 = {方差均值比:.3f}")
# 若明显 > 1,说明泊松假设偏乐观,考虑负二项分布
| 检验维度 | |
|---|---|
| 拟合优度(卡方) | 多数情况下 p > 0.05,拟合良好 |
| 实际预测准确率 | 约 50-60%(猜最可能比分) |
| 主要价值 | 提供概率分布,而非精确比分 |
| 改进方向 | 引入球队攻防强度(Dixon-Coles 模型) |
一句话结论:泊松分布对进球数预测在统计层面通常是有效的,但它假设过于理想化,实战中常需结合 Dixon-Coles 修正、主客场因子、球队攻防参数才能显著提升准确率。
需要我进一步给出 Dixon-Coles 模型 或主客场分参数的完整代码吗?
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播