我该如何改进这个等式,使反对票多于正票的项目返回一个更有用的Wilson

2024-06-12 01:43:34 发布

您现在位置:Python中文网/ 问答频道 /正文

使用这里描述的Wilson分数方程http://www.evanmiller.org/how-not-to-sort-by-average-rating.html,我对我的评分项目进行排序。但是,如果一个项目有1张反对票(0张赞成票),它将返回与1000张反对票(0张赞成票)相同的分数(即0分)。在

为了克服这个缺点,我想让Wilson得分为负数,或者也许有人会建议另一种解决方案。

不管怎样,我不知道如何改变这个等式/函数

def ci_lower_bound(pos, n, confidence):
    if n==0: return 0

    z = 1.96
    phat = 1.0*pos/n

    score = (phat + z*z/(2*n) - z*math.sqrt((phat*(1-phat)+z*z/(4*n))/n))/(1+z*z/n)
    return score

其中pos是积极评级的数量,n是评级的总数,confidence是统计置信水平。在


Tags: 项目orgposhttpreturnwww分数score
2条回答

好吧,你总是可以按元组(wilsonscore, -negative_votes)排序,因为python对元组进行排序的方式。 Python从不考虑反对票,除非wilsonscore相同。 参见:

>>> sorted([(0,-4000),(1,-4000),(0,-1),(1,-1)])
[(0, -4000), (0, -1), (1, -4000), (1, -1)]

优点:这个问题的简单解决方案,不需要修改函数,而且很少需要修改代码(因为元组在排序时表现为“自然”)。在

缺点:需要记录反对票。在

从逻辑上讲,你的评分系统必须处理以下情况:

+     +     +      +       -+
| Positive | Negative | Any Votes? | Wilson Score? |
+     +     +      +       -+
| N        | N        | N          | Y, = 0        |
| Y        | Y        | Y          | Y             |
| Y        | N        | Y          | Y             |
| N        | Y        | Y          | N             |
+     +     +      +       -+

当你缺了0票和0票时,你的票比0多。在

既然你当时有正数和负数,为什么不按照你自己的想法创建一个负的Wilson分数来处理这个问题,记住负数的平方根是复杂的。在

为了避免复杂性,假设反对票是正面的。然后你计算出一个负分项目的“喜欢”程度,并将其乘以-1,就可以把它变成不喜欢它的程度。在

^{pr2}$

相关问题 更多 >