首先要讲的是,在短时交通流预测领域,ARIMA模型是一种相当粗糙的基于时间序列的预测方法,相应地,这种预测方法的准确性也不高。同时,ARIMA方法也不在我的研究范围内,所以本次实验就直接使用网络上现成的python第三方库进行实现,不再重新造轮子。
ARIMA模型表达为ARIMA(p,d,q),是在ARMA模型的基础上新引入了'I'也就是差分的思想。ARIMA模型由三个部分组成,分别是AR(p)模型、I(d)差分方法、MA(q)模型。
AR(p)模型(AutoRegressive):p即为时间序列的长度,AR(p)模型的预测值是将过去p长度的时间序列的各真实值进行加权平均得到的。
I(d)差分:d为差分的阶数。差分的目的是将原本不平稳的时间序列经过差分,转化为更加平稳的序列。d的取值取决于原序列经过几次差分后可以转化为平稳或者弱平稳的序列。
MA(q)模型(MovingAverage):MA 模型适用于平稳的序列上,q也表示了过去的供预测的时间序列的长度,而通过MA模型进行的预测是将过去q个时间段的误差值取不同权重进行累加,再同平稳序列的均值加和得到的。
基于上述的思想,ARIMA(p,d,q)模型先经过d阶差分将原序列转化为较为平稳的时间序列,再通过计算确定效果最好的p、q的值,最后通过p、d、q的取值建立一个ARIMA模型。
实现代码如下:
import pandas as pd
from statsmodels.stats.diagnostic import acorr_ljungbox
from statsmodels.tsa.arima_model import ARIMA
from statsmodels.graphics.tsaplots import plot_acf, plot_pacf
import matplotlib.pyplot as plt
from statsmodels.tsa.stattools import adfuller
##通过数据的前288行计算p、d、q取值
filename = r'train13720.csv'
data = pd.read_csv(filename, index_col = 'timestamp').iloc[:288,:]
#画出折线图
#data.plot()
#plt.show()
#画出自相关性图
#plot_acf(data)
#plt.show()
#原始序列的平稳性检测
print('原始序列的检验结果为:',adfuller(data['hourly_traffic_count