一.时间序列的平稳性
并不是所有的时间序列都是可预测的,想象一下,假如一个时间序列的变化特性是不稳定的,那么它每个时期的波动对于之后一个时期的变化的影响都是无法预测的,因为它随时可能变脸。而当一个时间序列的变化特征维持稳定,数据的历史分布和未来分布就会趋于一致,这时我们就可以根据历史数据对未来作出预测。用来刻画数据变化特征稳定的量就是时间序列的平稳性。
二.平稳性的定义
- 强平稳性:
强平稳的要求非常严格,它要求两组数据之间的任何统计性质都不会随着时间改变。其要求过于严苛,理论上很难证明、实际中难以检验,因此它基本上没有什么应用场景。 - 弱平稳性:
弱平稳序列不要求全部特性不随时间改变,仅要求平均值、方差和协方差不随时间而变化。
让我们用一个直观的例子来理解这一点。考虑以下三个图形:
- 在第一幅图中,我们可以清楚地看到,均值随时间而变化(增加),呈现上升的趋势。因此,这是一个非平稳序列。平稳序列不应该呈现出随时间变化的趋势。
- 第二幅图虽然没有趋势,但序列的波动是一个时间的函数,波动性很随机。正如前面提到的,平稳序列的方差必须是一个常数。
- 再来看第三幅图,随着时间的增加,序列传播后变得更近,这意味着协方差是时间的函数。
三.平稳性的检验方法
1. 观察图像
如果图像没有明显的趋势,围绕着一个水平线稳定波动,序列传播没有明显的疏密变化,则可以判定为稳定序列。当然这种方法过于主观,还是需要更为严密的统计学检验。
2.单位根检验
观察图像的方式很直观,但也很主观,不适用于机器自动判断序列的稳定性。因此我们需要一个更有说服力、更加客观的统计方法来帮助我们检验时间序列的平稳性,这种方法,就是单位根检验。
当一个时间序列的滞后算子多项式方程存在单位根时,我们认为该时间序列是非平稳的;反之,当该方程不存在单位根时,我们认为该时间序列是平稳的。其原理比较复杂,想要理解它需要较好的数学基础,这里我们只关注在Python中如何使用。
常见的单位根检验方法有DF检验、ADF检验和PP检验,这里演示如何使用最常用的ADF检验。
(1)Python中的statsmodels库提供ADF检验函数,使用时需要引入
from statsmodels.tsa.stattools import adfuller as ADF
(2)具体函数如下:
statsmodels.tsa.stattools.adfuller(x, maxlag=None, regression='c', autolag='AIC', store=False, regresults=False)
- x:一维数组
- maxlag:最大延迟阶数
- regression:回归中的均值和趋势
'c' : constant only (default),默认,仅有常数均值。
'ct' : constant and trend,有常数均值,有趋势。
'ctt' : constant, and linear and quadratic trend,有常数均值有线性和二次趋势。
'nc' : no constant, no trend,无常数均值,无趋势。 - autolag:自动选择延迟阶数的标准
'none',则使用最大延迟阶数
'AIC' or 'BIC',则延迟阶数是根据相应的最小信息准则决定的。
't-stat' ,这个选择要基于最大延迟maxlag,从最大延迟阶数开始,每次减少一个延迟,直到某一阶延迟的t统计量对5%来说是显著的。(也就是说p_value值小于0.05,显著拒绝原假设,证明无单位根,也就是说序列是平稳的)
(3)返回值解析:
(-5.2350403606036302, 7.4536580061930903e-06, 0, 60, {'1%': -3.5443688564814813, '5%': -2.9110731481481484, '10%': -2.5931902777777776}, 1935.4779504450603)
- τ统计量的值。如果该值小于'1%'对应的值,则完全拒绝原假设,认为序列稳定。
- p_value的值。如果该值无限接近于0,则认为序列稳定。
- 结果使用的延迟阶数。
- ADF回归和计算临界值所使用的观察次数。
- 临界值比对列表。
- 最大的信息准则的值(如果autolag 非空),也就是AIC或者BIC的值。
网友评论