【问题标题】:Determine the parameter range for Grid Search in ARIMA (p,d,q)确定 ARIMA 中网格搜索的参数范围 (p,d,q)
【发布时间】:2021-10-21 09:52:14
【问题描述】:

我正在尝试用 Python 为房屋做月度价格预测模型。我现在正在使用网格搜索配置超参数。应该是什么 基于附加 ACF/PACF 的 p/d/q_values 范围?

实例为 299 个月。我目前正在测试 p(0;13)、d(0;4)、q(0;13)。 但它需要永远

# evaluate an ARIMA model for a given order (p,d,q) and return RMSE
def evaluate_arima_model(X, arima_order):
    
    # prepare training dataset
    X = X.astype('float32')
    train_size = int(len(X) * 0.50)
    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()
        yhat = model_fit.forecast()[0]
        predictions.append(yhat)
        history.append(test[t])
        
    # calculate out of sample error
    rmse = np.sqrt(mean_squared_error(test, predictions))
    return rmse
 
# 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:
                    rmse = evaluate_arima_model(dataset, order)
                    if rmse < best_score:
                        best_score, best_cfg = rmse, order
                    print('ARIMA%s RMSE=%.3f' % (order,rmse))
                except:
                    continue
    print('Best ARIMA%s RMSE=%.3f' % (best_cfg, best_score))
 

# evaluate parameters
p_values = range(0,13)
d_values = range(0, 4)
q_values = range(0, 13)
warnings.filterwarnings("ignore")
evaluate_models(df.values, p_values, d_values, q_values)

【问题讨论】:

    标签: python arima grid-search hyperparameters


    【解决方案1】:

    高阶 ARIMA 模型将永远进行计算并且有过度拟合的趋势。它们的总和不应超过 10 (p + d + q auto_arima() fom pmdarima之类的函数:

    https://alkaline-ml.com/pmdarima/modules/generated/pmdarima.arima.auto_arima.html https://towardsdatascience.com/time-series-forecasting-using-auto-arima-in-python-bb83e49210cd

    如果您想使用 ACF/PACF 估算订单,可以在此处进行操作: https://people.duke.edu/~rnau/411arim3.htm

    如果 ACF 正在下降并且 PACF 在滞后后急剧下降,则将此滞后用作 AR 分量 (p)。如果 PACF 正在下降并且 ACF 在滞后后急剧下降,则将此滞后用作 MA 分量 (q)。差分组件 (d) 取决于您的数据是否静止,您可以使用 ADF 测试进行检查: https://www.statsmodels.org/stable/generated/statsmodels.tsa.stattools.adfuller.html https://machinelearningmastery.com/time-series-data-stationary-python/

    在您的情况下,您可能需要ARIMA(3, d, 3) 之类的内容,但最好使用auto_arima() 进行检查。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-12-03
      • 2020-05-13
      • 2019-05-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-01
      相关资源
      最近更新 更多