auto.arima()等效于python

Aja*_*jax 62 python r time-series forecasting statsmodels

我试图使用ARMA ARIMA模型预测每周销售额.我找不到调整顺序(p,d,q)的函数statsmodels.目前R具有forecast::auto.arima()调整(p,d,q)参数的功能.

如何为我的模型选择正确的订单?为此目的,python中是否有可用的库?

beh*_*uri 59

您可以实施多种方法:

  1. ARIMAResults包括aicbic.根据他们的定义(参见此处此处),这些标准会对模型中的参数数量进行惩罚.因此,您可以使用这些数字来比较模型.还有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)
    
    Run Code Online (Sandbox Code Playgroud)

    确保你打电话brutefinish=None.

  2. 您可能获得pvaluesARIMAResults.因此,一种逐步转发算法易于实现,其中模型的程度在整个维度上增加,其获得所添加参数的最低p值.

  3. 使用ARIMAResults.predict交叉验证的替代机型.最好的方法是保持时间序列的尾部(比如最近5%的数据),并使用这些点来获得拟合模型的测试误差.

  • master中已有一个包装函数可以为您完成此操作.http://statsmodels.sourceforge.net/devel/generated/statsmodels.tsa.stattools.arma_order_select_ic.html#statsmodels.tsa.stattools.arma_order_select_ic这是我们现在最接近auto.arima的地方. (15认同)
  • 没关系,对于那些也对此感到困惑的人来说,exog/endog是适合的数据.Brute自动使用其第二个参数作为函数的第一个参数,然后按其列出的顺序使用其他参数. (4认同)
  • @jseabold你知道源代码,但名字暗示它的arma不是arima (3认同)
  • ARIMA(带有集成)的订单选择似乎[现在可用](http://www.statsmodels.org/devel/ generated/statsmodels.tsa.x13.x13_arima_select_order.html)。 (2认同)