受欢迎的公式? (基于“喜欢它”,“评论”,“观点”)

时间:2010-06-09 07:13:12

标签: algorithm formula popularity

我在网站上有一些页面,我必须根据“受欢迎程度”/“活动”创建订单

我必须使用的参数是:

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

对于受欢迎的公式,有什么标准吗? (如果不是意见也很好)

(最初我想到了观点+ 10 *评论+ 10 *喜欢)

6 个答案:

答案 0 :(得分:2)

您可以执行类似YouTube所做的事情 - 只需按每个类别的最大计数排序。例如 - 观看最多,评论最多,最喜欢。在每个类别中,可以首先使用不同的页面,但排名可能是相关的。如果你只需要一个排名,那么你必须提出某种类型的公式,最好通过分析你已经拥有的一堆数据并决定应该计算什么是好/坏,并且向后工作以适应经验来推导出来。适合您决定的等式。

您甚至可以尝试使用机器学习方法来“学习”将示例公式中的每个数字组合起来的良好权重。手动完成也可能不会太难。

答案 1 :(得分:2)

这没有标准公式(怎么会有?)

你看起来像一个相当正常的解决方案,并且可能会运作良好。当然,您应该使用10's来找到适合您需求的值。

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

答案 2 :(得分:2)

我用,

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

您必须使用C和L,具体取决于您对每个属性的估值。 我使用C = 1和L = 1.

这将为您提供生成积极操作的视图的百分比,使项目具有 更高百分比的最“流行”。 我喜欢这个,因为它可以使新项目最初非常受欢迎,首先出现并获得更多视图,从而变得不那么受欢迎(或更多)直到稳定。

反正 我希望它有所帮助。 PS:如果没有“* 100”,它的效果会相同,但我喜欢百分比。

答案 3 :(得分:2)

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

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

来自上面的链接:

  

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

     

我们需要平衡积极评级的比例   少数观察的不确定性。幸运的是   这方面的数学是由Edwin B. Wilson于1927年制定的。我们想要什么   要问的是:鉴于我的评分,有95%的可能性   积极评级的“真实”部分至少是什么?威尔逊给出了   回答。仅考虑正面和负面评级(即不是a   五星级),正面评级比例的下限   是(谁)给的:   enter image description here

     

(使用减号表示加号/减号来计算下限。)   此处观察到的积极评分,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%   有97.5%的几率等等。这个函数的z得分永远不会   更改,所以如果你没有方便的统计包或如果   性能是一个问题,您始终可以对z的值进行硬编码。   (使用1.96表示置信度为0.95。)

与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;

答案 4 :(得分:0)

如果内容邀请讨论,我会更喜欢评论。如果只是陈述事实,那么评论和类似计数的平等比例似乎没问题(尽管10有点太多,我认为......)

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

答案 5 :(得分:0)

Anentropic's answer的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;
  }
}