我有一个应用程序(Node / Angular),我正在尝试根据两个指标的整体性能对用户进行排名。有两个指标用于跟踪我们正在使用的用户如下:
但是,通过这些变量中的任何一个明确地对用户进行排名都没有意义,因为它会产生一些奇怪的激励/行为。
例如,可能会有很高的生产率,但是在短时间内通过非常努力的工作生产的单位总数非常低。或者,您可以拥有非常多的单位生产,但这可能是由于他们加班加点,因此能够生产比其他任何人更多的单位,因为他们有更长的工作时间,以及他们的生产率很低。
有没有人有设计这些类型的评分系统的经验?你是怎么处理的?
答案 0 :(得分:1)
首先,我建议将它们放在同一规模上。例如。将产生的单位除以60。
然后,如果您的权重相等,则有三种常见的简单选择:
添加分数
将分数相乘(等于添加每个分数)
取两个分数中的最小值
哪一种最好,取决于您希望它在多大程度上衡量综合效果。在您的情况下,我建议您将乘法和比例放在最终产品上。
如果你想要复杂一点,权衡或玩弄奖励分数与联合分数的多少,你可以使用以下公式:
V = alpha * log_b [产生的单位数/ 60] +(1-alpha)* log_b [生产率],
其中alpha确定一个与另一个的权重,而对数函数的基数决定了联合成功的奖励程度。
答案 1 :(得分:0)
我做了一些非常相似的事情,我觉得将它们分成联盟或层级很有价值,例如使用以生产为基础的单位。
将其放入可用对象
var levels = [
{id: 1, name: "Novice", minUnits: 100, maxUnits: 599 },
{id: 2, name: "Beginner", minUnits: 500, maxUnits: 1999 },
{id: 3, name: "Advanced", minUnits: 2000, maxUnits: 3999 },
{id: 4, name: "Expert", minUnits: 4000, maxUnits: 6000 }
]
然后,您可以使用Rate of production
乘以级别内的加权值,您可以确定这是什么。您可以使用这些值来使其变得如您想要的那样简单或容易。
答案 2 :(得分:0)
您可以与
结合使用SCORE = 200/( K_1/x_1 + K_2/x_2 )
// x_1 : Score 1
// x_2 : Score 2
// K_1 : Maximum of Score 1
// K_2 : Maximum of Score 2
当除以零时当然要小心。如果x_1
或x_2
为零,则为SCORE=0
。如果x_1=K_1
和x_2=K_2
则SCORE=100
(最大)
否则分数介于两者之间。如果x_1/K_1 = x_2/K_2 = z
则SCORE = 100*z
这会使得得分越低,以至于在提高两个分数中的一个时获得奖励(与两个场景中的最小分数不同),但不会提高两者的分数。