背景
我正在研究电能表读数的时间序列数据集。系列的长度因米而异——有些我有几年,有些只有几个月,等等。许多显示出明显的季节性,而且通常是多层的——在一天、一周或一年内。
我一直在做的一件事是对这些时间序列进行聚类。目前我的工作是学术性的,虽然我也在对数据进行其他分析,但我有一个特定的目标来进行一些聚类。
我做了一些初步工作,计算了各种特征(周末与工作日使用的百分比,不同时间段使用的百分比等)。然后,我继续研究使用动态时间规整 (DTW) 来获得不同系列之间的距离,并根据差异值进行聚类,我发现了几篇与此相关的论文。
问题
特定系列中的季节性变化会导致我的聚类不正确吗?如果是这样,我该如何处理?
我担心的是,在时间序列中的模式发生变化的情况下,DTW 获得的距离可能会产生误导。这可能导致不正确的聚类。
如果上述内容不清楚,请考虑以下示例:
示例 1
仪表从午夜到早上 8 点读数较低,然后读数在接下来的一个小时内急剧增加,从上午 9 点到下午 5 点保持高位,然后在接下来的一个小时内急剧下降,然后从下午 6 点到午夜保持低位。仪表每天都会持续这种模式持续数月,但随后会变为读数全天保持一致水平的模式。
示例 2
仪表显示每月消耗的能量大致相同。几年后,它会转变为一种模式,即在夏季月份能源使用量较高,然后恢复到正常水平。
可能的方向
- 我想知道我是否可以继续比较整个时间序列,但是如果模式发生很大变化,则将它们拆分并将它们视为一个单独的序列。但是,要做到这一点,我需要能够检测到这些变化。另外,我只是不知道这是否是一种合适的方式或使用数据。
- 我还考虑过拆分数据并将其视为许多单独的时间序列。例如,我可以将每天/仪表组合视为一个单独的系列。但是,如果我想考虑每周/每月/每年的模式,我需要做类似的事情。我认为这会奏效,但它可能会非常繁重,如果我错过了更好的方法,我不想走这条路。
进一步说明
这些是评论中出现的事情,或者我因评论而想到的事情,这可能是相关的。我把它们放在这里,这样人们就不必通读所有内容来获取相关信息。
- 我在 Python 中工作,但是对于那些 R 更适合的地方有 rpy。不过,我不一定要寻找 Python 的答案——如果有人对应该做什么有一个实际的答案,我很乐意自己弄清楚实现细节。
- 我有很多工作的“草稿”代码——我已经完成了一些 DTW 运行,我已经完成了几种不同类型的集群等。我想我在很大程度上了解我正在采取的方向,以及我的目标我真正寻找的是与我在查找距离、运行聚类等之前如何处理我的数据有关。鉴于此,我怀疑无论系列之间的距离是通过 DTW 还是更简单的欧几里德距离 (ED) 计算的,答案都是相同的。
- 我发现这些论文在时间序列和 DTW 方面特别有用,如果主题领域需要一些背景知识,它们可能会有所帮助:http ://www.cs.ucr.edu/~eamonn/selected_publications.htm