首页 > 技术文章 > 用算法来防范水军

Gbeniot 2014-06-05 15:35 原文

首先我们来看看这次争议巨大的豆瓣评分算法 http://movie.douban.com 

 


豆瓣的评分机制是最低一分,最高五分,五个档次。 
豆瓣公式为得分=(5X1+4X2+3X3+2X4+X5)*2 

 


由于豆瓣上的用户在打分的时候加入了很多情绪化的因素。常常有打分两极分化的情况出现。豆瓣上之所以不少评分泾渭分明,在很大程度上,是和其五级简单打分制度相关的。其评分制度够简单,用户就越容易走极端。豆瓣上的评分很侧重情绪分,很能够代表豆瓣群体的判断,而不是所谓的”伪客观“。 

再看看时光网的评分算法 http://www.mtime.com 

 


时光网采用最简单的平均分算法,同时使用不同于豆瓣的十分制。 
这种算法毋庸置疑,提高平均分数,更多用户会选择中间段的分数进行打分,相对中庸的七八分明显增多。而因为用户中庸模棱两可的想法,更没有起到真是反应分数的作用。十分制会增加用户的认知成本,有十个选择出现的时候,用户会花更多时间考虑自己要如何打分,也降低用户参与度。 
二者共同的地方在于,在评分早期遭受水军袭击后,不管是刷高分还是刷低分,都会很快的在评分上显示出来,于是造成了评分与实际质量的巨大差距,并可能对用户有极大的误导和跟风作用。那么这种简单的加权和平均算法不能满足我们的需要,有什么办法能避免水军带来的巨大影响呢? 
贝叶斯算法也许能帮助为之发愁的厂商和用户们。贝叶斯算法是著名的电影数据库站点IMDB在使用的评分方法。http://www.imdb.com/ 

 


用公式来表达一下这个算法: 

 



- WR,加权得分(weighted rating) 

  - R,该内容的平均得分(Rating)。 
- v,票数(votes)。 
- m,基准票数 
- C,站点所有内容的平均分。 
简单的表示就是 
得分=(票数÷(票数+基准票数))×均分+(基准票数÷(票数+基准票数))×总均分 
其实这公式只有一个目的,让得分偏向平均分一些,如果投票越多,它的评分就越接近真实的平均分。否则就越接近所有游戏电影的平均分。其难点在于如何选择基准票数,并使得各个片子适当的拉开差距。 
这里就有一个问题:如何让冷门的内容和热门的内容所得的分数,具有可比性。这就是基准票数存在的意义,它给了一个合理的思路,如果要比较两个游戏的好坏,至少应该请同样多的人玩过。 
有人基准票数,任意两个内容,就站在了同一起点。 
由于imdb不方便测试,我们找到了另一个使用这个算法的站点: 
手游全书http://gamebook.91.com 

 


我们对一款暂无评分的游戏使用了几个马甲进行投票,全部投十分,发现分数确实上涨了,但也只涨到了6.9。而如果这在豆瓣和时光,就已经肯定是全十分了。这可能是gamebook站点设置的基准票数m较少,如果对应用户群体巨大,那么调整相应的m值,就能达到同样抑制初期水军的作用。 

 


当然"贝叶斯算法"也不是万能的,主要问题是它假设用户的投票是完全呈正态分布。比如,游戏X有10个玩家评分,5个为五星,5个为一星;游戏Y也有10个观众评分,都给了三星。这两个游戏的平均得分(无论是算术平均,还是贝叶斯算法)将都是三星,但是实际上游戏X可能比游戏Y更值得玩。不过这就是另一个话题了。

推荐阅读