已阅读How Not To Sort By Average Rating我想我应该试一试。
CREATE FUNCTION `mydb`.`LowerBoundWilson95` (pos FLOAT, neg FLOAT)
RETURNS FLOAT DETERMINISTIC
RETURN
IF(
pos + neg <= 0,
0,
(
(pos + 1.9208) / (pos + neg)
-
1.96 * SQRT(
(pos * neg) / (pos + neg) + 0.9604
)
/ (pos + neg)
)
/
(
1 + 3.8416
/ (pos + neg)
)
);
运行一些测试,我发现具有 pos=0
和 neg>0
的对象具有非常小但非负的分数,而具有 的对象pos=neg=0
得分为零,排名较低。
我认为未评级的对象应该列在没有正面评级但有一些负面评级的对象之上。
我的理由是“个人评分实际上都是偏离某个基线的表现,所以我会移动基线,我会给每个对象一个‘中性’的初始分数,”所以我想到了这个:
CREATE FUNCTION `mydb`.`AdjustedRating` (pos FLOAT, neg FLOAT)
RETURNS FLOAT DETERMINISTIC
RETURN
(
SELECT `mydb`.`LowerBoundWilson95` (pos+4, neg+4)
);
这是 AdjustedRating
的一些示例输出
\ pos 0 1 2
neg
0 | 0.215 | 0.188 | 0.168
1 | 0.266 | 0.235 | 0.212
2 | 0.312 | 0.280 | 0.235
这更接近我想要的那种分数,作为一种数字破解,我想它是可行的,但我不能在数学上证明它的合理性
有没有更好的方法,“正确”的方法?
最佳答案
问题的出现是因为这个近似值(置信度下限)实际上是为了识别列表中评价最高的项目。如果您对排名最低的感兴趣,您可以取而代之的是置信上限。
或者,我们使用贝叶斯统计,它正是您描述的第二种方法的形式化。埃文米勒实际上有一个followup post对此他说:
The solution I proposed previously — using the lower bound of a confidence interval around the mean — is what computer programmers call a hack. It works not because it is a universally optimal solution, but because it roughly corresponds to our intuitive sense of what we'd like to see at the top of a best-rated list: items with the smallest probability of being bad, given the data.
Bayesian statistics lets us formalize this intuition...
使用贝叶斯排名方法,任何数据为零的点都会回落到先前的平均值(您称之为初始分数),然后在收集数据时远离它。这也是 IMDB 用于计算其热门电影列表的方法。 https://math.stackexchange.com/questions/169032/understanding-the-imdb-weighted-rating-function-for-usage-on-my-own-website
您建议的将每个对象记为 4 票赞成票和 4 票反对票的具体方法相当于将 0.5 的平均值与 8 票的权重放在一起。鉴于没有任何其他数据,这是一个合理的开始。拉普拉斯在 sunrise problem 中提出了著名论点该事件应记为 1 次成功和 1 次失败。在项目排名问题中,我们有更多的知识,所以将先验均值设置为平均排名是有意义的。这个先验均值的权重(或者你以多快的速度离开它作为数据的函数,也称为先验方差)可能很难设置。
对于 IMDB 的前 250 部电影排名,他们使用平均电影排名 7.1,权重为 25000 票,这相当于将所有电影都视为从 25000 票“免费”票开始,评分为 7.1
关于math - 未评级实体与威尔逊评分负面评级实体——如何处理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12690951/