我正在尝试使用ARMA ARIMA模型预测每周销售量。我在statsmodels
中找不到用于调整order(p,d,q)的函数。当前,R具有函数forecast::auto.arima()
,它将调节(p,d,q)参数。
如何为模型选择正确的顺序? python中有为此目的提供的任何库吗?
最佳答案
您可以实现多种方法:
ARIMAResults
包括aic
和bic
。根据它们的定义(请参阅here和here),这些条件对模型中的参数数量不利。因此,您可以使用这些数字来比较模型。 scipy还有 optimize.brute
,它在指定的参数空间上进行网格搜索。因此,这样的工作流程应该可以工作:def objfunc(order, exog, endog):
from statsmodels.tsa.arima_model import ARIMA
fit = ARIMA(endog, order, exog).fit()
return fit.aic()
from scipy.optimize import brute
grid = (slice(1, 3, 1), slice(1, 3, 1), slice(1, 3, 1))
brute(objfunc, grid, args=(exog, endog), finish=None)
确保使用
brute
调用finish=None
。 pvalues
获得ARIMAResults
。因此,一种易于执行的步进算法可以在整个维度上增加模型的度数,从而为添加的参数获得最低的p值。 ARIMAResults.predict
交叉验证替代模型。最好的方法是使时间序列的尾部(例如最新数据的5%)不出现在样本中,并使用这些点来获得拟合模型的测试误差。