【发布时间】:2023-12-24 16:32:01
【问题描述】:
我正在建立一个新闻网站,用户可以在其中对文章进行投票。这些文章链接到不同的实体:人、地点、公司……这些实体具有全局分数和每个用户的分数。
因此,当用户对一篇文章投赞成票/反对票时,链接实体的全局分数和每个用户的分数会发生变化。
例如:有一篇文章提到了 Google 和 Microsoft。用户 A 喜欢这篇文章并投了赞成票。 Google 和 Microsoft 实体的全球和用户 A 分数增加。
我希望用户 A 对其个人分数的影响更大,而对全局分数的影响更小。
此外,实体必须以某个分数开始,以便第一个站点用户不能将分数降低太多。
我正在考虑从 0 到 1 对实体进行排名。投票是二元的:like(1),not like(0)。
我正在查看this blog post 中提到的Bayesian average 方法,其 C=0.7 和不同的 m 值(我使用一个 m 代表个人得分,另一个代表一般得分)。我进行的测试显示个人和全球分数之间几乎没有差异。我似乎找不到正确的值。
编辑:
这是我用来计算贝叶斯的代码(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
【问题讨论】:
-
你能展示你到目前为止所做的事情吗?您的代码将使我们能够确定您是否犯了明显的错误。我想知道您是否以某种方式使用 0.7 作为伪样本大小而不是平均值的目标(贝叶斯平均值中的先验平均值)