Dixon-Coles 模型:为什么足球低比分需要单独修正?

上一篇我们在讲泊松分布时,我们已经知道一个基本流程:
进球期望
-> 比分概率表
-> 主胜、平局、客胜、总进球、双方进球
这个流程很适合入门。但如果继续往前走,你会遇到一个问题:足球比赛的低比分结果,常常没有普通 Poisson 那么规整。
0-0、1-0、0-1、1-1 这些比分,在足球里非常关键。它们不只是几种普通比分,还会影响平局概率、总进球概率、双方进球概率。Dixon-Coles 模型最适合接在 Poisson 后面讲,因为它做的核心事情,就是对这些低比分做修正。
说人话
普通 Poisson 的想法是:
主队进球数按一个分布算
客队进球数按一个分布算
两边组合成比分概率
这个逻辑清楚,但它有一个简化假设:主队进几个球、客队进几个球,基本可以分开算。
足球里有些低比分场景并不完全适合这样处理。
比如一场节奏很慢的比赛,双方都踢得谨慎,0-0 和 1-1 的概率可能会被普通 Poisson 低估或高估。又比如一支球队早早领先后收缩,比赛会变成另一种节奏,后面的进球分布也不完全独立。
Dixon-Coles 是在 Poisson 的比分矩阵上,对几个低比分格子做额外调整。
你可以把它理解成:
先用 Poisson 画出整张比分地图,
再重点修一下 0-0、1-0、0-1、1-1 这几个位置。
它修正的是哪些比分
Dixon-Coles 最常关注这四个比分:
| 比分 | 为什么重要 |
|---|---|
| 0-0 | 直接影响平局和小比分判断 |
| 1-0 | 影响主队小胜概率 |
| 0-1 | 影响客队小胜概率 |
| 1-1 | 影响平局和双方进球 |
这些比分在足球比赛里占比不低,尤其是防守强、节奏慢、双方实力接近的比赛。
如果模型在这些位置偏差很大,最后汇总出来的概率也会被带偏。
和 Poisson 的关系
新手可以这样区分:
| 模型 | 作用 |
|---|---|
| Poisson | 用进球期望生成整张比分概率表 |
| Dixon-Coles | 在 Poisson 基础上修正低比分区域 |
所以 Dixon-Coles 不是完全另起炉灶。它更像是 Poisson 的进阶版。
需要哪些数据
真正完整的 Dixon-Coles 模型通常需要历史比赛来拟合球队进攻、防守、主场优势和时间衰减。
对 NJSTATS API 用户来说,最小数据可以这样准备:
| 数据 | 用途 |
|---|---|
| 历史比赛列表 | 构建训练样本 |
| 比赛时间 | 按时间顺序训练,避免时间穿越 |
| 主队和客队 | 计算球队进攻、防守强度 |
| 最终比分 | 拟合模型和赛后回测 |
| 联赛 ID | 避免不同联赛环境混在一起 |
| 球队赛季统计 | 做入门版进球期望 |
这里有一点要特别清楚:最终比分可以用于历史训练和回测,但不能作为某场未来比赛的赛前输入。
用 NJSTATS API 怎么接
可以不急着完整拟合所有参数。
先做一个轻量流程:
读取历史比赛
-> 按联赛和时间过滤
-> 计算主队、客队的进球期望
-> 用 Poisson 生成比分矩阵
-> 对 0-0、1-0、0-1、1-1 做轻量修正
-> 保存赛前概率
-> 比赛结束后用比分回测
如果以后做正式版,再升级成:
历史比赛
-> 参数拟合
-> 时间衰减
-> 主场优势
-> 球队进攻/防守强度
-> 生成未来比赛概率
一个轻量 Python 示例
示例代码在:
football-model-blog/demos/dixon-coles-lite/example.py
运行:
python3 football-model-blog/demos/dixon-coles-lite/example.py
它会先生成 Poisson 比分矩阵,再对低比分区域做轻量调整,最后输出概率最高的几个比分。
这不是完整生产模型,只是一个演示:让你明白修正发生在哪里。
为什么要小心解释它
Dixon-Coles 听起来比 Poisson 高级,但不要把它当成万能答案。
它依然依赖历史数据质量,也依赖样本量。如果某个联赛数据很少、球队变动很大、比赛环境变化明显,模型输出也会不稳定。
它还有一个新手容易忽略的问题:时间顺序。
做历史回测时,某场比赛只能使用它开赛前已经发生的比赛去计算参数。如果你拿整季数据去预测赛季中间的比赛,结果看起来可能不错,但其实已经偷看了未来。
适合放进哪些场景
Dixon-Coles 适合做这些内容:
- 比分概率页
- 平局概率分析
- 低比分倾向分析
- 总进球概率分析
- 模型教程里的 Poisson 进阶篇
同样是比分概率,模型可以从简单版一步步升级。
下一步做什么
Poisson 和 Dixon-Coles 都还是偏统计模型。
它们主要围绕进球数和比分分布展开。下一步可以进阶 Elo,因为 Elo 换了一个角度:不先算比分,而是先给球队一个动态强度评分。
这样你会慢慢建立一张模型地图:
Poisson:从进球期望到比分概率
Dixon-Coles:修正低比分
Elo:跟踪球队强度
XGBoost:把多种特征放进分类模型
这张地图比单独一个模型更有用。
总结
Dixon-Coles 最适合放在 Poisson 之后。
它的作用是提醒大家:足球低比分很重要,普通 Poisson 的比分矩阵有时需要在低比分区域做修正。
对新手来说,先理解这件事就够了。完整参数拟合后面再讲,第一步先把模型升级的方向看清楚。

评论交流