时间序列数据的形状检测

机器算法验证 时间序列 聚类 曲线
2022-03-22 20:01:07

我收集了大量的时间序列——在 1 年的时间里,在各个不同地点每 15 分钟进行一次测量(一天 96 次测量)。

我将每个时间序列分解为 365 个单独的较小时间序列,一年中的每一天都有 1 个。查看这些时间序列,一天肯定有许多不同的形状。有些看起来是正弦曲线,有些是恒定的,有些看起来像随机随机过程,有些看起来像抛物线,有些看起来像 U 形。

我想做的是使用一种可以找到这些常见形状的算法。我考虑过聚类,并使用聚类质心来定义常见形状,但想与社区核实这是否正确。到目前为止,我已经将动态时间扭曲视为一个指标,但该指标似乎需要大量计算。我也发现

http://mox.polimi.it/it/progetti/pubblicazioni/quaderni/13-2008.pdf来自 SE。

我还看到了是否可以根据曲线形状进行时间序列聚类?但这个问题是从 2010 年开始的,可能已经过时了。

我的另一个想法是对格式如下的矩阵进行特征分解:

矩阵是在第天观察到的所有时间序列的矩阵。的每一行都是一个长度为 96 的时间序列。然后,我会做 365 个特征分解,并将特征向量用作常见形状。这听起来合理吗?MiiMi

谢谢!

1个回答

我不会基于复杂曲线分析深入研究时间序列的聚类,因为您的数据中可能有很多噪音,并且您可能会得到奇怪的(无意义的)聚类。

我认为更简单的方法是发现数据的主要模式,这很可能基于趋势季节性(一周中的几天、周末、节假日......)。您可以通过在 x 轴上绘制每天的一些统计数据(平均值、早晨趋势、晚上趋势...)和时间(一年中的一天、一周中的一天、一个月中的一天...)来找到它。这将为您提供数据的基线,从而为您提供基本集群。

例如,在 R 中,如果您的日期在第 1 列,平均值在第 2 列,您可以通过以下方式轻松绘制工作日模式的基线:

data[,3] <- as.factor(weekdays(data[,1]))
plot(data[,3],data[,2],main='mean by Day of Week')

下一步可以是识别异常值并检查是否可以在那里找到模式。

如果您喜欢以相反的顺序工作;像您建议的那样运行自动分析,或者将更多时间序列调整为LB_Keoghkml,这没关系。但是您需要使用上述逻辑返回对发现的有意义的解释。