基于累积评分的等级量表方法/算法

数据挖掘 数据挖掘 统计数据 算法 分配
2022-03-09 06:44:14

假设您有一个组织要求员工参与类似于 StackOverflow 的问答网站 - 对问题和答案进行投票,选定的答案会获得加分,某些行为会提高您的分数等。我们需要做的是从 1 分到100 给这些用户,分布均匀。

加分的行为:

  • 问一个问题[固定]
  • 回答一个问题[固定]
  • 获得对问题的支持 [由相对排名确定]
  • 获得对答案的支持 [由相对排名确定]
  • 选择你的答案[由相对排名确定]
  • 回复评论等 [已修复]

同样,也有减分的行为。

如果排名较高的用户对排名较低的用户提出的问题进行投票,则应该比相反的情况获得更多的积分。同样,如果排名较低的用户对排名较高的用户的问题投了反对票,则与相反的情况相比,影响应该是最小的。不过,这种影响应该有一个限制,以便高排名用户不会无意中通过发出强有力的反对票来破坏低排名用户的任何势头。

我们在这里面临一些挑战:

  1. 我们如何确定为每种类型的行为分配多少分,同时考虑到参与者/接受者的相对排名?
    我想我们只是为每个行为分配一个固定数字,该数字相对于其他行为的重要性决定,然后有一个可变分数,如果用户之间存在很大差异,可以改变分数。这个机制 - 分数最多翻倍吗?- 不清楚。

  2. 我们如何分配这个等级?这个稍微简单一些——我想我们只是根据分数对用户进行排序,然后将数据集分成 100 个部分,为每个“块”分配一个 1-100 的数字。

  3. 我们是否应该担心这些数字变得“非常大”? 上面描述的场景已经被简单化了;这些用户采取的行动每天可能发生数百次,因此分数可能会变得非常高,非常快。有没有办法在避免大量重复分数的同时控制这种情况?

  4. 当总分变得非常大时,我们如何定义“固定”分数?随着时间的推移,我们可能会有数十万积分的用户——但固定分数的行为仍然应该奖励他们。他们应该奖励排名较低的用户而不是排名较高的用户。

我不知道在遇到此类问题时是否应该注意一些标准实践、算法或术语 - 任何输入都将不胜感激。

1个回答

为了解决挑战 #3 和 #4,让我们限制整体可用排名量。例如,所有用户的此排名之和将为 1 (100%)。

从挑战 #2 我了解到,您接受 2 个不同的排名:(1)从 1 到 100 的排名,以及(2)所有获得分数(固定和相对)的简单总和。我做对了吗?我是这样,没有必要担心无限增长或固定分数通胀。让我们只使用百分比,而不是 1-100 等级。

这些百分比排名可以基于交互行为(投票/选择答案/等),使用类似 PageRank的算法来计算。这种算法将考虑由精确用户获得的所有先前的反应(和行动用户的等级)。不幸的是,您不能“按原样”使用 PageRank 算法,因为它只支持“正”链接,但您可以寻找它的扩展。例如,查看这篇论文,其中包含正负链接的 PageRank 扩展(因为用户可以投反对票)。您可以使用此算法迭代地估计百分比排名(TrustRank,TR)。

第二个任务是计算每个动作的奖励/惩罚率。让我们确定(预定义)每种行为的最大奖励/惩罚率(X )。并且将根据代理用户(例如作者和选民)的信任等级使用系数对其进行折扣。稍作修改的Sigmoid会将这个比率从[-Inf,+Inf]range 映射到[0,1].

在此处输入图像描述

对于对等用户,您将拥有~0.5预定义的最大速率。如果“voter”的 TR 是“author”的两倍,“author”将收到~0.75预定义的值,依此类推。您可以使用附加参数调整陡度,或尝试找到任何其他映射转换函数。

无论如何,现在只需将最大惩罚/奖励乘以这个系数,你就会得到分数,你需要扣除或增加。我看到,唯一的问题是 TR 为零的用户——这样的用户作为选民不会“给予”任何东西,作为投票的对象,无论选民的排名如何,都会获得最大的积分。为避免这种情况,您可以预定义最小 TR(如1e-10),并且不要让用户的 TR 超出此值。