喜欢看电影的童鞋, 应该都听过 IMDB 这个网站, 尤其是 IMDB Top 250 .
它是一个影视数据库和评分网站, 观众可以对影视作品进行打分, 然后网站根据用户的打分计算出作品的排序.
那么问题就来了, 不同的作品打分的人数不同, 比如热门电影的观众打分人数通常比冷门电影的多, 这些作品之间如何进行排序呢 ?
IMDB 采用了以下的方法.
IMDB 的排序公式
How do you calculate the rank of movies and TV shows on the Top Rated Movies and Top Rated TV Show lists? |
如上, 评分的计算公式为 (WR) = (v ÷ (v+m)) × R + (m ÷ (v+m)) × C
.
其中 :
- R 是当前电影的用户投票的平均得分.
- v 是当前电影的用户投票数.
- m 是进入榜单的最小票数(当前为 25000).
- C 是所有电影的平均得分(大概是 6.X 分).
为什么这样设计呢 ?
我们观察这个公式可以发现:
- 当投票的人数增加时,
v/(v+m)
的权重会逐渐增加, 逐渐接近真实情况. - 当投票人数较少时, 又不致于使电影得分产生较大的波动, 相当于有一个平滑的作用.
m
和C
的作用, 相当于为投票人数少的电影虚拟增加了选票, 使它们也有机会进入榜单前列.
贝叶斯平均
除了平滑, 这个公式还用到了贝叶斯平均的方法. 贝叶斯平均借鉴了贝叶斯推断的思想, 先预估一个值, 然后不断用新的信息来修正它, 以不断接近正确值. 而预估时, 使用一个外部信息(比如全部电影和投票的信息)来估计总体平均值的方法, 在数据集很小时这个方法很实用.
贝叶斯平均的公式是 :
如上发现, 这个公式和 IMDB 的公式其实是一样的. 以 IMDB 的投票为例:
- C 是自行设置的常数, 根据需要设置为恰当的大小, 比如 IMDB 的
进入榜单的最小票数
. - m 是所有电影的所有投票的算术平均值.
- n 是当前电影的投票人数.
- x 是当前电影每张投票的分值.
参考
Bayesian Average Ratings – Evan Miller
http://www.ruanyifeng.com/blog/2012/03/ranking_algorithm_bayesian_average.html
https://www.imdb.com/search/title/?groups=top_250&sort=num_votes,desc