首页 > 解决方案 > 确定 ARIMA 中网格搜索的参数范围 (p,d,q)

问题描述

我正在尝试用 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)

1

标签: pythonarimagrid-searchhyperparameters

解决方案


高阶 ARIMA 模型将永远进行计算并且有过度拟合的趋势。它们的总和不应超过 10 (p + d + q <= 10)。我不建议使用 GridSearch,你最好使用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().


推荐阅读