【问题标题】:How to balance number of ratings versus the ratings themselves?如何平衡评分数量与评分本身?
【发布时间】:2010-03-22 20:33:40
【问题描述】:

对于学校项目,我们必须实施排名系统。但是,我们认为愚蠢的平均排名会很糟糕:一个用户排名 5 星的平均排名会比 188 名用户排名 4 星的排名更好,这太愚蠢了。

所以我想知道你们中是否有人有“智能”排名的示例算法。只需要考虑给定的排名和排名的数量。

谢谢!

【问题讨论】:

  • 我认为亚马逊很好地处理了这一点,包括平均评分、评分数量以及评分者的链接。评分的数量和有关评分者的信息对不同的用户可能具有不同的含义。为什么要自己授权?
  • @גלעדברקן,我对这个问题的重新兴趣是由于尝试以自动化方式进行这种类型的统计推断。
  • 我的意思是它不一定只是统计数据。一个人可能认为 50 个评分就足够了,而对于另一个人来说这可能还不够。一些评估者的个人资料对一个人来说可能比对另一个人更可靠。如果这是透明的,它可以让用户做出更明智的评估。
  • @גלעדברקן,当我八年前问这个问题时,这是关于前端和人的,但在我的现在用例中,评级是由机器生成的,用于机器。这个问题有前端用例这一事实并不排除它有其他与前端无关的用例(尤其是我现在拥有的用例)。

标签: algorithm language-agnostic ranking


【解决方案1】:

您可以使用受Bayesian probability 启发的方法。该方法的要点是对一个项目的真实评分有一个初步的信念,并使用用户的评分来更新您的信念。

这种方法需要两个参数:

  1. 如果您对某个项目根本没有评分,您认为该项目的真正“默认”评分是多少?拨打这个号码R,“最初的信念”。
  2. 与用户评分相比,您对初始信念的重视程度如何?称之为W,其中初始信念是“值得”W 用户对该值的评分。

使用参数RW,计算新评分很简单:假设您有W 评分值R 以及任何用户评分,然后计算平均值 .例如,如果R = 2W = 3,我们计算以下各种场景的最终得分:

  • 100(用户)评分为 4:(3*2 + 100*4) / (3 + 100) = 3.94
  • 3 个等级为 5 和 1 个等级为 4:(3*2 + 3*5 + 1*4) / (3 + 3 + 1) = 3.57
  • 10 个评分为 4:(3*2 + 10*4) / (3 + 10) = 3.54
  • 1 评分 5:(3*2 + 1*5) / (3 + 1) = 2.75
  • 没有用户评分:(3*2 + 0) / (3 + 0) = 2
  • 1 评分 1:(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/20C/5 之间(取决于嘈杂或“垃圾邮件”评级的程度)。
  • 如果历史评级通常是一致的(对于单个项目),那么W 应该相对较小。另一方面,如果一个项目的评分差异很大,那么W 应该相对较大。您可以将此算法视为“吸收”W 异常高或异常低的收视率,将这些收视率转变为更中等的收视率。
  • 极端情况下,设置W = 0 相当于只使用用户评分的平均值。设置W = infinity 相当于宣布每个项目的真实评分为R,而不管用户评分如何。显然,这两种极端都不合适。
  • W 设置得太大可能会导致偏爱具有许多中等高评分的项目,而不是偏高评分略少的项目。

【讨论】:

    【解决方案2】:

    既然你已经声明机器只会被给予排名和排名数量,我认为尝试计算加权方法可能是疏忽。

    首先,有两个未知数可以证实这样一个命题,即在足够多的情况下,更多的评分比更少的评分更能说明质量。一个例子是排名多久了?是否对使用相同方法排名的不同项目给予相同的收集持续时间(同等关注)?其他的则是,哪些市场可以访问此项目,当然,谁对它进行了具体排名?

    其次,您在问题下方的评论中指出,这不是用于前端使用,而是“评级是由机器生成的,用于机器”,作为对我评论“不一定只有"

    为什么机器会有所不同? :)

    无论如何,如果这是关于机器对机器的排名,问题需要更详细,以便我们了解不同的机器如何生成和使用排名。

    机器生成的排名是否有缺陷(以表明更多的排名可能会以某种方式弥补那些“有缺陷的”排名?这甚至意味着什么 - 是机器错误吗?或者是因为该项目没有例如,使用到这台特定的机器?这里有很多问题我们可能首先要解开,包括如果我们可以访问机器如何生成排名,在某种程度上我们可能已经知道这个项目可能对此有什么意义机器,使聚合排名变得多余。

    【讨论】:

      【解决方案3】:

      你可以在不同的平台上找到没有足够投票的评级空白:“这个项目没有足够的投票”
      问题是你不能用简单的公式来计算排名。

      我建议以低于最低投票数的方式隐藏排名,但将实习生计算为移动平均线。我总是更喜欢移动平均线而不是总平均线,因为它更喜欢上次的投票而不是可能在完全不同的情况下给出的非常古老的投票。
      此外,您不需要添加所有投票的列表。您只需计算平均值,下一次投票只会更改此值。

      newAverage = weight * newVoting + (1-weight) * oldAverage
      

      对于最后 20 个值的偏好,权重约为 0.05。 (只是试验这个重量)

      另外,我将从以下条件开始:
      没有投票 = 中等价值(1-5 星 => 从 3 星开始)
      如果投票数少于 10,则不会显示平均值。

      【讨论】:

        【解决方案4】:

        我很欣赏top answer at the time of posting,所以这里将其编码为 JavaScript:

        const defaultR = 2;
        const defaultW = 3; // should not exceed typicalNumberOfRatingsPerAnswers 0 is equivalent to using only average of ratings
        
        function getSortAlgoValue(ratings) {
          const allRatings = ratings.reduce((sum, r) => sum + r, 0);
          return (defaultR * ratingW + allRatings) / (ratingW + ratings.length);
        }
        

        仅作为单独的答案列出,因为作为回复的代码块的格式不是很好

        【讨论】:

          【解决方案5】:

          一个简单的解决方案可能是加权平均:

          sum(votes) / number_of_votes

          这样一来,3 人投 1 星,1 人投 5 星,加权平均值为 (1+1+1+5)/4 = 2 星。

          简单、有效,并且可能足以满足您的目的。

          【讨论】:

          • 这与常规平均值有何不同?此外,它仍然存在 OP 想要解决的问题,即单票“5”的人的排名将高于另一个 100 票 4 的人。
          • 这正是他不想要的。 1 人 5 星平均会给 5 星。
          • 哇,我的大脑一定在度假!不知道我在想什么...投反对票是理所当然的!
          猜你喜欢
          • 2018-01-04
          • 1970-01-01
          • 2017-09-26
          • 1970-01-01
          • 2013-03-31
          • 1970-01-01
          • 2023-02-12
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多