像亚马逊一样以星级(1-5)排名的算法?

Algorithm for ranking with a star rating (1-5) like Amazon?

我是一名 CS 学生,正在撰写有关替代投票系统的报告。我认为最好的系统之一是排名投票。例如.. 在总统选举中,每位总统都会排名第 1-5 位。 (IMO 美国系统的问题是只有获胜者的选票才算数)

只是想知道是否有人知道加总收视率的最佳方法?我四处搜索,我知道亚马逊使用加权平均值。我认为将每个 "star" 和获胜最多的人相加可能是有意义的。也许更喜欢数学的人可以提出更好的建议?

您可以对评级系统做的一件有趣的事情是让选票通过低通滤波器。这有助于消除极端情况,即 100 人中有些人只想指责某些事情。这也有助于缓解那些在最初 post 之后他们使用自制帐户为产品加注 5 星的人。

平均值做几乎相同的事情,但是低通滤波器可以使投票系统偏向于更难或更容易提高排名或保持排名,这可能因主题而异。

低通滤波器看起来很简单:

ranks = [2,3,1,2,4,2,1,2,3,4,3,4,2]
y = [ranks[0], ranks[1], ranks[2]]

for(i=2; i<ranks.length; ++i)
    currentRank = .2*ranks[i] + .3*y[2] + .2*y[1] + .3*y[0]
    y.push(currentRank)
    y.shift()

使用这样的滤波器还有其他属性,但这只需要研究数字低通滤波器以找到那些很酷的属性:)

如果所有项目都有很多评分者,取平均值应该相当有效。如果数据稀疏,就会出现问题。例如,假设产品 A 有一个 5 星评级,产品 B 有 5 个 5 星评级和 5 个 4 星评级。我会更信任产品 B,尽管算术平均值较低(4.5 对 5)。

根本问题是要考虑不确定性。直觉上,对于少数评级,我们考虑了 先验信念 ,它处于平均范围内。 excellent blog post 将这个想法形式化并推导出贝叶斯方法。