我正在建立一个新闻网站,用户可以在其中投票赞成或反对文章。这些文章链接到不同的实体:人、地点、公司……这些实体有一个全局分数和一个每个用户的分数。
因此,当用户在文章中投赞成票/反对票时,链接实体的全局分数和每个用户的分数会发生变化。
例如:有一篇文章提到了谷歌和微软。用户 A 喜欢这篇文章并投票。Google 和 Microsoft 实体的全球和用户 A 分数增加。
我希望用户 A 对他的个人分数的影响更大,而对全局分数的影响更小。
此外,实体必须从某个分数开始,以便第一个站点用户不能将其降低太多。
我正在考虑从 0 到 1 对实体进行排名。投票是二进制的:like(1),not like(0)。
我正在查看这篇博文中提到的贝叶斯平均方法,其中 C=0.7 和不同的 m 值(我使用 am 作为个人分数,另一个用于一般分数)。我进行的测试显示个人和全球分数之间几乎没有差异。似乎我找不到正确的值。
编辑:
这是我用来计算贝叶斯的代码(python)。使用这个公式,结果会更好:
def bayesian_average(votes, C=100, m=0.7): #C higher for global
#votes = [1,0,1,0,0,1,1,1]
avg_votes = C
avg_rating = m
ent_votes = len(votes) #entity votes
ent_rating = sum(votes) / float(ent_votes)
ba = ( (avg_votes * avg_rating) + (ent_votes * ent_rating) ) / (avg_votes + ent_votes)
return ba