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