基于“赞”、“评论”和“浏览量”的受欢迎程度公式?

6
我在网站上有一些页面,需要根据“热度” / “活动”创建排序。要使用的参数是:
- 页面的访问量 - 在页面上发表的评论(底部有一个表单,用户可以发表评论) - 点击“喜欢”图标的次数
是否有什么公式可以用于计算热度?(如果没有,也可以提供意见)
(最初,我考虑使用浏览量+ 10 * 评论数+ 10 * 喜欢数)

你如何评估正面评论和负面评论?“赞”是否应该与评论同等重要? - Jonathan Leffler
我们不评估积极与消极的评论。"likeits" 是否应该和评论一样重要,这是我提出来的一个问题。我非常灵活。(也许“最活跃”比“最受欢迎”更好) - paullb
6个回答

6

实际上,有一种公认的最佳方式来计算这个值:
http://www.evanmiller.org/how-not-to-sort-by-average-rating.html

在将它作为“正面投票”值输入到公式中之前,您可能需要将“喜欢”和“评论”组合成单个分数,并为每个分数分配自己的加权因子。

从上面的链接中:

得分 = 伯努利参数的 Wilson 分数置信区间的下限

我们需要平衡正面评级比例和少数观察数据的不确定性。幸运的是,这个问题的数学计算早在1927年就由 Edwin B. Wilson 解决了。我们想要问的是:假设我已经有了这些评级,那么“真实”的正面评级比例至少是多少? 威尔逊给出了答案。只考虑正面和负面评级(即不使用5星级范围),正面评级比例的下限如下所示: enter image description here

(在 plus/minus 处使用减号来计算下限。)这里的是观察到的正面评级比例,zα/2是标准正态分布的(1-α/2)分位数,n是总评级数量。以下是在 Ruby 中实现同一公式:

require 'statistics2'

def ci_lower_bound(pos, n, confidence)
    if n == 0
        return 0
    end
    z = Statistics2.pnormaldist(1-(1-confidence)/2)
    phat = 1.0*pos/n
    (phat + z*z/(2*n) - z * Math.sqrt((phat*(1-phat)+z*z/(4*n))/n))/(1+z*z/n)
end

pos 是正面评价的数目, n 是总评价数,置信度是统计置信水平: 选择 0.95 以获得 95% 的可能性使您的下限正确,0.975 以获得 97.5% 的可能性等等。 此函数中的 z 分数永远不会改变,因此如果您没有统计软件包或者性能是一个问题, 您可以在这里硬编码一个值用于 z。(对于置信度为 0.95,请使用 1.96。)

相同的公式作为 SQL 查询:

SELECT widget_id, ((positive + 1.9208) / (positive + negative) - 
                   1.96 * SQRT((positive * negative) / (positive + negative) + 0.9604) / 
                          (positive + negative)) / (1 + 3.8416 / (positive + negative)) 
       AS ci_lower_bound FROM widgets WHERE positive + negative > 0 
       ORDER BY ci_lower_bound DESC;

2

我使用,

(C*comments + L*likeit)*100/views

根据您对每个属性的重视程度,您必须使用C和L。我使用C=1和L=1。

这将为您提供生成积极操作的观看百分比,使具有更高百分比的项目成为最受欢迎的。我喜欢这个方法,因为它使新项目首先非常受欢迎,首先显示并获得更多的观看次数,从而变得不那么受欢迎(或更受欢迎),直到稳定下来。

无论如何,希望对您有所帮助。 PS:如果没有“*100”,它也可以正常工作,但我喜欢百分比。


非常好。我喜欢这种高效简单的方式。 - Tony Beninate

2
您可以像YouTube那样做一些事情-只需按类别按最大计数进行排序。例如-最多观看,最多评论,最受欢迎。在每个类别中,不同的页面可能会排名第一,尽管排名可能会相关。如果您只需要单个排名,则必须想出某种公式,最好通过分析已有的大量数据并决定应该计算为好/坏来经验性地推导,并向后工作以适合您的决策的方程。

您甚至可以尝试机器学习方法来“学习”组合每个数字的良好加权,就像您的示例公式一样。手动完成也可能不太困难。


谢谢您的建议,您提出的选项已经在结果列表中了。最终的“总体流行度”是我想要得到的。 - paullb

2

这方面没有标准公式(怎么可能有呢?)

你所拥有的看起来像是一个相当正常的解决方案,可能会很好地发挥作用。当然,你应该尝试调整10的值以找到适合你需求的数值。

根据你的需求,你可能还想添加时间因素(即每周-X点数),以使旧页面变得不那么受欢迎。或者,你可以将“页面浏览次数”更改为“上月页面浏览量”。同样,这取决于你的需求,可能并不相关。


0

如果内容引发讨论,我更看重评论而不是“喜欢”。如果只是陈述事实,评论和点赞数量的比例应该相等(虽然我认为10有点太多了...)

访问次数是否考虑了用户花费的时间?您也可以使用这个指标,因为2秒的浏览量比3分钟的浏览量少。


0

Java代码{{link1:Anentropic的答案}}:

public static double getRank(double thumbsUp, double thumbsDown) {
  double totalVotes = thumbsUp + thumbsDown;

  if (totalVotes > 0) {
    return ((thumbsUp + 1.9208) / totalVotes - 
      1.96 * Math.sqrt((thumbsUp * thumbsDown) / totalVotes + 0.9604) / 
      totalVotes) / (1 + (3.8416 / totalVotes));
  } else {
    return 0;
  }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接