pau*_*llb 5 algorithm popularity formula
我在网站上有一些页面,我必须根据“流行度”/“活动”创建一个排序
我必须使用的参数是:
受欢迎程度的公式有什么标准吗?(如果不是意见也很好)
(最初我想到了观点 + 10*评论 + 10*likeit)
实际上有一个公认的最佳方法来计算这个:http :
//www.evanmiller.org/how-not-to-sort-by-average-rating.html
您可能需要将“喜欢”和“评论”组合成一个分数,为每个分数分配您自己的权重因子,然后将其作为“正面投票”值插入公式中。
从上面的链接:
分数 = 伯努利参数的威尔逊分数置信区间的下限
我们需要平衡正面评级的比例与少量观察的不确定性。幸运的是,这方面的数学是由 Edwin B. Wilson 在 1927 年计算出来的。我们想问的是:鉴于我的评分,有 95% 的机会正面评分的“真实”分数至少是多少?威尔逊给出了答案。仅考虑正面和负面评级(即不是 5 星等级),正面评级比例的下限由下式给出:
(在表示加/减的地方使用减来计算下限。)这
p?是观察到的正面评分的分数,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
Run Code Online (Sandbox Code Playgroud)
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;
Run Code Online (Sandbox Code Playgroud)
对此没有标准公式(怎么可能有?)
您所拥有的看起来是一个相当正常的解决方案,并且可能会很好地工作。当然,您应该尝试使用 10 来找到适合您需要的值。
根据您的要求,您可能还需要添加时间因素(即每周 -X 点),以便旧页面变得不那么受欢迎。或者,您可以将“页面浏览量”更改为“上个月的页面浏览量”。同样,这取决于您的需求,它可能不相关。