6

我在网站上有一些页面,我必须根据“人气”/“活动”创建排序

我必须使用的参数是:

  • 页面浏览量
  • 在页面上发表的评论(底部有一个表格,用户可以发表评论)
  • 点击“喜欢”图标

流行度公式有什么标准吗?(如果不是意见也很好)

(一开始我想到的是浏览量+10*评论+10*赞)

4

6 回答 6

6

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

您可能需要将“喜欢”和“评论”组合成一个分数,为每个分数分配您自己的权重因子,然后将其作为“正面投票”值插入公式。

从上面的链接:

分数 = 伯努利参数的威尔逊分数置信区间的下限

我们需要平衡正面评价的比例与少量观察的不确定性。幸运的是,Edwin B. Wilson 于 1927 年计算出了这方面的数学。我们要问的是:鉴于我的评分,有 95% 的可能性是正面评分的“真实”部分至少是什么?威尔逊给出了答案。仅考虑正面和负面评级(即不是 5 星等级),正面评级比例的下限由下式给出: 在此处输入图像描述

(在表示加/减的地方使用减来计算下限。)这观察到的正评分的分数,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 -score 在这个函数中永远不会改变,所以如果你手边没有统计数据包或者如果性能是一个问题,你总是可以在这里硬编码一个值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;
于 2014-01-22T16:11:02.603 回答
2

你可以做YouTube所做的事情- 只需按每个类别的最大数量对其进行排序。例如 - 查看最多、评论最多、最喜欢。在每个类别中,不同的页面可能首先出现,尽管排名可能是相关的。如果您只需要一个排名,那么您将不得不提出某种公式,最好通过分析您已经拥有的一堆数据并确定应该计算为好/坏的数据,然后向后工作以适应适合您决定的方程式。

您甚至可以尝试一种机器学习方法来“学习”在您的示例公式中组合每个数字的良好权重是什么。手动进行也可能不会太难。

于 2010-06-09T07:40:38.257 回答
2

对此没有标准公式(怎么可能?)

你所拥有的看起来像是一个相当正常的解决方案,并且可能会很好用。当然,您应该使用 10 来找到适合您需要的值。

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

于 2010-06-09T07:40:57.807 回答
2

我用,

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

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

这为您提供了产生积极行动的视图百分比,使具有较高百分比的项目最“流行”。我喜欢这个,因为它可以让较新的项目一开始很受欢迎,首先出现并获得更多的浏览量,因此在稳定之前变得不那么受欢迎(或更多)。

无论如何,我希望它有所帮助。PS:如果没有“* 100”,它的工作原理是一样的,但我喜欢百分比。

于 2011-07-25T19:21:16.010 回答
0

我更看重评论,而不是“就像内容邀请讨论一样”。如果只是陈述事实,那么评论和类似数量的平等配给似乎还可以(尽管我认为 10 有点太多了......)

访问是否考虑到用户以某种方式花费的时间?您也可以使用它,因为 2 秒的视图意味着不到 3 分钟的视图。

于 2010-06-09T07:47:00.753 回答
0

Anentropic 的答案的Java 代码:

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;
  }
}
于 2020-02-05T23:20:36.583 回答