auto.arima() equivalent for python

前端 未结 8 977
旧时难觅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 04:12

    def evaluate_arima_model(X, arima_order):
        # prepare training dataset
        train_size = int(len(X) * 0.90)
        train, test = X[0:train_size], X[train_size:]
        history = [x for x in train]
        # make predictions
        predictions = list()
        for t in range(len(test)):
            model = ARIMA(history, order=arima_order)
            model_fit = model.fit(disp=0)
            yhat = model_fit.forecast()[0]
            predictions.append(yhat)
            history.append(test[t])
        # calculate out of sample error
        error = mean_squared_error(test, predictions)
        return error
    
    # evaluate combinations of p, d and q values for an ARIMA model
    def evaluate_models(dataset, p_values, d_values, q_values):
        dataset = dataset.astype('float32')
        best_score, best_cfg = float("inf"), None
        for p in p_values:
            for d in d_values:
                for q in q_values:
                    order = (p,d,q)
                    try:
                        mse = evaluate_arima_model(dataset, order)
                        if mse < best_score:
                            best_score, best_cfg = mse, order
                        print('ARIMA%s MSE=%.3f' % (order,mse))
                    except:
                        continue
        print('Best ARIMA%s MSE=%.3f' % (best_cfg, best_score))
    
    # load dataset
    def parser(x):
        return datetime.strptime('190'+x, '%Y-%m')
    
    
    
    import datetime
    p_values = [4,5,6,7,8]
    d_values = [0,1,2]
    q_values = [2,3,4,5,6]
    warnings.filterwarnings("ignore")
    evaluate_models(train, p_values, d_values, q_values)
    

    This will give you the p,d,q values, then use the values for your ARIMA model

提交回复
热议问题