1对1票:计算评级(Flickchart.com)

时间:2009-12-06 16:25:05

标签: statistics charts ranking voting

我不想评分等级为1到10的项目,而是希望进行1对1“战斗”。两个项目彼此相邻显示,您可以选择一个您喜欢的项目。根据这些“战斗”结果,算法应计算每个项目的评级。

您可以在使用此方法对电影进行评分的Flickchart.com上看到此方法。

看起来像这样:

Screenshot

正如您所看到的,如果物品赢得“战斗”,物品就会向上推。排名总是根据“战斗”结果而变化。但这不能只取决于胜利报价(这里是54%),因为对抗“泰坦尼克号”而不是“25小时”左右更难赢。

有一些事情对我来说不太清楚: - 评级如何计算?你如何决定哪部电影在排名中位居第一?你必须考虑一个项目获胜的频率以及被打败的项目有多好。 - 如何选择哪些项目“打架”?

当然,你不能告诉我Flickchart是如何做到的。但也许你可以告诉我它是如何做到的。提前谢谢!

9 个答案:

答案 0 :(得分:8)

这可能不是flickchart正在做的事情,但你可以使用国际象棋(和其他运动)中使用的ELO算法的变体,因为它们本质上是他们输赢的战斗/游戏。 / p>

基本上,所有电影都以0胜/负的方式开始,每次获胜都会得到一定的积分。你通常平均大约20(但任何数字都会这样做)并且赢得与你自己相同评级的电影将完全给出20.赢得一部糟糕的电影可能会得到大约10分,而赢得更好的电影可能会给你30分。相反,输给一部好电影你只会失去10分,但如果你输了一部糟糕的电影,你就会失去30分。

算法的细节在维基百科链接中。

答案 1 :(得分:5)

  

如何计算评分?你如何决定哪部电影在排名中位居第一?你必须考虑一个项目获胜的频率和被击败项目的好坏。

您想要的是加权评级,也称为贝叶斯估计。

我认为IMDB's Top 250 movies是制作排名网站的更好起点。有些电影的票数为300,000+,而其他电影则少于50,000。 IMDB使用贝叶斯估计将电影相互排名,而不会对流行电影进行不公平的加权。该算法在页面底部给出:

  

weighted rating (WR) = (v ÷ (v+m)) × R + (m ÷ (v+m)) × C其中:

     
      
  • R =电影的平均值(平均值)=   (评分)
  •   
  • v =投票数   movie =(votes)
  •   
  • m =最低票数   要求列入前250名   (目前为3000)
  •   
  • C =平均投票   整个报告(目前   6.9)
  •   
     

为前250名,只有来自的投票   经常选民被考虑。

我不知道IMDB如何选择3000作为他们的最低投票。他们可以选择1000或10000,并且列表或多或少相同。也许他们正在使用“票房6周后的平均票数”,或者他们正在使用反复试验。

无论如何,这并不重要。上面的公式几乎是规范排名网站投票的标准,我几乎可以肯定Flickrchart在背景中使用类似的东西。

该公式运作良好,因为它“平均”评级,因此高于平均值的评级略有下降,低于平均值的评级略有增加。 然而,拉力的强弱与电影的投票数成反比。因此,投票少的电影比平均投票更具积极性。以下是两个数据点来演示该属性:

Rank  Movie            Votes            Avg Rating        Weighted Rating
----  -----            -----            ----------        ---------------
219   La Strada        15,000+          8.2               8.0
221   Pirates of the   210,000+         8.0               8.0
      Caribbean 2

这两部电影的收视率都被拉低了,但拉斯特拉达的拉动更加引人注目,因为它的票数较少,因此不像PotC的评级那么具有代表性。


对于您的具体情况,您在“战斗”中有两个项目。您应该按如下方式设计表:

Items
-----
ItemID (pk)
FightsWon (int)
FightsEngaged (int)

平均评分为FightsWon / FightsEngaged。加权评级使用上面的公式计算。

当用户在战斗中选择获胜者时,将获胜项目的FightsWon字段增加1,将两个项目FightsEngaged字段增加1。

希望这有帮助! - 朱丽叶

答案 2 :(得分:2)

至于flickchart,我一直在玩它,我认为评级系统非常简单。在伪代码中,我的猜测是它看起来像这样:

if rank(loser) == null and rank(winner) == null
    insert loser at position estimated from global rank
    insert winner at position estimated from global rank
else if rank(winner) == null or rank(winner) < rank(loser)
    then advance winner to loser's position and demote loser and all following by 1

为什么我这么想?首先,我完全相信他们的贝叶斯先验并不是基于对我先前选择的仔细挖掘。他们似乎没有办法猜测,因为我喜欢回归绝地,我喜欢帝国反击。事实上,他们无法弄明白,因为我已经看过 Home Alone 2,我可能已经看过Home Alone 1.经过数百次评级后,选择还没有出现。

其次,如果您查看上面的代码,您可能会发现一个小错误,您将在网站上发现它。您可能会注意到,有时候您会做出选择,而获胜者将逐个滑动。这似乎只有在以前没有添加失败者时才会发生。我的猜测是,正在发生的事情是失败者的收入高于赢家。

除此之外,你会注意到排名根本不会改变,除非排名较低的电影直接击败排名较高的电影 。我不认为有任何真正的分数被保留:除了每部电影的序数排名和你最近的评级外,该网站似乎完全没有记忆。

答案 3 :(得分:2)

我一直在努力解决通过成对比较对项目进行排序的问题,并且我想花时间来描述我到目前为止提出的想法。

现在我只是按<fights won> / <total fights>排序,最高排名第一。如果您是唯一投票的人,或者如果有很多人投票,这样可以正常工作。否则很快就会变得不准确。

这里的一个问题是如何选择应该打两个项目。似乎做得很好(主观上)的一件事是让目前为止战斗最少的物品与随机物品作斗争。这导致项目的相对均匀的打斗次数( - >准确度),代价是可能对选民无聊。他们经常将最新项目与其他项目进行比较,这有点无聊。为了减轻这种情况,您可以选择战斗计数最低的 n 项目,并随机选择其中一项作为第一个竞争者。

你提到你想要对抗强大对手的胜利比对抗弱对手的胜利要多。如上面其他帖子所述,用于国际象棋等的评级系统(Elo,Glicko)可能有效。就个人而言,我很乐意使用微软的TrueSkill,因为它似乎是最准确的,也提供了一个很好的方法来挑选两个相互对立的项目 - 由TrueSkill计算的具有最高抽签概率的项目。但是,我的数学理解还不足以真正理解和实施系统的细节,无论如何它可能需要支付许可费......

如果您需要更多信息/灵感,

Collective Choice: Competitive Ranking Systems可以很好地概述几种不同的评级系统。

除了评级系统,您还可以尝试各种简单的梯形系统。一个例子:

  1. 随机化项目列表,使它们排名为1到n
  2. 随机挑选两件物品让他们战斗
  3. 如果获胜者排在输家之上:什么都不做
  4. 如果输家排名高于获胜者:
    • 如果失败者直接位于获胜者之上:交换他们
    • 其他:将胜利者抬上梯子 x %朝着战斗的失败者。
  5. 转到2
  6. 这在开始时相对不稳定,但应该随着时间的推移而改善。它永远不会停止波动。

    希望我能帮助至少一点。

答案 4 :(得分:1)

或者您可能想要使用PageRank的变体,请参阅prof. Wilf's cool description

答案 5 :(得分:1)

经过深思熟虑之后,这部电影排名的最佳解决方案如下:

必填数据:

  • 每部电影配对的票数。
    • 此数据的排序版本也按照基数排序
    • 分组
  • 每部电影在每部电影中被投票多少次

可选数据:

  • 每部电影参与投票给每位用户的次数

如何为用户选择投票:

  • 从最低使用基数组(随机)中的排序列表中选出一个投票选择
  • 可选:使用用户的个人投票统计数据来过滤掉他们被要求投票太多次的电影,如果没有合适的话可能会转移到更高的基数桶上。

如何计算电影的排名分数:

  • 以0
  • 开始得分
  • 浏览系统中的其他电影
    • voteswon / votestaken与此影片相加加入得分
      • 如果这两部电影之间没有投票,请加上0.5而不是(这当然是假设您希望新电影在排名中平均开始)

注意:可选的东西只是阻止用户感到厌倦,但也可能对其他统计数据有用,特别是如果你包括他们为这部电影投票的次数。 < / p>

确保新添加的电影尽快收集统计数据并在所有现有电影中均匀分配投票对于保持其他电影的统计数据至关重要。为了避免在排名中出现暂时的故障(尽管不是即时的或严重的),可能值得错误地将一堆新电影输入到系统中。

===这是原始的答案===

这个问题实际上很容易。我在这里假设你想优先订购电影,即排名第一的电影是最有可能在投票中选出的电影。如果你这样做,那么在每次投票中,你可以完全随机选择两部电影,你可以用简单的数学计算出来。

首先,每次投票的两部电影的选择同样可能,因此每次投票的结果可以加在一起得分(在所有事情上节省乘以1 / nC2)。显然,某人针对另一部特定影片投票选出一部特定影片的概率仅为votesforthisfilm / numberofvotes

因此,要计算一部电影的得分,您只需将votesforthisfilm / numberofvotes与每部可以匹配的电影相加。

如果你添加一部对所有其他电影没有相当多票数的新电影,这里有点麻烦,所以你可能想把它排除在排名之前,直到一些选票累积起来

===以下是什么错误,主要是历史背景===

这种评分方法源自您投票系统的马尔可夫链,假设所有可能的投票问题都是同等可能的。 [这第一句话是错误的,因为所有投票问题都必须在马尔可夫链中同样可能获得有意义的结果] 当然,事实并非如此,实际上你也可以解决这个问题,既然你知道每个投票问题的可能性,那就是对这个问题所做的投票数量! [获得特定投票问题的可能性实际上是无关紧要的,所以这没有帮助] 通过这种方式,使用相同的图表,但边缘加权投票...

获得每部电影的可能性,包括在投票中,与获得每部电影的概率相同,并且在投票中除以投票中包含的概率。这是sumoverallvotes((votesforthisfilm / numberofvotes) * numberofvotes) / totalnumberofvotes除以sumoverallvotes(numberofvotes) / totalnumberofvotes。随着取消很多,这来到votesforthisfilmoverallvotes / numberofvotesinvolvingthisfilm。这真的很简单!

答案 6 :(得分:0)

答案 7 :(得分:0)

我认为这种1对1情景可能是一种称为Discrete Choice的联合分析。我在市场调查的网络调查中经常看到这些。通常要求客户在他们最喜欢的两组+不同的功能集之间进行选择。不幸的是,它非常复杂(对于像我这样的非统计人员),所以你可能很难理解它。

答案 8 :(得分:-1)

我衷心地推荐这本书Programming Collective Intelligence,以便在这些方面进行各种有趣的算法和数据分析。