【问题标题】:news site ranking新闻网站排名
【发布时间】: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 作为伪样本大小而不是平均值的目标(贝叶斯平均值中的先验平均值)

标签: math ranking


【解决方案1】:

当我想做这样的事情时,我现在只是去Evan Miller's home page。您可能需要以下三种技术中的一种(或多种):

【讨论】: