
2026世界杯模型 v1.2 升级日志:小组赛蒙特卡洛 + 数据洗牌
目录
模型不是一次性产物。每一次资格赛结束、每一次回测、每一次架构反思,都是改进的契机。
今天我们发布 FYT 2026世界杯夺冠概率模型 v1.2——距离上一版 v1.0 三个月。这是一次结构性升级,但与你可能在某些早期草稿中看到的方向不同:我们没有去重构权重、没有引入温度缩放、没有拍脑袋加主办国系数。
我们做的是两件更基础的事:
- 修复了数据——资格赛已经结束三周,输入文件还停留在 2 月。意大利已经没戏了,凭什么还在概率表里占位
- 新增了赛制感知——v1.0 给出的是 48 队夺冠概率排名,但读者真正想问的是「我支持的球队能不能小组出线」。v1.2 直接回答这个问题
下面把每处改动、为什么改、回测验证逐一说清。
改动一览
| 项目 | v1.0(2026-02-19) | v1.2(2026-05-17) |
|---|---|---|
| 评分公式 | 五因子加权 Power Score | 不变 |
| 因子权重 | Elo 30 / xG 25 / xGA 20 / 经验 15 / 年龄 10 | 不变 |
| 输入球队 | 48 支(含 9 支 projected) | 48 支(全部 qualified) |
| Elo 数据 | 2026-02-06 截止 | 2026-05-17 全量刷新 |
| 小组赛模拟 | 无 | ✅ 新增:Elo 驱动蒙特卡洛 10,000 次 |
| 晋级概率输出 | 无 | ✅ 新增:p_group_winner / p_advance_ko 等 |
| 历史回测 | 无 | ✅ 新增:2022 小组赛 Brier 0.185 |
| 夺冠概率分布 | 顶级 ~3.3%(平坦) | 仍 ~3%(待 v1.3 淘汰赛模拟重写) |
改动一:输入数据按资格赛结果洗牌
v1.0 的 team-inputs.yaml 写于 2 月,当时 11 支球队是 projected(基于积分榜估算)。4 月资格赛全部结束,结果与估算有出入。
11 支球队被移除
| 球队 | 状态 |
|---|---|
| 🇮🇹 意大利 | 欧洲附加赛连续两届出局 |
| 🇩🇰 丹麦 | 欧预赛附加赛失利 |
| 🇷🇸 塞尔维亚 | 欧预赛附加赛失利 |
| 🇵🇱 波兰 | 欧预赛小组失利 |
| 🇺🇦 乌克兰 | 欧预赛附加赛失利 |
| 🏴 威尔士 | 欧预赛附加赛失利 |
| 🇨🇲 喀麦隆 | 非洲附加赛失利 |
| 🇳🇬 尼日利亚 | 非洲预赛 |
| 🇯🇲 牙买加 | 中北美预赛 |
| 🇨🇷 哥斯达黎加 | 中北美预赛 |
| 🇭🇳 洪都拉斯 | 洲际附加赛失利 |
11 支新球队入正赛
| 球队 | 来路 | Elo |
|---|---|---|
| 🏴 苏格兰 | 欧预赛 | 1878 |
| 🇸🇪 瑞典 | 欧预赛附加赛 | 1719 |
| 🇨🇿 捷克 | 欧预赛附加赛 | 1726 |
| 🇧🇦 波黑 | 欧预赛附加赛 | 1594 |
| 🇵🇦 巴拿马 | 中北美预赛 | 1737 |
| 🇭🇹 海地 | 中北美预赛 | 1532 |
| 🇨🇼 库拉索 | 中北美预赛(首次参赛) | 1436 |
| 🇯🇴 约旦 | 亚洲预赛(首次参赛) | 1690 |
| 🇬🇭 加纳 | 非洲预赛 | 1505 |
| 🇨🇻 佛得角 | 非洲预赛(首次参赛) | 1549 |
| 🇨🇩 民主刚果 | 非洲预赛 | 1655 |
库拉索、约旦、佛得角三队首次踏上世界杯,本身就是这届赛事的故事线。
48 支球队的 Elo 同步从 eloratings.net 全量刷新,例如:
- 西班牙从 2010 → 2165(卫冕欧洲杯后强势)
- 厄瓜多尔从 1810 → 1933(南美预赛超水准发挥)
- 哥伦比亚从 1870 → 1975
- 德国从 1960 → 1923(持续阵痛)
- 卡塔尔从 1640 → 1425(赛事后大幅滑落)
11 支新球队的 xG/世界杯经验/阵容年龄字段是基于 Elo 区间与赛史的首轮估算,在 confidence_note 中显式标记。下一周期 cron 跑之前会刷到 FBref 与 Transfermarkt 的最新数据。
改动二:新增 Elo 驱动的小组赛蒙特卡洛
这是 v1.2 的真正升级——模型现在能告诉你「谁能小组出线」,而不只是「谁更强」。
为什么需要这一层
v1.0 输出 48 队夺冠概率排名,最强队(西班牙、阿根廷)也只占约 3%。这个数字在数学上不错(48 队和为 100%),但在沟通上没意义——读者想知道的是:
- 我支持的球队能不能小组出线?
- A 组哪两队最可能晋级?
- 巴西在 C 组的难度有多大?
这些问题需要赛制结构。v1.2 的答案是直接模拟整个小组赛。
怎么模拟
对每场小组赛,根据双方 Elo 计算胜/平/负概率:
expected_a = 1 / (1 + 10^((Elo_b − Elo_a) / 400)) ← 经典 Elo 胜率预期
P(平) = max(0.05, 0.30 × exp(−|Elo_a − Elo_b| / 500)) ← 缝隙感知和率
P(A 胜) = expected_a × (1 − P(平))
P(B 胜) = (1 − expected_a) × (1 − P(平))
关键点是缝隙感知和率:
- 实力相近时(Elo 差 < 100),和率约 30%
- 实力差距 500 分以上,和率掉到 5% 下限
恒定使用 26% 历史均值会高估强弱悬殊比赛的平局率(西班牙踢库拉索几乎不会握手言和)。缝隙感知模型更贴近实际比赛分布。
之后独立采样比赛比分(净胜球以 Elo差/200 为均值的正态分布抽样后取整),用于积分差/进球数的并列规则。比分采样只为并列裁决服务,不作为预测每场具体比分发布。
整轮模拟跑 10,000 次:
for sim in range(10_000):
模拟 72 场小组赛
统计每队的积分、净胜球、进球数
按 [积分 → 净胜球 → 进球数 → 抽签] 排出每小组的 1/2/3/4 位
所有小组第三按同一规则跨组排序,取前 8 晋级 R32
汇总 10,000 次模拟,得到每队 9 个概率/期望值字段
10,000 次跑完只要约 1.4 秒,所以每周 cron 都能跑。
输出新增的 group_stage 字段
predictions.json 中每支球队的 group_stage 块:
{
"p_group_winner": 0.82,
"p_runner_up": 0.16,
"p_third": 0.02,
"p_fourth": 0.00,
"p_advance_ko": 0.99,
"p_eliminated": 0.01,
"exp_points": 7.73,
"exp_gd": 6.07,
"exp_gf": 7.5
}
这一层有实质区分度。当前 2026 输入下的晋级概率分布:
| 区间 | 球队数 | 球队 |
|---|---|---|
| 95–100% | 5 | 西班牙、阿根廷、英格兰、厄瓜多尔、瑞士 |
| 90–95% | 7 | 法国、巴西、德国、荷兰、克罗地亚 等 |
| 60–90% | 14 | 大量欧洲、南美中游球队 |
| 30–60% | 14 | 亚非中游 + 部分欧洲附加赛球队 |
| 10–30% | 8 | 弱组球队 |
不再是一片 3%。
历史回测:2022 世界杯小组赛
我们用 2022 世界杯小组赛(32 队 × 8 组 × 前 2 出线的旧赛制)做回测。Elo 用 2022 年 11 月赛前快照,小组组成、实际出线集都是公开历史数据。
详细报告:doc/wc-model-backtest-2022.md
头条指标
| 指标 | v1.2 小组赛模拟 | 「Elo 排名硬选」基线 | 「全部 50/50」基线 |
|---|---|---|---|
| Brier 评分(晋级概率) ↓ | 0.185 | 0.313 | 0.250 |
| 小组第一命中(8 组) | 6 / 8 | — | — |
| 前 16 晋级集(按概率排序) | 11 / 16 | — | — |
Brier 评分 = 平均(预测概率 − 实际 0/1)²,越小越好。v1.2 显著优于两个基线。
校准曲线
如果模型说「X% 概率晋级」,那 X% 的同概率球队是否真的晋级?
| 预测晋级概率区间 | 球队数 | 实际晋级率 |
|---|---|---|
| 0.0–0.2 | 5 | 0%(0/5)✓ |
| 0.2–0.4 | 6 | 50%(3/6) |
| 0.4–0.6 | 9 | 56%(5/9) |
| 0.6–0.8 | 7 | 43%(3/7)❗ |
| 0.8–1.0 | 5 | 100%(5/5)✓ |
两端校准良好:高置信度晋级预测全部命中,低置信度淘汰预测全部命中。
中段(0.6–0.8)跑偏明显——因为 2022 这个区间里挤着比利时、德国、乌拉圭、丹麦、厄瓜多尔,5 支「按 Elo 该出线」的球队全部出局。这是历史性的爆冷年份:
| 球队 | 预测晋级概率 | 实际结果 |
|---|---|---|
| 乌拉圭 | 68.0% | 出局 |
| 比利时 | 66.7% | 出局(黄金一代谢幕) |
| 德国 | 66.2% | 出局(开局输给日本) |
| 丹麦 | 57.2% | 出局 |
| 厄瓜多尔 | 62.2% | 出局(最后一战被塞内加尔逼出局) |
Elo 类模型本身的天花板:赛前统计无法预测临场战术革命、王朝末路、心理崩盘。这不是 v1.2 的缺陷,是任何赛前模型的共有局限。
我们之所以仍然报告这一数据,是因为透明度比安慰更重要。如果你把模型用作「锁定大概率事件 + 警惕中段不确定性」的工具,它的价值很明确。
没改的部分 —— 以及为什么
评分公式(Power Score)不变
五因子加权评分照旧。没有移除任何因子,没有调整任何权重,没有加入主办国系数。
为什么?因为我们没有找到充分理由。
「世界杯经验」「阵容年龄适配度」这些因子或许信号弱,但移除前应当先用数据说话——而不是听一句「学术文献认为信号弱」就动刀。我们手头目前没有时间做严格的因子归因实验,所以选择保守保留,先把更确定的事做完。
主办国效应同样保留为后续工作。home_advantage 字段还在输入里(美/加/墨 = 0.8),但 v1.2 的小组赛模拟未读取它。等 v1.3 的淘汰赛模拟一起加入会更系统。
夺冠概率仍然「平坦」
win_probability_pct 字段还是 v1.0 的直接归一化:48 队 Power Score 之和除以 100%,所以最强队也只有约 3%。
这个数字不好看,但强行用数学手段(温度缩放、softmax 校准等)拉伸它是治标不治本:
- 真正的夺冠概率应该从「在 10,000 次完整赛制模拟中赢得冠军的频率」反推
- 这需要先有淘汰赛模拟(v1.3 路线图)
- 在没有赛制模拟的前提下,用一个温度参数 T 强行把最强队拉到 13% 只是数字游戏
所以 v1.2 的态度是:这一层不动,等 v1.3 真正修复。
读者在 v1.3 落地前,建议把注意力放在新增的 group_stage.p_advance_ko 字段上,而不是夺冠概率字段。
v1.3 路线图
已知改进项:
- 淘汰赛蒙特卡洛模拟 — 从小组赛模拟结果派生 R32 对阵,模拟单场淘汰(含加时和点球大战),输出基于赛制的真正夺冠概率,替代 v1.0 的归一化字段
- 主办国效应应用 — 把
home_advantage字段作为 Elo 加成施加到美/加/墨在本国场地的小组赛 - DB schema 扩展 —
season_predictions表新增p_group_winner/p_advance_ko/exp_group_points列,让小组赛模拟数据进入查询层 - 新球队输入精化 — 11 支新晋级球队的 xG / WC 经验 / 阵容年龄字段从首轮估算切到 FBref + Transfermarkt 实测数据
预计 6 月赛前完成 v1.3。
完整方法论
模型架构、评分公式、模拟流程、SHA-256 可复现机制、回测指标细节,请见 2026世界杯夺冠概率模型方法论 v1.2。
当前模型输出请见 48队夺冠概率排名。
免责声明:本文与模型输出仅供参考,不构成任何投注建议。 方法论透明度:所有改动、回测数据、源代码、计算结果均可复现。模型代码在
scripts/assets/wc-prediction-model.py,回测代码在scripts/backtest/wc-model-backtest.py,每次运行的source_snapshot是 16 位 SHA-256 指纹。