时间序列如何更好地分析周期性

by 王芳

​世界是不断变化的,任何事物在两个不同时刻都不可能保持完全相同的状态,正如世上没有两片相同的树叶。但同时很多变化都有着一定的规律,比如一天涨落两次的潮汐,每过12小时就会重复转动的时针等,我们把这些现象称为“周期”。

周期性,指的是时间序列中呈现出来的围绕长期趋势的一种波浪形或振荡式变动。准确提取周期信息,不仅能反映当前数据的规律,应用于相关场景,还可以预测未来数据变化趋势。这是时间序列研究的基本要素。通过肉眼观察时序图,可以很容易地判断数据是否满足周期性,但无法知道准确的周期时长,且当数据组数达到一定量时,这种方式就不再适用了。

本文通过具体实例,揭示了一种周期性检验的有效方法,这种方法无需人为判断,而是通过多方面挖掘时序本身的特点,找到隐藏的周期信息。
现有一份7天的时序数据,每隔2分钟记录一次,为了方便分析,事先对其做了预处理,用合适的数值替换异常点,处理过后的时序图是这样的:
在这里插入图片描述
如图所示,该数据每隔一段时间就呈现相同的波动形态,是典型的周期型数据。那么,怎么用更智能的客观方法检测它的周期性呢?

事实上,时间序列周期性可分为三种:
第一种是符号周期性,它表示只有一个符号是周期性的,比如序列T = fbcnfkgbfops,只有f有周期性,它的周期是p= 4,可以用CONV方法检测;
第二种是部分周期性,它表示有一个以上的符号是周期性的,并且部分地出现,比如T= ansdcdmncdcacdascdmc,序列cd具有周期性,p=4,周期从位置4开始,可以用PARPER方法检测;
第三种是分段周期性,整个时序被表示为一个周期模式,也就是上图所呈现的周期性。 为了更好地介绍周期性检测方法,我们需要先了解一下傅里叶变换和自相关系数。

傅里叶变换

傅里叶变换是一种将时域数据转化为频域数据的方法,任何波形(时域)都可以看做是不同振幅、不同相位正弦波的叠加(频域),比如下面最前方的图形就是它后面所有正弦波的总和。
在这里插入图片描述
对于一份周期性的数据,它本身就很接近正弦波,所以它的组成里一定有一个很重要的正弦波,周期就是该正弦波的周期,而这个正弦波可以通过傅里叶变换找到,它将时序数据展开成三角函数的线性组合,得到每个展开项的系数,就是傅里叶系数。傅里叶系数越大,表明它所对应的正弦波的周期就越有可能是这份数据的周期。

自相关系数

自相关系数度量的是同一事件不同时间的相关程度,比如有一个序列X=[1,2,3,5,7,9,13,14,17,19],求不同相位差的自相关系数,相位差为1时,比较的序列是[1,2,3,5,7,9,13,14,17]和[2,3,5,7,9,13,14,17,19];相位差为2时,比较的序列是[1,2,3,5,7,9,13,14]和[3,5,7,9,13,14,17,19]。不同相位差序列间的自相关系数可以用Pearson相关系数计算。当序列存在周期性时,遍历足够多的相位差,一定可以找到至少一个足够大的自相关系数,而它对应的相位差就是周期。

所以对于检测时序周期来说,只需找到两个自相关系数达到一定阈值的子序列,反映在时序图上,就是两段很相似的数据,它们起始时间的差值就是我们需要的周期。比如下面第二张图和第三张图,它们的序列自相关系数为1,时间间隔为12.57,正好是第一张图的周期。
在这里插入图片描述

周期性检测流程

为了保证结果的可靠性,现将傅里叶分析和自相关系数结合起来判断周期性,首先通过傅里叶变换找到可能的周期,再用自相关系数做排除,从而得到最可能的周期。
在这里插入图片描述
下面周期图将傅里叶变换得到的傅里叶系数长度的平方作为纵坐标,相应索引与序列总长度的比值(频率)为横坐标,很明显的三个凸起点是P1、P2、P3,对应的周期为横坐标的倒数,都可看作候选周期。自相关系数图的横坐标为滞后阶数(相位差),纵坐标为对应的自相关系数值,上述三个点对应在自相关系数图中,可以看到P3周期在“山谷”处(二阶导是负的),而P1、P2周期在“山峰”处(二阶导是正的),所以将P3从候选周期中排除。

在这里插入图片描述

实例分析

我们回到文章开头的时序数据,基于上述方法,对其做周期性检测。从周期图中找到明显的候选周期点是P1=720(周期点可以通过设定阈值得到,大于阈值的点即为周期点),因为数据是2分钟一个点,所以该周期时长为1天。
在这里插入图片描述
利用自相关系数图做进一步检验,将候选周期点标注在该图上,正好处于“山峰”处,所以它就是所求周期,符合实际观察情况。
在这里插入图片描述