假设我想计算两个数据点(A 和 A')的速度,每个数据点都有一个分数和发布时间(A' 是 A 的未来版本,并且具有更高的分数)。这将是
[A'(score) - A(score)] / [A'(time published) - A (time published)]
我想要捕捉的是高速发展的趋势。这意味着我想要一个从 20 到 200 的分数,其权重高于 8500 到 9000。所以我想我可以通过将分数除以基线来标准化这些数据。
例如。如果 A(score) 为 2,A'(score) 为 3,则基线为 2,因此在上面的公式中,
A'(score) - A(score) would be (3/2 - 2/2)
然而,这意味着当数字这么低时,速度会非常高(因为另一方面
9000/8500 - 8500/8500
产生非常低的速度,因为时间差仅在本例中是恒定的,但通常情况下,时间差是可变的)。
有没有什么方法可以减少低起始分数的影响,同时允许从 20 到 200 的显着跳跃?谢谢你。
有两种看待这个问题的方法。两者都可以给你你想要的。
我的第一个想法是你的问题非常接近提供你的答案。您通过将您的第一个计算称为速度(分数随时间的变化率)给了自己一个重要提示。然后您可以查看它的加速度 - 速度随时间的变化率。那是:
(A''(score) - A'(score)) - (A'(score) - A(score))
注意,我没有除以时间,因为你说每次测量的时间差是恒定的。然后,您将每个值除以一个常数,这是低效的,并且可能不会给您带来任何进一步的清晰度。
不过,更有可能的是,您似乎想知道从一个分数到下一个分数的变化有多大。我怀疑你想要的是:
(A'(score) - A(score)) / A(score)
这是 (a - b) / b,可减少为 (a/b) - 1。如果您不关心 -1,那么查看分数相关变化的最简单方法是:
A'(score)/A(score)
这显示了分数从一步到下一步的增长率。
根据您的评论,可变的时间率使逻辑更加复杂,但仍然可行。
在这种情况下,您确实想要计算速度,就像您所做的那样:
V = A'(score) - A(score) / A'(time) - A(time)
但是你想根据之前的速度对其进行标准化:
result = V'/V
这就变得类似于“加速度”的例子——它需要 3 个样本才能很好地了解变化率的变化率。如果你把它全部拼写出来,你会得到类似的东西:
result = (A''(score) - A'(score))/(A''(time) - A'(time)) / (A'(score) - A(score))/(A'(time) - A(time))
你可以做一些数学运算来推算这些数字,但确实没有比这更漂亮的结果了。