Tuesday, April 27, 2010

通过权重评分得到更美味的番茄炒蛋

哼哼,我首先声明这不是一篇cookbook文:)

在今天互联网上,我们可以广泛的看到用户反馈(评分)系统的身影.评价区间有1-10分的心理测评,自然也有超级简单的+/-法:譬如很赞一个美女的时候,你可以送个玫瑰或者番茄啥的,不以为然的时候更可以砸个鸡蛋过去.

举个例子,如果一篇文章写得很不错,有100个人参与评价,80个人给了1,20个人给了0,那么这篇文章的评分(rating)应该是0.8.越是很有可能以加粗高亮的方式推荐给其他用户,得到了很不错的点击率.这时,问题就出来了:rating值很高的资源就一定真的评价高么?

好吧,请允许我邪恶的想一下,如果某用户写了一篇文章,然后自己先给打几个1分.于是,史上最满意文章(rating值是1)就这样来到了我们的网站!

想象一下大多数新产生的资源不是得分极高(评价少,分数普遍高)就是得分极低(无人问津).这也是上述评分机制一个非常突出的缺陷.我们意识到:对于那些只有极少数评价的资源,他们的rating相较于那些有着极多评价的资源缺乏一定的certainty” or “believability

因此,我们需要"修正"一下这个计算方法:
  • 对于评价很少的资源,可以认为其本身既不受欢迎也没有啥争议(不能引起话题).它的rating更应该去接近去整体评价的平均水平;
  • 那些评价很多的资源,通过修正也更多的体现出"相对的高",也就是更多的接近其本来的rating.
那么,我们可以给所有资源的平均rating和特定评价资源的平均rating各引入一个权值.这个权值就是整体平均评价人数和资源评价人数.这里的整体平均评价人数的设定可以根据真实的计算得出(动态值),当然也可以自己根据喜好设定一个.值越小说明你对评分要求越不严格,影响rating所需要的票数越少;值越大说明你越在意样本过少所带来的负面影响,同时说明资源必须保证一定的人气.

br = ( (avg_num_votes * avg_rating) + (this_num_votes * this_rating) )/(avg_num_votes + this_num_votes)

其中:
  • avg_num_votes:整体平均评价人数
  • avg_rating:资源平均rating
  • this_num_votes:待评价资源人数
  • this_rating:待评价资源rating
    这也就是江湖上赫赫有名的贝叶斯评价(Bayesian probability),更多信息可以围观维基百科.
    实际上这种评分系统广泛适用于很多知名的WEB2.0站点.

    目前正在火热举行的 花儿朵朵等选秀活动,可以考虑在此基础上增加一个"人的可信度"(来鉴别社区、论坛的马甲号,具体可以采用积分等手段),这样或许对提高选手评价的准确性和有效性起到一定的积极作用,也可以衍生出更多有趣的现象.

    2 comments: