读过如何不按平均评分排序后,我想我应该试一试。
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
这更接近我想要的分数,作为一个数字技巧,我想它是可行的,但我无法在数学上证明它的合理性
有没有更好的方法,“正确”的方法?