时间序列的快速傅里叶变换和聚类

时间:2014-03-29 10:27:59

标签: r time-series fft cluster-analysis data-mining

我正在制作一个与确定销售动态相关的项目。这就是我的数据库看起来像http://imagizer.imageshack.us/a/img854/1958/zlco.jpg的样子。有三列:

产品 - 展示产品组

周 - 自推出产品(周)以来的第26周

Sales_gain - 产品销售如何按周变化

在数据库中有3302个观察值= 127个时间序列

我的目标是将时间序列分组,这些组将向我展示不同的销售动态。在聚类之前,我想使用快速傅立叶变换来改变向量上的时间序列并考虑幅度等,然后使用距离算法和分组产品。

这是我第一次处理FFT和聚类,所以如果有人指出步骤,我将不胜感激,我必须在使用FFT之前/之后对销售动态进行分组。我想在R中执行所有步骤,所以如果有人键入我应该使用哪些程序来执行所有步骤,那将是非常好的。

这就是我的时间序列现在的样子http://imageshack.com/a/img703/6726/sru7.jpg

请注意,我对时间序列分析相对较新(这就是为什么我不能把我的代码放在这里),所以你可以在R中提供的任何清晰度或任何你可以推荐的有效完成这项任务的包都将受到赞赏。

P.S。而不是FFT我在这里找到了DWT的代码 - > www.rdatamining.com/examples/time-series-clustering-classification但不能在我的数据库和时间序列中使用它(建议R在26周后分析新的时间序列)。可以向我解释一下吗?

1 个答案:

答案 0 :(得分:7)

对于FFT / DWT,您可能太少数据有意义。 DTW可能会更好,但我也不认为它对销售数据有意义 - 为什么从一个位置到另一个位置会有x周的时间偏移?这并不是说数据是在未知的起始周捕获的。

当您的数据具有有趣的重复模式时,FFT和DWT很好,并且您有A)良好的时间分辨率(对于音频数据,例如16000 Hz - 我说的是数千个数据点!)和B)你不知道预期的频率。如果您知道,例如您将拥有每周模式(例如星期日没有销售),那么您应该使用其他算法过滤它们。

事件开始时以及它们如何对齐时,DTW(动态时间扭曲)很好。假设您正在捕捉心脏测量值。你不能指望两个科目的心脏同步击败。 DTW将尝试对齐此数据,并且可能(或可能不)成功匹配例如两个科目的心脏跳动异常。理论上......

也许你根本不需要专门的时间方法。

A)您的数据时间分辨率太低

B)您的数据已完全对齐

也许您只需花费更多时间预处理数据,特别是规范化,以便捕捉相似性。