我的问题更数学化。网站上有一个帖子。用户可以喜欢和不喜欢它。并且在帖子下面写了例如-5不喜欢和+23喜欢。基于这些值,我想在 0-10 或(-10-0 和 0-10)范围内进行评级。如何正确制作?
3 回答
这可能无法回答您的问题,因为您需要 [-10,10] 之间的评分,但这篇博文描述了为有正面和负面评分的项目(在您的情况下是喜欢和不喜欢)评分的最佳方法。
一个简单的方法,如
- (正面评级)-(负面评级),或
- (正面评级)/(总评级)
不会给出最佳结果。
相反,他使用了一种称为二项式比例置信区间的方法。
博文的相关部分复制如下:
正确的解决方案:分数 = 伯努利参数的威尔逊分数置信区间的下限
说什么:我们需要平衡正面评价的比例和少量观察的不确定性。幸运的是,Edwin B. Wilson 于 1927 年计算出了这方面的数学。我们要问的是:鉴于我的评分,有 95% 的可能性是正面评分的“真实”部分至少是什么?威尔逊给出了答案。仅考虑正面和负面评级(即不是 5 星等级),正面评级比例的下限由下式给出:
(来源:evamiller.org)
(在表示加/减的地方使用减来计算下限。)这里 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
这是 Shepherd 答案的扩展。
total_votes = num_likes + num_dislikes;
rating = round(10*num_likes/total_votes);
这取决于您的应用程序的访问者数量。假设您预计大约有 100 位用户对您的应用进行评分。当第一个用户点击不喜欢时,我们将根据上述方法将其评分为 0。但这在逻辑上是不正确的......因为我们的样本非常小,无法使其为零。只有一个积极的相同 - 我们的应用程序获得 10 评级。
更好的做法是为分子和分母添加一个常数值。假设我们的应用程序有 100 名访问者,可以安全地假设在我们获得 10 次起伏之前,我们不应该走极端(既不是 0 也不是 10 评级)。所以只需为每个喜欢和不喜欢添加 5 个。
num_likes = num_likes + 5;
num_dislikes = num_dislikes + 5;
total_votes = num_likes + num_dislikes;
rating = round(10*(num_likes)/(total_votes));
听起来你想要的基本上是喜欢/不喜欢的百分比。我会做 0 到 10,而不是 -10 到 10,因为这可能会造成混淆。所以在 0 到 10 的范围内,0 表示“所有不喜欢”,10 表示“都喜欢”
total_votes = num_likes + num_dislikes;
rating = round(10*num_likes/total_votes);
基本上就是这样。