曾经找过一些关于日志评分系统的资料,偶然在我很喜欢的web 2.0站点TheBroth(http://thebroth.com/)里找到了一篇介绍Bayesian评分系统的旧文(http://www.thebroth.com/blog/118/bayesian-rating),觉得非常科学,大致翻译一下。
很多网站都有用户评分功能。比如,你可以给某篇文章打分,1分表示这篇文章太烂了,10分表示你爱死这篇文章了。有些网站用加号和减号来代替评分功能。点击“+”表示你喜欢这篇文章,点击“-”表示你不喜欢这篇文章。网站很可能会在首页醒目处加一行黑体二号加粗高亮发光的字,“评价最高的10篇文章”;然后在下面放上平均得分最高的几篇文章的链接,用来吸引点击率。这时,问题就出来了:评分最高的文章不一定真的是评价最高的文章。比如说,某篇文章特别无聊,没一个人评分,然后有个人不小心点错了链接进去了,又一个不小心点到了评分栏上的最后一颗五角星,于是此网站惊现平均得分高达满分的文章;再比如说,某人刚发了一篇文章,然后趁别人还没评分前自己先给自己评几个10分,于是又一篇满分文章横空出世。事实上,可以想到绝大多数新文章刚发表时平均得分不是极高就是极低,这是这种简单的评分机制的一个很突出的问题。应该怎样解决这个问题呢?我们可以分析一下问题的根源,集中思考解决这个问题根源的办法,然后用新的公式来定义一篇文章的最终得分。
问题的根源是什么?问题的根源就是,样本少了会导致结果不可靠。某篇文章的评分人数越少,其平均得分越不可靠,我们应该想办法让得分越靠近所有文章的总平均得分。事实上,评分人数少正说明这篇文章既不受欢迎也没啥争议,它的得分应该接近所有文章的总平均分才对。要是有一种东西能够实现“票少了不算”、“得的票越多对最终得分的影响越大”之类的想法就好了。于是,我们想到了加权平均数。
我们希望得票越少的文章,其得分越接近所有文章的总平均分;得票越多的文章,其得分越接近它本来的平均分。于是我们为所有文章的总平均分和这篇文章的平均分各设一个权值。这篇文章的平均分的权值就是该文的评分人数,这没话说。关键是所有文章总平均分的权值。这可以根据你的喜好来设:权值越小说明你对评分要求越不严格,影响文章得分所需要的票数越少;权值越大说明你越在意样本过少所带来的负面影响,同时说明参与评分的人数一定会很多。因此,这个权值应该由你的网站的总评分人数的多少来决定,用每篇文章的平均评分人数来当权值是一个不错的选择。因此,我们可以用以下公式来算出每篇文章的最终得分:
所有文章的总平均分*每篇文章的平均评分人数 + 这篇文章的平均分*这篇文章的评分人数 文章最终得分 = ————————————————————————————————————————— 每篇文章的平均评分人数 + 这篇文章的评分人数
这里,总平均分的权值用的是每篇文章的平均评分人数。你也可以自己设定一个合适的权值。
这种评分方法叫做Bayesian评分。很多web 2.0站点都在用这种评分系统。