Glicko-2评级系统:Bug还是漏洞利用?

Par*_*roX 3 javascript php statistics chess rating

Glicko-2是国际象棋中使用的评级系统,但可用于许多其他情况.Glicko-2是对Glicko-1的改进,它解决了旧ELO评级的问题.

与版本1相比,Glicko-2的特殊之处在于它具有更高的评级偏差(RD),即某人不活动的时间越长.它使用与时间/评级周期相关的系统常数的概念来实现这一点.

可以在此处找到作者的一个例子:http://www.glicko.net/glicko/glicko2.pdf.
在这份文件中,他解释说:

当评级期间的游戏数量从中到大时,Glicko-2系统效果最佳,比如评级期内每位玩家平均至少10-15场比赛.评级期的时间长短由管理员决定.

假设一组活跃的国际象棋选手在1个月的时间内平均玩10-15场比赛,管理员将在每个月末更新评级.


我需要一个Glicko-2评级系统的PHP实现,并且遇到了以下内容:

Glicko-2 JavaScript实现

  • JavaScript有一个小错误,其中没有让它与技术写作示例匹配,作者发现它足够接近,并且没有费心去调试.

Glicko-2 PHP实现

  • PHP实现受到许多错误的困扰,但除非您执行了多个评级期(技术文档从未显示预期值),否则这一点并不明显

Excel中的Glicko-2计算器

  • 最后,Excel计算器似乎没有错误且最专业,由国际象棋界的某个人完成.一旦JavaScript错误得到解决,JavaScript和Excel计算器彼此非常接近(尽管不完美,可能在舍入误差范围内)

我已经修复了错误(并向作者提交了问题/补丁)我可以在PHP和JavaScript版本上找到与Excel计算器紧密匹配的错误


现在我有99%的信心,我有一个准确的Glicko-2实现(在它们中的3个之间)进行分析,这就是我遇到一些奇怪的东西,以及这个讨论的主题.

给出新玩家Glicko-2的建议默认值:

Rating:      1500
RD:           350
Volatility:  0.06
Run Code Online (Sandbox Code Playgroud)

如果您在接下来的12个时期(1年)的每个评级期(1个月)内只面对1378评级和RD 99(来源)的平均对手,您将累积假定的国家A级(1800-1999)评级为1852实际上,你在12个月的时间里只击败了12名平均水平的球员.

Month   Rating      RD      Volatility      Class
1       1625        259     0.059999        National Class B
2       1682        225     0.059998        ?
3       1718        205     0.059997        ?
6       1784        174     0.059994        ?
12      1852        148     0.059988        National Class A
24      1922        127     0.059976        ?
Run Code Online (Sandbox Code Playgroud)

如果你在每个评级期间面对2个普通对手,你可以在4-5个月内到达国家A级,面对的平均对手只有8-10个.

Month   Rating      RD      Volatility      Class
1       1672        215     0.059999        National Class B
2       1733        183     0.059997        ?
3       1770        166     0.059995        ?
4       1797        154     0.059993        ?
5       1819        146     0.059992        National Class A
6       1836        140     0.059991        ?
Run Code Online (Sandbox Code Playgroud)


这些假设是否准确?我的计算器中有错误吗?

如果它不是一个bug,除此之外还有哪些方法可以解决这个问题:

  • 将"真实评级"视为偏差的下限(评级 - RD)
  • 不要显示非活动用户的评级
  • 不要向少于N个游戏的用户展示

小智 8

这看似违反直觉,但实际上这是一个正确的结果.如果你连续玩普通玩家,但你总是赢,无论时间段如何,你都表明你的排名很高(即使你的对手是平均水平,也不是平均排名).平均(具有'真正的'平均等级)的玩家,玩对手具有完全相同的"真实"等级(平均值)应该赢得并且失去大约50%的时间.具有非常高的"真实"等级的玩家将在玩普通玩家时赢得更大比例的时间,这取决于他们的等级有多远,但是可以说这是一个足够高的等级,他们应该赢得90%的时间.这意味着对于普通玩家来说,有10场比赛,这个排名很高的球员应该输掉其中的一场.

你有效建模的是一个排名足够高的玩家,可以赢得每场比赛对阵普通玩家(超过12或24场没有损失的比赛),这意味着如果他们继续获胜,他们的得分将继续上升因为他们从未输过.他们表现出的能力(直到发生损失)应该具有足够大的等级分离,以达到100%的预期胜率.