📜  时间序列-ARIMA

📅  最后修改于: 2020-12-10 06:25:34             🧑  作者: Mango


我们已经了解,对于平稳的时间序列,时间“ t”处的变量是先前观测值或残差的线性函数。因此,现在是我们将两者结合起来并拥有自回归移动平均值(ARMA)模型的时候了。

但是,有时时间序列不是固定的,即序列的统计属性(例如均值,方差)会随时间变化。到目前为止,我们研究的统计模型都假设时间序列是固定的,因此,我们可以包括一个预处理步骤,使该时间序列微分以使其稳定。现在,重要的是要弄清我们正在处理的时间序列是否固定。

查找时间序列平稳性的各种方法是在时间序列图中查找季节性或趋势,检查各个时间段的均值和方差的差异,增强Dickey-Fuller(ADF)测试,KPSS测试,Hurst指数等。

让我们使用ADF测试来查看数据集的“温度”变量是否为固定时间序列。

在[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值。如果p值大于0.05,则表明时间序列是非平稳的。

或者,p值小于或等于0.05,或ADF统计量小于临界值表明时间序列是固定的。

因此,我们正在处理的时间序列已经静止。在固定时间序列的情况下,我们将“ d”参数设置为0。

我们还可以使用Hurst指数来确认时间序列的平稳性。

在[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。

现在已经清楚了以3个参数(p,d,q)为特征的ARIMA模型,因此让我们对时间序列建模并预测温度的未来值。

在[156]中:

from statsmodels.tsa.arima_model import ARIMA

model = ARIMA(train.values, order=(5, 0, 2))
model_fit = model.fit(disp=False)

在[157]中:

predictions = model_fit.predict(len(test))
test_ = pandas.DataFrame(test)
test_['predictions'] = predictions[0:1871]

在[158]中:

plt.plot(df['T'])
plt.plot(test_.predictions)
plt.show()

代码段13

在[167]中:

error = sqrt(metrics.mean_squared_error(test.values,predictions[0:1871]))
print ('Test RMSE for ARIMA: ', error)

测试ARIMA的RMSE:43.21252940234892