python 寻找ARIMA模型最优p、d、q
时间: 2023-07-10 15:29:18 浏览: 215
Python建立ARIMA模型
5星 · 资源好评率100%
寻找ARIMA模型最优p、d、q的常用方法是通过网格搜索(Grid Search)来实现。具体步骤如下:
1. 定义p、d、q的取值范围,例如p从0到3,d从0到1,q从0到3。
2. 对于每一组p、d、q的取值,建立ARIMA模型,并使用交叉验证(Cross Validation)来评估模型的表现,通常采用均方根误差(Root Mean Squared Error,RMSE)或平均绝对误差(Mean Absolute Error,MAE)作为评价指标。
3. 找到RMSE或MAE最小的一组p、d、q,即为最优模型。
代码示例:
```python
import itertools
import warnings
import numpy as np
import pandas as pd
import statsmodels.api as sm
# 定义p、d、q的取值范围
p = range(0, 4)
d = range(0, 2)
q = range(0, 4)
# 生成所有可能的p、d、q的组合
pdq = list(itertools.product(p, d, q))
# 定义ARIMA模型的评价指标
def evaluate_arima_model(train, test, arima_order):
# 建立ARIMA模型
model = sm.tsa.ARIMA(train, order=arima_order)
# 拟合模型
model_fit = model.fit(disp=0)
# 预测测试集
y_pred = model_fit.forecast(steps=len(test))[0]
# 计算RMSE
rmse = np.sqrt(np.mean((test - y_pred)**2))
return rmse
# 定义ARIMA模型的网格搜索函数
def grid_search_arima(data, pdq):
best_score, best_cfg = float("inf"), None
for order in pdq:
try:
# 划分训练集和测试集
train_size = int(len(data) * 0.8)
train, test = data[0:train_size], data[train_size:]
# 评估模型
rmse = evaluate_arima_model(train, test, order)
# 更新最优模型
if rmse < best_score:
best_score, best_cfg = rmse, order
print('ARIMA%s RMSE=%.3f' % (order, rmse))
except:
continue
print('Best ARIMA%s RMSE=%.3f' % (best_cfg, best_score))
# 加载时间序列数据
data = pd.read_csv('data.csv', header=None, index_col=0, parse_dates=True, squeeze=True)
# 禁止ARIMA模型警告输出
warnings.filterwarnings("ignore")
# 进行ARIMA模型的网格搜索
grid_search_arima(data, pdq)
```
上述代码中,我们使用了statsmodels库中的ARIMA模型来建立时间序列模型,并定义一个评价指标evaluate_arima_model来评估模型的表现。最后,我们定义了一个网格搜索函数grid_search_arima来进行ARIMA模型的网格搜索。
阅读全文