SARIMAX和Holt-Winters时间序列模型的滚动窗口评估:

时间:2018-09-12 19:42:29

标签: python pandas machine-learning data-science

我正在尝试在python中构建滚动窗口函数,以在更长的时间内测试我的 SARIMAX 和Holt-Winters时间序列模型。我正在按小时预测LMP的前一天。虽然,我可以手动运行一天的模型,但是当我尝试滚动式地测试它们在较长时间段内的鲁棒性时,出现以下错误:

冬至

def rolling_windows_evaluation(x):
    X_train, X_test = emild_ts[3816:4344], emild_ts[4344:4368]
    MAPE = []
    t  = 4368
    for t in range(4368,5088):
        # fit model
        model = HoltWinters(X_train, slen = 24, 
            alpha = alpha_final, 
            beta = beta_final, 
            gamma = gamma_final, 
            n_preds = 24, scaling_factor = 3)
        model.triple_exponential_smoothing()
        MAPE_score = mean_absolute_percentage_error(X_test.LMP,model.result[-24:])
        MAPE.append(MAPE_score)
        X_train = X_train.iloc[24:]
        X_train = X_train.append(X_test)
        X_test = X_test.append(emild_ts[t:t+24])
        X_test = X_test.iloc[24:]

    return(MAPE)
return(np.mean(np.array(MAPE)))

函数调用

emlid_ts_val = emild_ts[3816:5088]
mape, mape_avg = rolling_windows_evaluation(emlid_ts_val)

错误

  

+不支持的操作数类型:“ int”和“ str”

SARIMAX

def rolling_windows_evaluation(x):

X_train, X_test = emild_ts[3816:4344], emild_ts[4344:4368]
MAPE = []
t = 4368
for t in range(4368,5088):
# fit model
    model = sm.tsa.statespace.SARIMAX(X_train.LMP, order=(1,1,2), 
                                    seasonal_order=(1, 1, 1, 24)).fit(disp=-1)
    forecast_24 = model.predict(start = X_train.shape[0], end = X_train.shape[0]+24)
    MAPE_score = mean_absolute_percentage_error(X_test.LMP,forecast_24)
    MAPE.append(MAPE_score)
    X_train = X_train.iloc[24:]
    X_train = X_train.append(X_test)
    X_test = X_test.append(emild_ts[t:t+24])
    X_test = X_test.iloc[24:]

return(MAPE)
return(np.mean(np.array(MAPE)))

函数调用

emlid_ts_val = emild_ts[3816:5088]
mape, mape_avg = rolling_windows_evaluation(emlid_ts_val)

错误

  

*不支持的操作数类型:“ int”和“ NoneType”

这两个模型已经过训练和评估。我假设错误主要与索引有关。对于调试错误的任何帮助将不胜感激。

0 个答案:

没有答案