ARIMA模型利用历史数据对时间序列进行预测,属于参数型方法,全称Autoregressive Integrated Moving Average Model,是集合了自回归模型AR(Autoregressive)、移动平均模型MA(Moving Average)和差分过程I(Integrated)的模型。
ARIMA(p,d,q)模型中的参数p, d, q分别来源于对应的三个部分:
AR部分:利用过去的值来预测未来的值,假设是线性关系,即利用过去p个值的加权平均来进行预测;
I差分部分:通过差分操作,来消除时间序列中的趋势和季节性因素,d代表差分的阶数;
MA部分:利用过去的误差来预测未来的值,假设时间序列是平稳的,也假设呈线性关系,利用过去q个白噪声的加权平均来进行预测。
实现ARIMA模型使用statsmodels包:statsmodels.tsa.arima.model.ARIMA。
一、基本用法
构建模型
from statsmodels.tsa.arima.model import ARIMA
model = ARIMA(data, order=(7,0,1))
model_fit = model.fit()
模型训练时输入什么类型,则预测输出也是同样的类型,输入array,预测结果也是array, 输入带datetimeindex的series或dataframe,预测结果也是带datetimeindex的series或dataframe,其中datetimeindex需要指定频率,因为ARIMA模型要求时间序列的时间间隔相等。
forecast预测
pred = model_fit.forecast() # 一步预测
pred = model_fit.forecast(steps=5) # 多步预测 指定步数
pred = model_fit.forecast('2012-03-06 14:40:00') # 多步预测 指定end datetime
ARIMA模型本质只能预测未来一步,多步预测采用的是recursive循环的计算方法。
predict预测
# 指定要预测区间的起止index,index是相对于模型训练数据而言的,训练数据的第一个ts的index为0
pred = model_fit.predict(start=start_index, end=end_index)
# 只有一个输入时,代表start index,预测start index至数据集的最后一个ts
pred = model_fit.predict(1000)
# 指定要预测区间的起止datetime
pred = model_fit.predict(start='2012-03-06 14:20:00', end='2012-03-07 23:55:00')
其中有个参数“dynamic”,dynamic=False代表使用真值true value, dynamic=True则使用预测值predicted value,例如在对 t +