威尔逊区间算法
在不考虑时间的情况下,以「赞成」和「反对」两种评价方式为例,通常我们会有两种最基础的方法计算得分。
第一种为绝对分数
这种计算方式有时会存在一定问题,例如:A 获得 60 张赞成票,40 张反对票;B 获得 550 张赞成票,450 张反对票。根据上式计算可得 A 的评分为 20,B 的评分为 100,所以 B 要优于 A。但实际上,B 的好评率仅有 ,而 A 的好评率为 ,因此实际情况应该是 A 优于 B。
这样,我们就得到了第二种,相对分数
这种方式在总票数比较大的时候没有问题,但总票数比较小时就容易产生错误。例如:A 获得 2 张赞成票,0 张反对票;B 获得 100 张赞成票,1 张反对票。根据上式计算可得 A 的评分为 100% ,B 的评分为 99% 。但实际上 B 应该是优于 A 的,由于 A 的总票数太少,数据不太具有统计意义。
对于这个问题,我们可以抽象出来:
- 每个用户的投票都是独立事件。
- 用户只有两个选择,要么投赞成票,要么投反对票。
- 如果投票总人数为 ,其中赞成票为 ,则赞成票的比例 。
不难看出,上述过程是一个二项实验。 越大表示评分越高,但是 的可信性取决于投票的人数,如果人数太少, 就不可信了。因此我们可以通过计算 的置信区间对评分算法进行调整如下:
- 计算每个项目的好评率。
- 计算每个好评率的置信区间。
- 根据置信区间的下限值进行排名。
置信区间的本质就是对可信度进行修正,弥补样本量过小的影响。如果样本足够多,就说明比较可信,则不需要很大的修正,所以置信区间会比较窄,下限值会比较大;如果样本比较少,就说明不一定可信,则需要进行较大的修正,所以置信区间会比较宽,下限值会比较小。
二项分布的置信区间有多种计算公式,最常见的「正态区间」方法对于小样本准确性较差。1927 年,美国数学家 Edwin Bidwell Wilson 提出了一个修正公式,被称为「威尔逊区间」,很好地解决了小样本的准确性问题。置信区间定义如下:
其中, 表示样本好评率, 表示样本大小, 表示某个置信水平的 统计量。
贝叶斯平均算法
在一些榜单中,有时候会出现排行榜前列总是那些票数最多的项目,新项目或者冷门的项目很难有出头机会,排名可能会长期靠后。以世界最大的电影数据库 IMDB 为例,观众可以对每部电影投票,最低为 1 分,最高为 10 分,系统根据投票结果,计算出每部电影的平均得分。
这就出现了一个问题:热门电影与冷门电影的平均得分,是否真的可比?例如一部好莱坞大片有 10000 个观众投票,一部小成本的文艺片可能只有 100 个观众投票。如果使用威尔逊区间算法,后者的得分将被大幅拉低,这样处理是否公平,是否能反映电影的真正质量呢?在 Top 250 榜单中,IMDB 给到的评分排名计算公式如下:
其中, 为最终的加权得分, 为该电影用户投票的平均得分, 为该电影的投票人数, 为排名前 250 电影的最低投票数, 为所有电影的平均得分。
从公式中可以看出,分量 可以看作为每部电影增加了评分为 的 张选票。然后再根据电影自己的投票数量 和投票平均分 进行修正,得到最终的分数。随着电影投票数量的不但增加 占的比重将越来越大,加权得分也会越来越接近该电影用户投票的平均分。也可以将公式写为更一般的形式:
其中, 为需要扩充的投票人数规模,可以根据投票人数总量设置一个合理的常数, 为当前项目的投票人数, 为每张选票的值, 为总体的平均分。这种算法称为「贝叶斯平均」。在这个公式中,
可以视为“先验概率”,每新增一次投票,都会对最终得分进行修正,使其越来越接近真实的值。