一、 ARIMA模型介绍
ARIMA模型,全称自回归移动平均模型(AutoRegressive Integrated Moving Average),是一个常用的时间序列预测模型。ARIMA模型将时间序列拆分为三个部分,包括自回归(AR)部分,移动平均(MA)部分和差分(I)部分。
ARIMA模型采用历史数据来推断未来趋势,因此在使用ARIMA模型前,需要考虑模型选择和参数调整。
二、ARIMA模型参数p q d的含义
ARIMA模型有三个参数需要调节,分别为p、q和d。
p参数表示自回归模型的阶数。AR(Auto Regression)表示自回归模型,其模型中的一个值是基于其前一个取值得到的。p参数决定了模型中自回归项(AR项)的个数。
q参数表示移动平均模型的阶数。MA(Moving Average)表示移动平均模型,其模型中的一个值是基于预测误差得到的。q参数决定了模型中移动平均项(MA项)的个数。
d参数表示时间序列进行差分的次数。差分可以让时间序列的平稳性提高,以便更好地应用ARIMA模型。d参数通常在1或2之间选择,取决于时间序列的性质。
三、ARIMA模型参数选择方法
ARIMA模型中的参数p、q和d需要根据数据选择合适的取值。下面介绍几种常用的方法:
1. 自相关图和偏自相关图
自相关图(ACF图)和偏自相关图(PACF图)是一种常用的选择ARIMA模型参数的方法,它们能够帮助我们判断AR和MA模型中p和q参数的取值。
ACF图是时间序列自相关系数的图像,表示随时间间隔的变化,时间序列自身的相关性。PACF图是偏自相关系数的图像,表示两个时间点之间的特殊相关性。
import pandas as pd import statsmodels.api as sm from statsmodels.graphics.tsaplots import plot_acf, plot_pacf # 得到自相关图和偏自相关图 plot_acf(data) #自相关图 plot_pacf(data) #偏自相关图
2. 网格搜索法
网格搜索法(Grid Search)是一种常用的选择ARIMA模型参数的方法,它能够快速地搜索不同的p、q、d的取值组合,并评估每个组合的预测能力。
下面是以AIC为评估标准的网格搜索代码示例:
import itertools import warnings warnings.filterwarnings("ignore") # 关闭警告信息 # 首先定义一个参数范围的列表 p = range(0, 4) d = range(0, 2) q = range(0, 4) # 得到所有组合 pdq = list(itertools.product(p, d, q)) # 遍历所有组合并评估其ARIMA模型的AIC值 aic = [] for param in pdq: try: model = sm.tsa.ARIMA(data, order=param) results = model.fit() aic.append(results.aic) print('ARIMA {} - AIC:{}'.format(param, results.aic)) except: continue # 找到AIC值最小的那个模型 best = pdq[aic.index(min(aic))] print('Best ARIMA:{} - AIC:{}'.format(best, min(aic)))
3. 自动ARIMA模型选择
在statsmodels库的最新版本中,已经提供了自动ARIMA模型选择的功能。它能够通过输入时间序列数据和选择标准,自动选择最适合的ARIMA模型。
import pmdarima as pm model = pm.auto_arima(data, seasonal=False, trace=True) print('Best ARIMA:{} - AIC:{}'.format(model.order, model.aic()))
四、模型评估和预测
进行ARIMA模型参数选择后,需要评估模型的拟合程度,并进行预测。
1. 模型拟合程度的评估
使用模型对训练集进行预测,然后将预测结果与训练集的实际值进行对比,得到拟合程度的评估指标,如RMSE、MAE和R^2等。
from sklearn.metrics import mean_squared_error # 模型训练和预测 model = sm.tsa.ARIMA(data, order=(1, 1, 1)) results = model.fit() prediction = results.predict() # 计算预测误差和评估指标 error = mean_squared_error(data, prediction) print('RMSE:{}'.format(np.sqrt(error)))
2. 预测未来值
使用训练好的模型进行未来值预测,得到的结果可以用来制定相应的策略。
# 预测未来值(forecast) prediction = results.forecast(7) # 预测未来7天的数据
五、总结
本文介绍了ARIMA模型中参数p、q和d的含义和选择方法,采用了自相关图和偏自相关图、网格搜索法和自动ARIMA模型选择三种方法进行了实现。同时,本文还介绍了如何进行模型评估和预测。在ARIMA模型选择时,我们需要结合实际情况选择合适的方法,分析观察时间序列的性质和特点,以获得更好的模型效果。