天天看点

基于用户投票的排名算法(六):贝叶斯平均

(这个系列实在拖得太久,今天是最后一篇。)

举例来说,如果只有2个人投票,"威尔逊区间"的下限值会将赞成票的比例大幅拉低。这样做固然保证了排名的可信性,但也带来了另一个问题:排行榜前列总是那些票数最多的项目,新项目或者冷门的项目,很难有出头机会,排名可能会长期靠后。

基于用户投票的排名算法(六):贝叶斯平均
基于用户投票的排名算法(六):贝叶斯平均

这里就有一个问题:热门电影与冷门电影的平均得分,是否真的可比?举例来说,一部好莱坞大片有10000个观众投票,一部小成本的文艺片只有100个观众投票。这两者的投票结果,怎么比较?如果使用"威尔逊区间",后者的得分将被大幅拉低,这样处理是否公平,能不能反映它们真正的质量?

一个合理的思路是,如果要比较两部电影的好坏,至少应该请同样多的观众观看和评分。既然文艺片的观众人数偏少,那么应该设法为它增加一些观众。

基于用户投票的排名算法(六):贝叶斯平均
  - wr, 加权得分(weighted rating)。 - r,该电影的用户投票的平均得分(rating)。 - v,该电影的投票人数(votes)。 - m,排名前250名的电影的最低投票数(现在为3000)。 - c, 所有电影的平均得分(现在为6.9)。

仔细研究这个公式,你会发现,imdb为每部电影增加了3000张选票,并且这些选票的评分都为6.9。这样做的原因是,假设所有电影都至少有3000张选票,那么就都具备了进入前250名的评选条件;然后假设这3000张选票的评分是所有电影的平均得分(即假设这部电影具有平均水准);最后,用现有的观众投票进行修正,长期来看,v/(v+m)这部分的权重将越来越大,得分将慢慢接近真实情况。

这样做拉近了不同电影之间投票人数的差异,使得投票人数较少的电影也有可能排名前列。

把这个公式写成更一般的形式:

基于用户投票的排名算法(六):贝叶斯平均
  - c,投票人数扩展的规模,是一个自行设定的常数,与整个网站的总体用户人数有关,可以等于每个项目的平均投票数。 - n,该项目的现有投票人数。 - x,该项目的每张选票的值。 - m,总体平均分,即整个网站所有选票的算术平均值。

在这个公式中,m(总体平均分)是"先验概率",每一次新的投票都是一个调整因子,使总体平均分不断向该项目的真实投票结果靠近。投票人数越多,该项目的"贝叶斯平均"就越接近算术平均,对排名的影响就越小。

因此,这种方法可以给一些投票人数较少的项目,以相对公平的排名。

=================================================

"贝叶斯平均"也有缺点,主要问题是它假设用户的投票是正态分布。比如,电影a有10个观众评分,5个为五星,5个为一星;电影b也有10个观众评分,都给了三星。这两部电影的平均得分(无论是算术平均,还是贝叶斯平均)都是三星,但是电影a可能比电影b更值得看。

(完)

继续阅读