8

我有一个游戏,你可以在每场比赛中得分从 -40 到 +40。允许用户进行任意数量的比赛。我想计算一个总分,隐含地考虑到比赛的数量。

只计算平均值是不公平的。例如,如果彼得打了四场比赛,每场比赛得到 40 分,那么他的总分将与只打一场比赛得到 40 分的 Janne 相同。

把比赛分数加起来也不公平。Peter打了2场比赛(每场40分),总分80分。Janne打了8场比赛(每场比赛10分),总分80分。

有没有(简单)公平的方法来计算总分?我读过 Elo & Glicko 国际象棋评级系统,但两者都是基于玩家评级历史和对手评级。

4

12 回答 12

5

这取决于你想强调什么,但我认为这既简单又有效:

平均分+出场次数

您可以稍微加权变量(例如,如果您想产生更大的影响,则玩 2* 场比赛) - 但基本关系似乎是合理的。

在您的第一个示例中,彼得将有 44 分,而简将有 40 分 - 但如果彼得开始失分,简可以赶上。

于 2008-11-11T11:40:01.307 回答
4

另一种方法是使用贝叶斯统计。将每个团队获胜的概率建模为 beta 分布,并计算一个分布中的样本大于另一个分布的样本的概率。这种方法用于测试抗癌药物。它不仅考虑了哪种药物具有更好的反应率,还考虑了哪种药物具有更多的数据。比较两名球员或两支球队是完全类似的。

这听起来可能比实际复杂得多,但是有免费软件可以进行这些计算,而且在某些情况下,这些计算很容易用手来完成。

请参阅随机不等式的介绍和有关beta 分布不等式的详细信息。

于 2008-11-11T11:31:23.133 回答
3

我认为没有好的方法可以在单个数字中创建这样的分数。

我建议计算平均成功率并包括游戏数量。例如

  • 彼得得分 40/2(两场比赛平均 40 分)
  • Janne 得分 10/8(8 场比赛场均 10 分)

您可以快速查看第二个数字是否更大,第一个数字更准确。

否则使用 E​​LO,但仅当每个玩家至少参加 10 场比赛时才是准确的。

于 2008-11-11T10:04:18.177 回答
3

您可以查看Microsoft 的 TruSkill,几个月前我读过它,老实说,我已经忘记了大部分细节,所以我不确定它是否超级合适,但这可能是一个很好的灵感。

于 2008-11-11T10:43:39.393 回答
3

这是一个原则性的方法:

http://www.evanmiller.org/how-not-to-sort-by-average-rating.html

于 2010-03-29T21:52:07.263 回答
2

我建议将游戏分数设为 95% 置信区间的下限。在你玩很多游戏的极限情况下,你的游戏分数接近你的平均分数,但总是严格低于你的平均分数。这就像使用平均分数,但适当地怀疑那些只玩了几场比赛并且可能只是幸运的人。

换句话说,这是对玩了足够多的游戏后真实平均水平的悲观估计。

如何在不存储整个分数列表的情况下计算 95% 置信区间: 在不存储所有数据点的情况下计算平均置信区间

或者,如果您跟踪所玩游戏的数量、该人的得分总和以及他们得分的平方和,您可以按如下方式计算标准误差:

SE = sqrt((ss - s^2/n) / (n-1) / n)

不用担心 95% CI,你可以让游戏分数为:

s/n - SE

请注意,当只玩了一场游戏时,上述是负无穷大。这意味着你会给只玩过一场游戏的人尽可能低的分数作为他们的游戏分数。

另一个想法是在对人进行排名时明确显示置信区间(按低端排序)。然后人们会玩更多的游戏来缩小他们的 CI 以及提高他们的平均水平。

最后,增加最近游戏的权重可能是有意义的,这样孤立的糟糕游戏的重要性会更快地衰减。这样做的方法是选择一个d大于 1 的折扣因子,并赋予第ith 游戏的权重d^(i-1)。(尽管那时我不再确定如何应用置信区间的想法。)

PS:我在这里扩展了这个想法: 如何根据票数/分数/样本/等计算平均值?

于 2008-11-11T16:33:22.103 回答
1

使公式关于游戏数非线性。

设G为比赛次数,S为所有比赛得分之和,则TotalScore = G^2 * S

玩弄它,直到找到看起来合乎逻辑的东西。

于 2008-11-11T09:55:36.930 回答
1

您可以检查获胜次数并为连续获胜(+5、+10、+15...)提供奖励积分,因此 (-10,+10,+10,+10,-10,+10) 将给出 ( -10,+10,+15,+20,-10,+10)。您也可以在不关心运行的情况下执行此操作,这将给出 (-10,+10,+15,+20,-10,+25)。

另一种可能性是在开始时将奖金值设置为 0,如果玩家输了,则将其减少 5,如果玩家获胜,则将其增加 5。

于 2008-11-11T10:00:43.380 回答
1

您可以将分数设置为玩家在过去 30 场比赛中最好的 10 场比赛的平均值(或其他一些数字 - 也许只有最后 10 场适合您)。

还没有玩过 10 场比赛的玩家可以取他们玩过的比赛的平均值,然后将其加权为 0,以弥补 n < 10 的平均值比 10 的平均值具有更高标准偏差的事实。不确定每个 n 的比例因子应该是多少,但如果您有一些过去的数据要查看,您可以计算出典型玩家的得分有多可变,并据此进行计算。

或者计算出每场比赛的全球平均得分是多少(可能是 0),并在计算少于 10 场比赛的球员的得分时加上该数量的 (10-n) 个假得分。

于 2008-11-11T10:15:07.000 回答
1

另一个起点可能是关于ELO国际象棋排名系统的维基百科文章

于 2008-11-11T10:47:15.610 回答
1

构建一个图,每个人都由一个顶点表示。图中的每条边代表两个玩家之间的一系列比赛。现在应用某种类型的页面排名算法为您提供一组顶点权重。那应该给你你的排名。

现在棘手的部分是选择 pagerank 中使用的边缘权重。对于有向边 (u,v)——从顶点 u 到顶点 v——我个人会分配一个权重,等于玩家 u 赢得玩家 v 的分数。

您可以随时将顶点添加到图表中,但请记住页面排名有利于较旧的顶点(即那些玩过更多游戏的顶点!)。无论如何供参考:

http://dbpubs.stanford.edu:8090/pub/199​​9-66

另一种想法是使用 ELO 评级,并尝试通过为每个人分配相同的分数开始引导它,然后向前传播分数。我不能说这是完全令人满意的。

于 2008-11-14T03:56:20.830 回答
0

这取决于您想要对所玩游戏的权重与分数相比有多少。您可以定义一个返回游戏权重的函数:只有一个游戏的小部分和很多游戏的 1(例如 1 - 1/(2 * #Games))和累积分数的倍数。

于 2008-11-11T09:57:45.553 回答