阅读时间 6 分钟

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

Poisson 进阶篇
用Poisson泊松分布做足球比分概率:新手第一课
把进球期望转换成比分概率

上一篇我们在讲泊松分布时,我们已经知道一个基本流程:

进球期望
-> 比分概率表
-> 主胜、平局、客胜、总进球、双方进球

这个流程很适合入门。但如果继续往前走,你会遇到一个问题:足球比赛的低比分结果,常常没有普通 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 的比分矩阵有时需要在低比分区域做修正。

对新手来说,先理解这件事就够了。完整参数拟合后面再讲,第一步先把模型升级的方向看清楚。