PROJECT · 2026
CS2 职业比赛胜率预测:从 Elo 到一个可复现的校准系统
用 68,523 场职业比赛做 CS2 胜率预测,log loss 从 0.6290 降到 0.6204,并诚实报告了两个失败的改进假设。
这是什么
给定任意两支 CS2 战队、赛制和比赛时间,输出:
- 校准过的胜率与 95% 区间
- 理论价格与参考价
- 按双方图池强弱自动 ban/pick 的地图推演,以及每张图的胜率
- 可选的资金配置建议(凯利公式 + 蒙特卡洛回撤/破产概率)
整套东西是可复现的:数据快照有 SHA-256,随机种子固定,一条命令重训,另一条重跑所有图表。
数据
| 项 | 数值 |
|---|---|
| 比赛 | 68,523 场(去重后,原始 69,509) |
| 时间跨度 | 2015-11 – 2026-10 |
| 战队 | 4,564 支 |
| 地图 | 56,730 张(2023 年后 14,449 张) |
| 新闻 / 抽取事件 | 1,097 篇 / 273 条 |
三个来源合并(hojlund、HLTV 抓取、Kaggle),难点不在抓取而在对齐:队名有 95 组大小写/后缀变体,还有数据源把单图比分写进系列赛比分的 bug,导致 BO1 被误标成 BO5——修正后 BO5 从 11,175 场降到 684 场。
模型
四层:
- 队伍 Elo:净胜图数作为修正因子,长期不参赛向 1500 衰减(半衰期 180 天)。
- 地图 Elo:每队每图独立评分,样本不足 5 场时向队伍评分收缩。
- veto 模拟:按「相对强度」ban 弱图、pick 强图,再用 DP 把逐图胜率合成系列赛概率。
- 逻辑回归:带时间权重(半衰期 1500 天)和 Platt 校准。
外加新闻事件抽取——只用大模型做结构化事件(转会、伤病、教练变动),概率完全由统计模型给,这条边界是刻意守住的。
结果
| 模型 | 特征数 | 2025-08 | 2026-09 | 平均 |
|---|---|---|---|---|
| Elo 基线 | 1 | 0.62999 | 0.62797 | 0.6290 |
| 逻辑回归 | 20 | 0.62235 | 0.62163 | 0.6220 |
| + 地图特征 | 27 | 0.62155 | 0.62057 | 0.6211 |
| 推荐特征集 | 25 | 0.62076 | 0.62011 | 0.6204 |
准确率 65.1% / 65.4%,期望校准误差 0.85% / 1.89%。梯度提升树(0.6278)反而更差——说明现有特征基本是线性可加的。
两个阴性结果(更有意思的部分)
1. 赛制/年份特征是负资产。
留一法实验显示,把 is_bo1、is_bo5、tier_major、lan、year 这组去掉后,两个切分的 log loss 分别下降 0.00055 和 0.00024。原因是年份和赛事层级在跨期评估里编码了时代漂移——模型学到的是「某年某级别比赛更容易爆冷」,不可迁移。
据此砍到 25 维,三个切分全部改善,平均 0.0014。
2. 两个业务假设都不成立。
- 按 1/3/5 张地图分别建模:一升一降,净收益约等于零。三种赛制的概率来自同一批队伍、同一批地图评分,相关性太高,加进去是冗余维度。
- 分析师/复仇效应(近期输给同一对手后再次相遇会更强):32,456 场再相遇,上次赢家重复获胜 58.23%,Elo 期望 58.42%,差 −0.002,置信区间跨零。看起来最像复仇的「热门重复获胜低于期望 3.7%」,在全样本同样存在(弱队超期望 6.4 个点)——那是 Elo 过度自信,校准后就吸收了。
把这两个假设证伪写进论文,比硬凑一个涨点的特征诚实得多。
系统
- 命令行:
python -m csgopred predict -a Vitality -b Spirit --format bo3 - HTTP API:四个只读接口,返回 JSON
- 界面:中文
/、英文/en,同一套 API;首页有地图推演和驱动因素 - 每日更新:抓赛果 → 判断增量 → 需要时重训 → 写当日报告
复现与投稿
python repro/make_snapshot.py # 校验数据/模型哈希
python repro/train.py # 重训并输出 repro/results.json
python experiments/decompose.py # 重跑归因实验
论文投 Journal of Statistics and Data Science in Sports(JSDSS,钻石开放获取,不收版面费),因为它的三条创刊原则——开放获取、可复现、把体育当实验室——和这个项目对得上。
仓库
代码:<https://github.com/Aokua/csgopred>
里面包含完整代码(注释已英文化)、6 个实验脚本、数据快照(Git LFS,198 MB)、中英文论文、Quarto 复现稿,以及 MIT + CC BY 4.0 双许可。
数据只用于研究,不构成任何投注建议。