参考文章:点这里
平稳性:
通常来说,一个平稳的时间序列指的是这个时间序列在一段时间内=具有稳定的统计值,如均值、方差。由于我们对于一个数据是否平稳是有自己的直觉的,所以在实践的过程中要谨防过于依赖直觉而被直觉所欺骗。
验证方法:
Augmented Dickey Fuller Test(ADF Test) 是最常使用的一种方法,ADF Test也是单位根验证(unit root test)的一种。单位根是一个使得时间序列非平稳的一个特征,从技术上说,在下面的公式中如果alpha = 1,那么我们说存在单位根。
其中Yt,Yt-1分别是 t 时刻和 t-1 时刻的时间序列值,Xe表示外生变量,E表示误差项。
从直觉上我们可以理解为,只有当alpha<1时,整个时间序列的趋势才是有可能出现逆转的。而ADF test就是对alpha值的假设检验,它的原假设是alpha =1,即原假设成立,则时间序列非平稳。
但是我们需要记住,ADF test不是一个永远行之有效的方法,它存在一些不足:
- 对于区分近似单位根(near unit roots)和单位根不是很有效
- 当数据点很少时,容易出现假阳性的问题
- 大多数测试不会检测所有导致非平稳的因素,例如有些测试只是检验均值或方差两者之一是否平稳,有些测试只是检验总体分布。因此在使用任何假设检验时都要先充分理解数据的特点和检验的限制因素。
此外还有一种Kwiatkowski-Phillips-Schmidt-Shin (KPSS) test也是常用的时间序列平稳性假设检验,它和ADF的区别是KPSS的原假设是关于平稳过程,而ADF的原假设是关于单位根。
时间序列平稳性的重要性在于:
- 大量的统计学模型基于平稳性的假设
- 对于一个应用于非平稳时间序列的模型,它的准确性和模型指标会随着时间序列本身变化而变化,从而造成模型本身不稳定。
而对于一个非平稳的时间序列,其实是可以通过一些简单的变换使之变成平稳性的。log变换和平方根变换是两个常用的方式,其适用于非等方差的场景。另外可以通过差分的方式消除时间序列趋势。
平稳性验证Demo
import matplotlib.pyplot as plt
from statsmodels.tsa.stattools import adfuller
import pandas as pd
import numpy as np
x = [1, 2, 3, 4, 5, 6, 7]
y = [1, 4, 9, 12, 17, 20, 27]
s = pd.Series(y, index=x)
result = adfuller(s, autolag='AIC')
print(f'ADF Statistic: {result[0]}')
print(f'p_value: {result[1]}')
series1 = np.random.randn(100)
plt.plot(series1)
plt.show()
result1 = adfuller(series1,autolag='AIC')
print(f'ADF Statistic:{result1[0]}')
print(f'p-value:{result1[1]}')
标签:数据分析,平稳,单位根,ADF,时间,序列,tsfresh,平稳性 From: https://www.cnblogs.com/xunzf0402/p/16965667.html