6

Używam statsmodels.tsa.SARIMAX() do szkolenia modelu ze zmiennymi egzogenicznymi. Czy istnieje odpowiednik get_prediction(), gdy model jest trenowany ze zmiennymi egzogennymi, tak że zwracany obiekt zawiera przewidywany średni i przedział ufności, a nie tylko tablicę przewidywanych średnich wyników? Metody przewidywania() i prognozy() pobierają zmienne egzogeniczne, ale zwracają jedynie przewidywaną wartość średnią.Python Statsmodels: Używanie SARIMAX z egzogennymi regresorami do uzyskania przewidywanych przedziałów średnich i przedziałów ufności

SARIMA_model = sm.tsa.SARIMAX(endog=y_train.astype('float64'), 
          exog=ExogenousFeature_train.values.astype('float64'), 
          order=(1,0,0), 
          seasonal_order=(2,1,0,7), 
          simple_differencing=False) 

model_results = SARIMA_model.fit() 

pred = model_results.predict(start=train_end_date, 
           end=test_end_date, 
           exog=ExogenousFeature_test.values.astype('float64').reshape(343,1), 
           dynamic=False) 

pred tutaj jest tablicą wartości przewidywanych aniżeli obiekt zawierający przewidywane wartości średnie i przedziały ufności, które można uzyskać, jeśli prowadził get_predict(). Uwaga: get_predict() nie przyjmuje zmiennych egzogenicznych.

Moja wersja statsmodels wynosi 0,8

Odpowiedz

3

Odnotowano pewne problemy związane wstecznej kompatybilności, dzięki którym pełne wyniki (z pred interwały itp) nie są narażone.

Aby dostać to, co chcesz teraz Use get_prediction i funkcje get_forecast parametry opisane poniżej

pred_res = sarimax_model.get_prediction(exog=ExogenousFeature_train.values.astype('float64'), full_results=True,alpha=0.05) 
    pred_means = pred_res.predicted_mean 
    # Specify your prediction intervals by alpha parameter. alpha=0.05 implies 95% CI 
    pred_cis = pred_res.conf_int(alpha=0.05) 

    # You can then plot it (import matplotlib first) 
    fig = plt.figure(figsize=(12, 8)) 
    ax = fig.add_subplot(1,1,1) 
    #Actual data 
    ax.plot(y_train.astype('float64'), '--', color="blue", label='data') 
    # Means 
    ax.plot(pred_means, lw=1, color="black", alpha=0.5, label='SARIMAX') 
    ax.fill_between(pred_means.index, pred_cis.iloc[:, 0], pred_cis.iloc[:, 1], alpha=0.05) 
    ax.legend(loc='upper right') 
    plt.draw() 

Aby uzyskać więcej informacji, przejdź do:

Powiązane problemy