对于学校项目,我们必须实施排名系统。然而,我们认为一个愚蠢的平均排名会很糟糕:一个用户排名 5 星的平均排名会比 188 个用户排名 4 星的平均排名更好,这很愚蠢。
所以我想知道你们中是否有人有“智能”排名的示例算法。它只需要考虑给定的排名和排名的数量。
谢谢!
对于学校项目,我们必须实施排名系统。然而,我们认为一个愚蠢的平均排名会很糟糕:一个用户排名 5 星的平均排名会比 188 个用户排名 4 星的平均排名更好,这很愚蠢。
所以我想知道你们中是否有人有“智能”排名的示例算法。它只需要考虑给定的排名和排名的数量。
谢谢!
您可以使用受贝叶斯概率启发的方法。该方法的要点是对项目的真实评级有一个初步信念,并使用用户的评级来更新您的信念。
这种方法需要两个参数:
R
为“最初的信念”。W
,其中初始信念是W
该值的“价值”用户评级。使用参数R
和W
,计算新评分很简单:假设您具有W
value 评分R
以及任何用户评分,并计算平均值。例如,如果R = 2
和W = 3
,我们计算以下各种场景的最终分数:
(3*2 + 100*4) / (3 + 100) = 3.94
(3*2 + 3*5 + 1*4) / (3 + 3 + 1) = 3.57
(3*2 + 10*4) / (3 + 10) = 3.54
(3*2 + 1*5) / (3 + 1) = 2.75
(3*2 + 0) / (3 + 0) = 2
(3*2 + 1*1) / (3 + 1) = 1.75
此计算考虑了用户评分的数量以及这些评分的值。因此,在给定数据的情况下,最终得分大致对应于人们对特定项目的期望程度。
R
当您选择时R
,请考虑您愿意为没有评级的项目假设什么值。如果您要立即让所有人对其进行评分,那么典型的不评分项目实际上是 2.4 分(满分 5 分)吗?如果是这样,R = 2.4
那将是一个合理的选择。
您不应为此参数使用评分量表上的最小值,因为用户评分极差的项目最终应该比没有评分的默认项目“更差”。
如果你想R
使用数据而不是直觉来选择,你可以使用以下方法:
R
成为这些分数的中位数。如果您想对未评分项目稍微乐观或悲观,您可以选择R
分数的不同百分位数,例如第 60 个百分位数(乐观)或第 40 个百分位数(悲观)。
W
的选择W
应该取决于一个典型项目有多少评级,以及评级的一致性。W
如果项目自然获得许多评分,W
则可能会更高,如果您对用户评分的信心较低(例如,如果您有高垃圾邮件活动),则应该更高。请注意,W
不一定是整数,可以小于 1。
选择W
是比选择更主观的事情R
。但是,这里有一些指导方针:
C
评分,则W
不应超过C
,否则最终分数将更多地依赖于R
实际用户评分。相反,W
应该接近 的一小部分C
,可能介于C/20
和之间C/5
(取决于嘈杂或“垃圾邮件”评级的程度)。W
应该相对较小。另一方面,如果一个项目的评级变化很大,那么W
应该是相对较大的。您可以将此算法视为“吸收”W
异常高或异常低的评分,将这些评分转变为更中等的评分。W = 0
相当于只使用用户评分的平均值。设置W = infinity
相当于宣布每个项目的真实评分为R
,而不管用户评分如何。显然,这两种极端都不合适。W
太大可能会导致偏爱具有许多中等高评分的项目而不是具有稍微较少的极高评分的项目。既然你已经说过机器只会得到排名和排名的数量,我认为尝试计算加权方法可能是疏忽大意。
首先,有两个未知数可以证实这样一个命题,即在足够多的情况下,更多的评级比更少的评级更能说明质量。一个例子是排名多久了?是否对使用相同方法排名的不同项目给予相同的收集持续时间(同等关注)?其他人是,哪些市场可以使用这个项目,当然,谁对它进行了具体排名?
其次,您在问题下方的评论中指出,这不是用于前端使用,而是“评级是由机器生成的机器,”作为对我评论“不一定只是统计数据”的回应。一个一个人可能认为 50 个评分就足够了,而这对另一个人来说可能还不够。而且一些评分者的个人资料对一个人来说可能比对另一个人更可靠。当它是透明的时,它可以让用户做出更明智的评估。
为什么机器会有所不同?:)
无论如何,如果这是关于机器对机器的排名,那么这个问题需要更详细,以便我们了解不同的机器如何生成和使用排名。
机器生成的排名是否有缺陷(以表明更多的排名可能会以某种方式弥补那些“有缺陷”的排名?这甚至意味着什么 - 是机器错误吗?或者是因为该项目对此没有用处例如,特定的机器?这里有很多问题我们可能首先要解开,包括我们是否可以访问机器如何生成排名,在某种程度上我们可能已经知道这个项目对这台机器的含义,使得聚合排名是多余的。
你可以在不同的平台上找到没有足够投票的评级空白:“这个项目没有足够的投票”
问题是你不能用一个简单的公式来计算排名。
我建议以低于最低投票数的方式隐藏排名,但将实习生计算为移动平均线。我总是更喜欢移动平均线而不是总平均线,因为它更喜欢上次的投票而不是可能在完全不同的情况下给出的非常古老的投票。
此外,您不需要添加所有投票的列表。你只有计算出的平均值,下一次投票只会改变这个值。
newAverage = weight * newVoting + (1-weight) * oldAverage
对于最后 20 个值的偏好,权重约为 0.05。(只是试验这个重量)
此外,我将从以下条件开始:
无投票 = 中等范围值(1-5 星 => 从 3 星开始)
如果投票数少于 10,则不会显示平均值。
一个简单的解决方案可能是加权平均:
sum(votes) / number_of_votes
这样一来,3 人投 1 星,1 人投 5 星,加权平均值为 (1+1+1+5)/4 = 2 星。
简单、有效,并且可能足以满足您的目的。