auto.arima() equivalent for python

前端 未结 8 927
旧时难觅i
旧时难觅i 2020-11-28 03:30

I am trying to predict weekly sales using ARMA ARIMA models. I could not find a function for tuning the order(p,d,q) in statsmodels. Currentl

8条回答
  •  离开以前
    2020-11-28 03:50

    I wrote these utility functions to directly calculate pdq values get_PDQ_parallel require three inputs data which is series with timestamp(datetime) as index. n_jobs will provide number of parallel processor. output will be dataframe with aic and bic value with order=(P,D,Q) in index p and q range is [0,12] while d is [0,1]

    import statsmodels 
    from statsmodels import api as sm
    from sklearn.metrics import r2_score,mean_squared_error
    from sklearn.utils import check_array
    from functools import partial
    from multiprocessing import Pool
    def get_aic_bic(order,series):
        aic=np.nan
        bic=np.nan
        #print(series.shape,order)
        try:
            arima_mod=statsmodels.tsa.arima_model.ARIMA(series,order=order,freq='H').fit(transparams=True,method='css')
            aic=arima_mod.aic
            bic=arima_mod.bic
            print(order,aic,bic)
        except:
            pass
        return aic,bic
    
    def get_PDQ_parallel(data,n_jobs=7):
        p_val=13
        q_val=13
        d_vals=2
        pdq_vals=[ (p,d,q) for p in range(p_val) for d in range(d_vals) for q in range(q_val)]
        get_aic_bic_partial=partial(get_aic_bic,series=data)
        p = Pool(n_jobs)
        res=p.map(get_aic_bic_partial, pdq_vals)  
        p.close()
        return pd.DataFrame(res,index=pdq_vals,columns=['aic','bic']) 
    

提交回复
热议问题