如何在python中找到ARIMA模型的参数[p,d,q]值?

时间:2018-12-07 21:43:06

标签: python time-series arima

预测ARIMA模型参数的p,d和q值的正确方法是什么。

网格搜索如何帮助您找到这些参数?

如何使非平稳数据变为平稳数据以应用ARIMA?

我已经提到了这个article

1 个答案:

答案 0 :(得分:2)

对于网格搜索方法,您可以使用分为两部分的方法:

  1. 评估ARIMA模型。
    • 将数据集分为训练集和测试集。
    • 遍历测试数据集中的时间步长。
      • 训练ARIMA模型。
      • 进行一步预测。
      • 商店预测;获取并存储实际观察值。
    • 计算与预期值相比的预测错误得分

此代码:

# evaluate an ARIMA model for a given order (p,d,q)
def evaluate_arima_model(X, arima_order):
    # prepare training dataset
    train_size = int(len(X) * 0.66)
    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
  1. 评估ARIMA参数集,这是代码:
# 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)) 

有关更多详细信息,您可以在此链接中找到一个教程,其中开发了用于单步滚动预测的网格搜索ARIMA超参数,https://machinelearningmastery.com/grid-search-arima-hyperparameters-with-python/