您的位置:

ARIMA模型p q d的确定

一、 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模型选择时,我们需要结合实际情况选择合适的方法,分析观察时间序列的性质和特点,以获得更好的模型效果。