模型考古 · 第 1 季:第 08 篇《10 万场基线是怎么攒出来的》

上一篇说了,一个赛季的数据不够用,得攒够 128 场以上才能把 λ 估到 5% 误差。

于是问题来了:支撑整个模型的那批历史数据,到底是怎么来的?

这一篇我不讲技术细节,就讲一件事——它的成本。因为这是我做这个项目之前完全没预估到的部分。

一、我以为:爬点数据而已

最初的设想很简单:找几个公开数据源,把历史比分爬下来,按联赛分组,算平均值,存起来。

这个设想不能说错,但它把整个过程想得太线性了。实际做完,我把它分成了四段,每一段都有各自要命的地方。

二、第一段:采集

我手上现在这批基线库,最终的规模是:

要凑齐这 74,291 场,需要每一场都有:最终比分、半场比分、主客队名、联赛归属、比赛日期。

看起来是五个字段,不多。但问题在于跨赛季的一致性。

举个例子:一支球队在这个赛季叫 A,下个赛季换了赞助商或者译名变了,在数据里叫 B。如果你按名字做主键,它会被当成两支球队,各自的样本都被砍一半。

我后来专门建了一张队名别名表来解决这个问题。但别名表本身需要维护,而且它永远维护不完——新赛季总会有新球队、新译名。

另外还有升降级的问题。一支球队降级了,下个赛季它不在样本里,再升上来的时候,中间断了一截。它的历史数据要不要接着用?用的话,中间那段时间它的水平可能变了;不用的话,样本又少了。

74,291场基线库的构成

三、第二段:清洗

采集完不等于能用。清洗阶段我踩的坑,比采集阶段多。

第一个坑:口径不一致。

不同数据源给的时间、联赛名、队名格式都不一样。有的用中文译名,有的用英文,有的带城市名有的不带。要统一成一套主键,得做大量映射。

我后来做过一次匹配率检查:312 场比赛,跨表对齐之后只匹配上 176 场,匹配率 56%。也就是说,接近一半的数据因为名字对不上而被丢弃了。

第二个坑:异常值。

有些场次的比分明显不合理(比如录入错误),有些场次是特殊性质(友谊赛、延期补赛、空场比赛)。这些如果不剔除,会污染基线。

但要剔除就得先定义"什么是异常",而定义本身又是个判断——定得太松等于没剔,定得太紧会误伤正常数据。

第三个坑:赛制变更。

有些联赛中途改过赛制(比如增加季后赛、改变升降级规则),导致前后两个时期的样本性质不同。这类断裂如果不处理,等于把两种数据混在一起算平均。

一套基线库要经历的四道工序,最贵的是第③步

一套基线库要经历的四道工序,最贵的是第③步

四、第三段:校准(这段最要命)

采集和清洗是一次性的辛苦,校准是重复的辛苦。

为什么是重复的?因为校准不是做一次就完了。你拿到 74,291 场,算出各队的 λ,然后你得验证这些 λ 对不对。验证的方法包括:

按时间切分。 用前 8 个赛季的数据估 λ,在第 9 个赛季上验证。如果效果差,说明要么过拟合,要么有结构性变化。

按联赛切分。 每个联赛单独算一套基线,不能把所有联赛混在一起。

按档位切分。 强队、中游、下游分开看,因为它们的分布形态不一样。

我做过一次分档检验,发现了一个让我不太舒服的结果:

一条在总体数据上看起来很有效的规则,拆到 8 月能提升 27.9 个百分点,到 9 月变成负 4.2。

方向反了。

这意味着:如果我当初只跑了某一个月的数据就下结论,我会得到一个完全错误的自信。而这种事,只看总体数字永远发现不了。

所以校准这件事,本质是:把同一件事,用不同的切法重复做很多遍,直到它在每一种切法下都站得住。

五、第四段:验证

最后一段是持续性的。基线库建完之后,它不是静态的——每个新赛季都会产生新数据,你得决定要不要把它并入基线、并入之后要不要重算。

而且基线会老化。一支球队换了教练、卖了核心球员,它的历史 λ 还有多少参考价值?这是个没有标准答案的问题。

六、所以这份清单到底有多长

经常有人问我,能不能给一套现成的参数直接用。

我一般会说:可以,但没什么用,然后给一份清单。这份清单大致是这样:

采集层

清洗层

校准层

验证层

这还只是"要做什么",没算"每一件要做多少遍"。

七、我想说的一个反直觉的点

很多人(包括当时的我)会觉得,这类工作的难点在算法。

实际做下来,我的体会是:难点在数据,而且难在"重复"这两个字上。

算法你可以查论文、可以问 AI,一个有经验的人几天就能写出一个像样的模型。但数据这件事,没有捷径——它需要的就是把同一件事重复做很多遍,直到你敢相信它。

而且这里有个很残酷的算术:

你辛辛苦苦攒完 12 个赛季、校准完所有参数,最后得到的可能只是"50% 出头"的判断水平,以及一个必须每月重算、持续维护的东西。

这不是吓唬人,这是我在第 02 篇就给出的实测结论:312 场里,价值比最高的一场是 0.743,而追平市场的门槛是 0.747。一次都没摸到。


一句话:算法能查得到,数据查不到——这套东西真正的门槛,是同一件事你愿意重复做多少遍。

>>> 下期预告:第 09 篇《联赛性格:德甲 3.05 球,意甲 2.51 球》—— 攒完 10 万场,第一个能直接看到的结论就来了:每个联赛的进球分布,差别大得出乎意料。

*本系列为数据统计与概率知识科普,所有数据来自公开比赛结果的统计,不构成任何投注建议。*

展开阅读全文

更新时间:2026-10-04

标签:游戏   基线   模型   联赛   数据   赛季   比分   队名   样本   切分   球队   赛制

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight All Rights Reserved.
Powered By 61893.com 闽ICP备11008920号
闽公网安备35020302035593号

Top