如何根据每个系列的趋势对多个时间序列进行排序

问题描述

嗨,我正在记录大约 15 万件涌入商品的数据。我曾尝试按项目 ID 分组并使用 the docs 中的一些函数,但它们似乎没有显示“趋势”。

因为有很多系列要分组。我目前正在对每个系列执行查询以计算一个值、存储它并据此排序。

我曾尝试使用线性回归(线的平均角度),但它并不完全适用于此,因为 X 轴是时间戳,与 Y 轴值无关,因此最终得到一条接近垂直的线.也许我可以将 X 值计算为其他值?

我遇到的另一个问题是某些系列的值比其他系列高得多,所以一个系列上升 1000 可能是巨大的(非常趋势),而对于其他系列总是高得多,这没什么大不了的。

有没有一种方法可以从一个系列中生成一个代表该系列趋势的单一值,例如,与正常情况相比,它只是跳了很多。

以下是一个不流行系列和几天前流行的系列示例。所以后者的趋势值会高于第一个

enter image description here

enter image description here

谢谢!

解决方法

我认为类似的问题自然会出现在股票市场中,并且通常在检测异常值时会出现。

所以有不同的移动方式。可能 1 就足够了。

  1. 看起来你在图中有一个 moving average。您可以将差值移到移动平均线并查看分布以评估您要注意的适当阈值。看起来在第一张图中您有一个可能相关的事件。您可以设置一个阈值,例如实际系列和移动平均之间的差异的平均值的两个标准差。

  2. 去趋势化每个系列。即使 1) 可能已经足够好(我的意思是减去该系列的实际价值减去过去 X 天的平均值),您可以使用更复杂的想法来消除趋势。但这可能需要对每种情况给予更多关注,例如您应该注意季节性等。可能是 Hodrick Prescott 行或与此相关的内容:https://machinelearningmastery.com/decompose-time-series-data-trend-seasonality/

  3. 也许 1) 中的想法更正式地描述为 Bollinger Bands。这有助于您以一定的概率知道时间序列应该在哪里。

  4. 有更复杂的方法来识别时间序列中的异常值(如此处:https://towardsdatascience.com/effective-approaches-for-time-series-anomaly-detection-9485b40077f1)或此处的文献综述:https://arxiv.org/pdf/2002.04236.pdf