【问题标题】:Score = Lower bound of Wilson score confidence interval for a Bernoulli parameter分数 = 伯努利参数的威尔逊分数置信区间的下限
【发布时间】:2014-02-12 19:28:40
【问题描述】:

我正在寻找一种基于“观看次数”和“喜欢”进行计算的流行度算法。

似乎答案是使用伯努利参数的威尔逊分数置信区间的下限,这里提供了算法:
http://www.evanmiller.org/how-not-to-sort-by-average-rating.html

该页面上以多种形式提供算法 - 数学公式、Ruby 和 SQL。

我需要一个 SQL 版本,不幸的是,该网站上给出的 SQL 表单与其他两个版本不同,因为它似乎同时计算 positivenegative 投票,而Ruby版本只需要pos的肯定票数和n的总票数。

我正在寻找一条 SQL 语句(与 Postgres 兼容)来仅根据正面投票进行计算,并且我会将“观看次数”计为我的 n 总票数。

(我确实认为我可以在他们的 SQL 中将positive + negative 视为n,但后来我对如何处理SQRT((positive * negative) / (positive + negative) + 0.9604) 感到困惑)

【问题讨论】:

    标签: sql postgresql statistics


    【解决方案1】:

    “算法”只是取一个比率的置信区间的下限。

    如果您只有赞成票,则只需使用赞成票的数量。您引用的目的是平衡正票、反对票和总票数。您不需要任何这样的平衡,因为正票 = 总票数。

    如果你有总票数和赞成票,那么你可以使用:

    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 (select w.*, (total - positive) as negative
          from widgets w
         )
    WHERE positive + negative > 0 
    ORDER BY ci_lower_bound DESC;
    

    顺便说一句,我不确定威尔逊校正是否会比正分数的一个标准差下限提供更好的结果:

    SELECT widget_id, positive/total - sqrt(positive*negative/total)/total
    

    【讨论】:

    • 我从 Wilson 查询中得到 ERROR: integer out of range
    • @Anentropic 。 . .我的猜测是,您的某些正值/总计值超过了大约 50,000。您应该将它们转换为浮点数进行计算。
    • 啊,是的,我认为这是在这部分SQRT((positive * negative) / 必须强制转换为浮动
    • 也感谢第二个更简单的查询,我实际上更喜欢我数据上的结果
    • @Anentropic 。 . .您可能对“使用 SQL 和 Excel 进行数据分析”感兴趣。第 122 页专门讨论了从比例中减去一个标准差以进行比较。
    猜你喜欢
    • 2012-04-19
    • 1970-01-01
    • 2015-06-17
    • 1970-01-01
    • 1970-01-01
    • 2012-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多