如何标准化趋势数据?

How can I normalize trending data?

假设我想计算两个数据点(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

然后这变得类似于 "acceleration" 示例 - 它需要 3 个样本才能很好地了解变化率的变化率。如果你一路拼写出来,你会得到这样的东西:

result = (A''(score) - A'(score))/(A''(time) - A'(time)) / (A'(score) - A(score))/(A'(time) - A(time))

您可以做一些数学运算来推算这些数字,但确实没有比这更漂亮的结果了。