快速搞懂时间序列数据平稳检验

在对时间序列数据进行分析预测时,平稳时间序列数据预测效果更好。所以首先要检测数据是否平稳,没有趋势的时间序列数据,我们称为平稳的,即随着时间的推移,表现出恒定的方差,具有恒定的自相关结构。本文介绍如何检测数据集是否平稳的方法,并给出实战过程代码。常用的检测方法有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 plt


plt.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, 我们不能拒绝零假设。这意味着数据不是平稳的,也就是说随时间推移没有恒定的方差。