3

读过如何不按平均评分排序后,我想我应该试一试。

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=0neg>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

这更接近我想要的分数,作为一个数字技巧,我想它是可行的,但我无法在数学上证明它的合理性

有没有更好的方法,“正确”的方法?

4

1 回答 1

2

问题的出现是因为这种近似(下置信界限)实际上是用于识别列表中评分最高的项目。如果您对排名最低的感兴趣,则可以取而代之的是置信上限。

或者,我们使用贝叶斯统计,这是您描述的第二种方法的形式化。埃文米勒实际上对此有一个后续帖子,他说:

我之前提出的解决方案——使用均值周围的置信区间的下限——就是计算机程序员所说的 hack。它之所以有效,不是因为它是一个普遍最优的解决方案,而是因为它大致对应于我们希望在最佳评分列表顶部看到的直观感觉:在给定数据的情况下,坏概率最小的项目.

贝叶斯统计让我们将这种直觉形式化......

使用贝叶斯排名方法,任何数据为零的点都会回落到先前的平均值(您称为初始分数),然后在收集数据时远离它。这也是 IMDB 用来计算其热门电影列表的方法。 https://math.stackexchange.com/questions/169032/understanding-the-imdb-weighted-rating-function-for-usage-on-my-own-website

您建议将每个对象记为 4 个赞成票和 4 个反对票的具体方法相当于将 0.5 的平均值与 8 票的权重放在一起。鉴于没有任何其他数据,这是一个合理的开始。拉普拉斯在日出问题中著名地论证了事件应该被归为1个成功和1个失败。在项目排名问题中,我们有更多的知识,因此将先验均值设置为等于平均排名是有意义的。这个先验均值的权重(或作为数据函数的移动速度,也称为先验方差)可能难以设置。

对于 IMDB 的 Top 250 电影排名,他们使用 7.1 的平均电影排名,权重为 25000 票,这相当于将所有电影视为以 25000 个“免费”票开始,评分为 7.1

于 2015-05-07T20:59:42.287 回答