我正在使用威尔逊计分算法(代码如下),并意识到它不考虑反对票。
例子:

Upvotes  Downvotes  Score
1        0          0.2070
0        0          0
0        1          0 <--- this is wrong

这是不正确的,因为负的净选票应该有一个较低的分数。
def calculate_wilson_score(up_votes, down_votes)
  require 'cmath'
  total_votes = up_votes + down_votes
  return 0 if total_votes == 0

  z = 1.96
  positive_ratio = (1.0*up_votes)/total_votes
  score = (positive_ratio + z*z/(2*total_votes) - z * CMath.sqrt((positive_ratio*(1-positive_ratio)+z*z/(4*total_votes))/total_votes))/(1+z*z/total_votes)
  score.round(3)
end

更新:
以下是对维基百科上Wilson scoring confidence interval的描述。

最佳答案

威尔逊得分较低的置信区间张贴肯定会考虑到反对票,虽然较低的置信区间不会得到低于零,这是完全可以的。排序项目的这种近似通常用于确定最佳评级列表上的最高排名项目。因此,当查看排名最低的项(您正在描述的类型)时,它可能具有不需要的属性。
这种项目排序方法在evan miller的a post on how not to sort by average rating中得到了推广,尽管他后来stated
我之前提出的解决方案——使用平均值周围置信区间的下限——就是计算机程序员所说的黑客它之所以起作用,并不是因为它是一个普遍最优的解决方案,而是因为它大体上符合我们的直觉,即我们希望在一个最佳评级列表的顶部看到的东西:给定数据,坏概率最小的项目。
如果你真的对分析列表中排名最低的项目感兴趣,我建议要么使用置信上限,要么使用贝叶斯评分系统,如:https://stackoverflow.com/a/30111531/3884938

09-10 03:01