我正在尝试使用ARMA ARIMA模型预测每周销售量。我在statsmodels中找不到用于调整order(p,d,q)的函数。当前,R具有函数forecast::auto.arima(),它将调节(p,d,q)参数。

如何为模型选择正确的顺序? python中有为此目的提供的任何库吗?

最佳答案

您可以实现多种方法:

  • ARIMAResults 包括aicbic。根据它们的定义(请参阅herehere),这些条件对模型中的参数数量不利。因此,您可以使用这些数字来比较模型。 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%)不出现在样本中,并使用这些点来获得拟合模型的测试误差。
  • 08-20 02:21