在对时间序列数据进行分析预测时,平稳时间序列数据预测效果更好。所以首先要检测数据是否平稳,没有趋势的时间序列数据,我们称为平稳的,即随着时间的推移,表现出恒定的方差,具有恒定的自相关结构。本文介绍如何检测数据集是否平稳的方法,并给出实战过程代码。常用的检测方法有KPSS,Phillips–Perron,
和 Augmented Dickey-Fuller,本文主要介绍ADF检测。
单位根检验
在时间序列分析中,单位根检验是检验时间序列是否不平稳,是否由单位根组成。时间序列中单位根的存在定义了零假设,备择假设定义了时间序列是平稳的。单位根检验的数学公式可表示为:
y t = D t + z t + ɛ t y_t = D_t + z_t + ɛ_t yt=Dt+zt+ɛt
- D t D_t Dt 是决定性成分
- Z t Z_t Zt 是随机成分
- ɛ t ɛ_t ɛt 是平稳的误差处理
单位根检验的基本概念是确定 z t z_t zt(随机分量)是否由单位根组成。
ADF检验简要说明
ADF(Augmented Dickey-Fuller) 检验是一种检验时间序列数据是否平稳的方法。ADF是统计显著性检验,包括零假设和备择假设分别为:
-
H0
时间序列不是平稳的,换句话说,它有一些随时间变化的结构,随时间推移没有恒定的方差。
-
H1
时间序列是平稳的。
如果测试的P值小于显著性水平(假设为 .α = .05),那么我们能拒绝零假设,得出结论时间序列是平稳的。下面通过示例进行说明。
Python实现ADF检验
假设我们有下面测试数据:
data = [3, 4, 4, 5, 6, 7, 6, 6, 7, 8, 9, 12, 10]
在检验之前,我们先对数据进行可视化,展示数据的分布情况。下面代码可视化数据:
import matplotlib.pyplot as pltplt.plot(data)
plt.show()
要执行ADF单位根检验,需要statsmodels库中导入函数 adfuller()
函数,首先需要安装statsmodels包:
pip install statsmodels
接下来,我们使用下面代码执行ADF检验:
from statsmodels.tsa.stattools import adfuller# perform augmented Dickey-Fuller test
result = adfuller(data)
print(result)
输出结果如下:
-0.975383623474406, 0.7621363564361016, 0, 12, {'1%': -4.137829282407408, '5%': -3.1549724074074077, '10%': -2.7144769444444443}, 31.2466098872313
这里我们解释前两个最重要的值:
- 检验统计量: -0.97538
- P-value: 0.7621
既然P值不小于.05, 我们不能拒绝零假设。这意味着数据不是平稳的,也就是说随时间推移没有恒定的方差。