如何从auto_arima返回的最优模型中提取p、d、q参数自动化拟合ARIMA模型
参数提取与全流程自动化实现方案
1. 最优p/d/q参数提取方法
pmdarima的auto_arima返回的拟合对象自带order属性,直接返回(p,d,q)格式的元组,无需额外解析,提取方式如下:
p, d, q = fit.order
2. 自动化全流程修改后的代码
针对现有代码调整如下,核心改动是自动提取参数传入ARIMA拟合函数,同时优化了代码结构避免重复导入、增加结果存储逻辑:
import numpy as np import pandas as pd from pmdarima import auto_arima from statsmodels.tsa.arima.model import ARIMA import matplotlib.pyplot as plt def ARIMACheck(data): # 不需要季节性模型可加seasonal=False参数提升计算速度 fit = auto_arima(data[20], trace=True, seasonal=False) return fit def ARIMA(data, p, d, q): x_train = data.iloc[:-200] x_test = data.iloc[-200:] y_test = x_test.loc[:, 20] model = ARIMA(x_train[20], order=(p,d,q)) model = model.fit() # 返回模型和测试集方便后续评估预测 return model, x_test, y_test def Split(data): # 新增:存储每个城市的模型结果方便后续调用 city_model_res = {} for i in range(7): data[i].replace(0, np.nan, inplace=True) for i in range(7): datatemp = data.copy() datatemp = datatemp.dropna(subset=[i]) datamap = datatemp.loc[:, 20] datamap.plot(figsize=(50,10)) plt.show() # 获取最优模型 fit = ARIMACheck(datatemp) # 自动提取p d q参数 p, d, q = fit.order print(f"城市{i}最优参数:p={p}, d={d}, q={q}") # 传入参数拟合模型 model, x_test, y_test = ARIMA(datatemp, p, d, q) # 存储结果 city_model_res[f"城市{i}"] = { "model": model, "best_order": (p,d,q), "test_data": x_test, "test_y": y_test } return city_model_res # 运行全流程,所有城市的建模结果存在res字典里 res = Split(data)
3. 注意事项
- 如果城市数量不固定,可以把
range(7)改成动态获取列数的逻辑,比如range(data.shape[1]-1)适配不同数据集 - 如果单城市序列长度不足200,固定切200条测试集会报错,可以改成按比例切分,示例如下:
test_size = int(len(data)*0.1) x_train = data.iloc[:-test_size] x_test = data.iloc[-test_size:] - 若需要验证模型效果,可以在ARIMA函数里新增预测逻辑,计算MAE、RMSE等指标输出。
内容的提问来源于stack exchange,提问作者NewCoder1423
相关产品推荐
相关产品推荐

