@
kojp 我……是男的!= =
@
zhujg 这里转一段关于算法的解释
「这个投票有一个问题,如果有人恶意刷票或者是像我这种懒人,从前往后看,看到哪个的时候眼睛一亮,就投一票这种类型,会造成一个后果,那就是排行榜前列总是那些票数最多的项目,新项目或者冷门的项目,很难有出头机会,排名可能会长期靠后。毕竟没有人去刻意看排名靠后的那些,心理作用嘛,靠后的自然是长得不好看的。解决这个问题,最大的电影评分网站 IMDB 有一套自己的解决方案,在排名页最下方,网站给出了他们的算法:
weighted rating (WR) = ( v ÷ ( v + m ) ) × R + ( m ÷ ( v + m ) ) × C ,其中:
- WR, 加权得分(weighted rating)。
- R,该电影的用户投票的平均得分(Rating)。
- v,该电影的投票人数(votes)。
- m,排名前250名的电影的最低投票数(现在为3000)。
- C, 所有电影的平均得分(现在为6.9)。
研究公式,你就会发现,IMDB 为每部电影增加了 3000 张选票,并且这些选票的评分都为 6.9。这样做的原因是,假设所有电影都至少有 3000 张选票,那么就都具备了进入前 250 名的评选条件;然后假设这 3000 张选票的评分是所有电影的平均得分(即假设这部电影具有平均水准);最后,用现有的观众投票进行修正,长期来看,v/(v+m) 这部分的权重将越来越大,得分将慢慢接近真实情况。这样做拉近了不同电影之间投票人数的差异,使得投票人数较少的电影也有可能排名前列。如果将上面那个公式写成更一般的公式:
x 平均 = ( C × m + ∑( i = 1 to n )xi ) ÷ (n + C ) ,其中:
- C,投票人数扩展的规模,是一个自行设定的常数,与整个网站的总体用户人数有关,可以等于每个项目的平均投票数。
- n,该项目的现有投票人数。
- x,该项目的每张选票的值。
- m,总体平均分,即整个网站所有选票的算术平均值。
这个就是贝叶斯平均,基本思想就是,既然不知道投票结果,那就先估计一个值,然后不断用新的信息修正,使得它越来越接近正确的值。在这个公式中,m 是"先验概率",每一次新的投票都是一个调整因子,使总体平均分不断向该项目的真实投票结果靠近。投票人数越多,该项目的"贝叶斯平均"就越接近算术平均,对排名的影响就越小。因此,这种方法可以给一些投票人数较少的项目,以相对公平的排名。说到这里,这个网站是怎么评选出来的,自然也就不用我多说了。
这里顺便说一下另一种排名方法,也就是利用威尔逊区间的下限值来排,这个应该是 WHU Facemash 的算法。在描述算法之前,先说两个错误的算法,一个是 得分 = 赞成票 - 反对票,另一个是 得分 = 赞成票 / 总票数,后者在基数非常大的情况下是正确的,包括上述算法」[1]
[1]原文地址
http://user.qzone.qq.com/461420086/blog/1342677720[2]更丰富的其它参考
- 阮一峰《基于用户投票的排名算法(六):贝叶斯平均》
http://www.ruanyifeng.com/blog/2012/03/ranking_algorithm_bayesian_average.html- 阮一峰《基于用户投票的排名算法(五):威尔逊区间》
http://www.ruanyifeng.com/blog/2012/03/ranking_algorithm_wilson_score_interval.html