上个赛季,在我永无止境地量化《守望先锋》的过程中,我构建了等级分(Elo)制度,追踪各支《守望先锋联赛》战队的实力变化。不幸的是,虽然我的方法能得出漂亮的图表,但它其实漏洞百出——因为我错误地估计了它的准确性。但我们不能困守过去,应当放眼未来。我们来看看重建并改良后的新体系:《守望先锋联赛》Elo等级分制度2.0。在OLE 2.0中,我修正了过去的各项错误并加入了FiveThirtyEight的NBA Elo等级分和NFL Elo等级分体系,并根据《守望先锋联赛》的生态环境进行了专项调整。
Elo等级分模型是一个零和系统:当两支队伍彼此相遇,胜者获得的Elo等级分将等同于败者失去的Elo等级分。两队之间交换的Elo等级分数值取决于系统中的一个波动性常数,以及根据两队的Elo等级分计算出的预期胜率:
Elo等级分变化值 = K(1 – 预期胜率)
FiveThirtyEight的Elo等级分体系在简单地计算之外还采取了其他方法以提高精确度。首先是“年间不变比例”(CT),前一赛季的部分Elo等级分将保留到下一赛季。在传统体育中,这有助于调整系统,以更好地分析战队经过休赛期的交易、选秀和其他变化后的整体实力。
在OLE 2.0中,我测试许多K和CT的组合,选择了布莱尔得分最佳、单局和全场比赛预测最为准确的一组数值。我选定的K值为47,CT值为60%。60%的不变比例应用于每次版本更迭时,而非每个赛季,因为《守望先锋联赛》中考虑的不仅是阵容变化,还需要考虑游戏自身的改变。举个例子,温哥华泰坦队在第1阶段结束时的Elo等级分为1183.6,这意味着他们在第2阶段开始时Elo等级分为(1183.6 * 0.6) + (1001 * 0.4) = 1110.6。
根据FiveThirtyEight的规则,新加入角逐的战队的Elo等级分会略低于平均水平。《守望先锋联赛》扩充了八支战队,所以我觉得也需要这么做。在OLE 2.0中,新战队的初始Elo分只有990——平均分为1000——代表联赛新军的实力相对难以确定。这降低了系统平均值,但我也采用了FiveThirtyEight用于维持系统长期均值的方法:在新版本到来时,将各支战队的Elo等级分设置为略高于均值(1001,参见前文的CT计算)。
最后我还从FiveThirtyEight的体系中借鉴了一个元素,并在经过调整后将其融入了OLE 2.0:获胜幅度(MoV)修正值。MoV的目标是奖励压倒性地击败对手的战队,因为在许多地图上,1-0的胜利比胶着的5-4更能体现出战队差距。
OLE 2.0使用了基于团战胜率差和队伍死亡差的两级MoV系数。并不是每张地图的获胜者都能在团战胜率中脱颖而出(经常会出现的平手情况),此时就会使用队伍死亡差。
MoV必须能够减少自相关作用——当有望获胜的战队以大比分获胜时就会发生这种事。战队有望获胜并不是没有原因的,所以未经调整的MoV可能会错误地夸大获胜战队的Elo等级分。FiveThirtyEight系统会让同等分差获胜的劣势方获得更高的系数,以此解决MoV的自相关问题。在我的系统中,各地图的分差(SD)从0.3到5不等。这些获胜幅度会通过以下公式进行计算(改编自FiveThirtyEight的NFL MoV计算公式):
log(1 + SD) * 1/(elo分差值 * 0.001 + 1)
在OLE 2.0中,2.5的分差对Elo等级分为100的劣势方意味着1.4的MoV,而对优势方则为1.15左右。现在,我们已经定义了OLE 2.0的方方面面,现在来看看今年的各支战队表现如何吧:
第1阶段充满了机遇:8支新战队以990的Elo分加入了联赛,期望能从已有的高分战队身上夺取Elo分。然而,真正突飞猛进的只有一支新战队:温哥华队。泰坦队一路夺得第1阶段的冠军,身后尽是被击败的对手,但他们在阶段决赛中如果面对纽约九霄天擎队,还是很有可能翻车的——但首尔王朝队抢先一步解决了这个威胁。请注意九霄天擎队Elo等级分的骤降,而首尔队的则直线上升:
这就是九霄天擎队在阶段复赛负于王朝队的结果。在那场比赛之前,无论是休闲粉丝还是硬核专家,都觉得王朝队必定会在第一轮就被淘汰。大家都预测错了,但错得有多离谱呢?
OLE 2.0还打开了新的分析大门:预测。如果我有两队的Elo等级分、一整套战绩数据库,以及更新Elo分的系统,我就能用过去的战绩预测未来。为此,我使用了蒙特卡洛模拟。*
* 蒙特卡洛模拟的起源真的超酷,涉及了最初的ENIAC计算机和曼哈顿计划。如果你有闲暇时间,不妨了解一下。
蒙特卡洛模拟能根据随机输入的数据,离散地计算出系统的可能结果。假设你有一对六面骰,你想知道掷出7的可能性有多大。你可以用统计学的方法,通过大量数学计算来得出结果。你也可以扔上个10000次,看看有多少次掷出了7。蒙特卡洛模拟就是后者。
我的蒙特卡洛模拟使用了OLE 2.0的框架,根据Elo差值、平局率和获胜幅度,不停地投掷虚拟骰子。
从OLE 2.0系统中取两个起始Elo等级分。
进行一局假想的比赛:根据Elo差值,随机确定胜利方、随机从已知获胜率中取样、如果地图支持平局,还要计算可能的平局。
在OLE 2.0系统中,根据当局比赛结果,更新两队的Elo等级分。
重复第2步和第3步,直到决出本场比赛的胜利者(4局,如果平局则进行第5局)。
输出比赛的得分结果。
重复第1步至第5步,循环10000次。
在该模拟迭代了10000次后,我不仅能掌握各队的胜场数,还掌握了4-0、3-2等各场比赛的具体场次数。我在上周的比赛中测试了这种预测法,其结果准确得有些可怕:在16场比赛中,预期获胜方赢下了13场比赛,而胜率50.5%的波士顿队以2-3的比分惜败于杭州队。它甚至成功预言了英勇队会在对战亚特兰大队时获得赛季首胜!另一方面,它认为成都队有60%的概率战胜上海队,多伦多队击败费城队的胜率也有56%。
这个模型的准确度可能比上周的连战连捷要稍微低一些。我用去年第4阶段的比赛测试了这个方法,那个阶段对OLE 2.0来说波动相当大:布丽吉塔正式发布、纽约队开始式微、达拉斯燃料队从垫底一路攀升,其他意料之外的结果还有很多。即便如此,在全部60场比赛中,该模型有40次成功预测了胜利者。
我们回到最初的问题:首尔队在第1阶段决赛中掀翻纽约队,这有多大的影响呢?在那场比赛前,首尔队的Elo等级分为1015.2,纽约队作为当时的联赛最佳,Elo等级分为1183.6。将数据输入模拟器中(并根据决赛赛制,对地图进度进行调整),返回的结果如下:
纽约队的胜率高达81.86%,而4-0碾压王朝队的概率高达40.73%。王朝队最终以3-1获胜,该情景的出现几率仅有6.82%。
九霄天擎队在阶段复赛意外折戟,这确实出人意料,但没关系。如果算法能准确预测每一场比赛,那么比赛本身还有什么意义?
我获得了新的玩具,我们在来到第3周的同时也可以玩个游戏:你能比模拟更聪明吗?这是下一周的三场非常有趣的比赛。你的预测和算法相比结果如何呢?
第1场比赛:温哥华泰坦队(1132.9) vs. 达拉斯燃料队(1054.5)
原因:达拉斯队面对第2阶段的最大考验。
模拟结果:
第2场比赛:洛杉矶英勇队(939.7) vs. 华盛顿正义队(903.7)
理由:双方都在争夺本赛季的第二场胜利。
模拟结果:
第3场比赛:杭州闪电队(998.3) vs. 广州冲锋队(882.3)
原因:广州队避免创下连败局数纪录的最后机会。
模拟结果:
更多相关资讯请关注:守望先锋专区