Time Series 简明教程
Time Series - ARIMA
我们已经了解到,对于平稳时间序列,时间“t”处的变量是先前观测或残差误差的线性函数。因此,现在是时候将这两者结合起来,建立自回归移动平均 (ARMA) 模型了。
然而,有时时间序列不是平稳的,即序列的统计特性(如均值、方差)随时间变化。而我们迄今为止学习过的统计模型假设时间序列是平稳的,因此,我们可以包括差分时间序列的预处理步骤,使其平稳。现在,对于我们正在处理的时间序列是否是平稳的,我们必须找出答案。
用于查找时间序列平稳性的各种方法正在寻找时间序列图中的季节性或趋势,检查不同时间段的均值和方差差异、增强型迪基-福勒 (ADF) 检验、KPSS 检验、赫斯特指数等。
让我们使用 ADF 检验来确定数据集中的“温度”变量是否是平稳的时间序列。
In [74]:
from statsmodels.tsa.stattools import adfuller
result = adfuller(train)
print('ADF Statistic: %f' % result[0])
print('p-value: %f' % result[1])
print('Critical Values:')
for key, value In result[4].items()
print('\t%s: %.3f' % (key, value))
ADF 统计量:-10.406056
p 值:0.000000
临界值:
1%:-3.431
5%:-2.862
10%:-2.567
现在我们已经运行了 ADF 检验,让我们解释一下结果。首先,我们将 ADF 统计量与临界值进行比较,较低的临界值告诉我们该序列很可能是非平稳的。接下来,我们查看 p 值。大于 0.05 的 p 值也表明时间序列是非平稳的。
或者,p 值小于或等于 0.05,或 ADF 统计量小于临界值表明时间序列是平稳的。
因此,我们正在处理的时间序列已经平稳。在平稳时间序列的情况下,我们将“d”参数设置为 0。
我们还可以使用赫斯特指数确认时间序列的平稳性。
In [75]:
import hurst
H, c,data = hurst.compute_Hc(train)
print("H = {:.4f}, c = {:.4f}".format(H,c))
H = 0.1660,c = 5.0740
H<0.5 的值表示反持续性行为,H>0.5 表示持续性行为或趋势序列。H=0.5 表示随机游走/布朗运动。H<0.5 的值,确认我们的序列是平稳的。
对于非平稳时间序列,我们将“d”参数设置为 1。此外,自回归趋势参数“p”和移动平均趋势参数“q”的值是根据平稳时间序列计算的,即通过在对时间序列求差后绘制 ACP 和 PACP 来计算的。
ARIMA 模型的特点在于 3 个参数 (p,d,q),现在我们已经了解了它,因此让我们对我们的时间序列建模并预测温度的未来值。
In [156]:
from statsmodels.tsa.arima_model import ARIMA
model = ARIMA(train.values, order=(5, 0, 2))
model_fit = model.fit(disp=False)
In [157]:
predictions = model_fit.predict(len(test))
test_ = pandas.DataFrame(test)
test_['predictions'] = predictions[0:1871]
In [158]:
plt.plot(df['T'])
plt.plot(test_.predictions)
plt.show()
In [167]:
error = sqrt(metrics.mean_squared_error(test.values,predictions[0:1871]))
print ('Test RMSE for ARIMA: ', error)
ARIMA 的测试 RMSE:43.21252940234892