def forecasting_autoarima(y_train, y_test, s): fh = np.arange(len(y_test)) + 1 forecaster = AutoARIMA(sp=s) forecaster.fit(y_train) y_pred = forecaster.predict(fh) plot_ys(y_train, y_test, y_pred, labels=["y_train", "y_test", "y_pred"]) st.pyplot()
def train_model_autoarima(y, x, output: bool = True) -> AutoARIMA: if output: logger.info("Training AutoARIMA model...") timer = Timer() model = AutoARIMA(suppress_warnings=True, error_action='ignore') y = pd.Series(data=np.delete(y, 0)) x = pd.DataFrame(data=x[:-1]) model.fit(y, x) if output: model.summary() logger.info(f'Done in {timer}') return model
def test_auto_arima(): """Test bug in 805. https://github.com/alan-turing-institute/sktime/issues/805#issuecomment-891848228. """ time_index = pd.date_range("January 1, 2021", periods=8, freq="1D") X = pd.DataFrame( np.random.randint(0, 4, 24).reshape(8, 3), columns=["First", "Second", "Third"], index=time_index, ) y = pd.Series([1, 3, 2, 4, 5, 2, 3, 1], index=time_index) fh_ = ForecastingHorizon(X.index[5:], is_relative=False) a_clf = AutoARIMA(start_p=2, start_q=2, max_p=5, max_q=5) clf = a_clf.fit(X=X[:5], y=y[:5]) y_pred_sk = clf.predict(fh=fh_, X=X[5:]) pd.testing.assert_index_equal( y_pred_sk.index, pd.date_range("January 6, 2021", periods=3, freq="1D")) time_index = pd.date_range("January 1, 2021", periods=8, freq="2D") X = pd.DataFrame( np.random.randint(0, 4, 24).reshape(8, 3), columns=["First", "Second", "Third"], index=time_index, ) y = pd.Series([1, 3, 2, 4, 5, 2, 3, 1], index=time_index) fh = ForecastingHorizon(X.index[5:], is_relative=False) a_clf = AutoARIMA(start_p=2, start_q=2, max_p=5, max_q=5) clf = a_clf.fit(X=X[:5], y=y[:5]) y_pred_sk = clf.predict(fh=fh, X=X[5:]) pd.testing.assert_index_equal( y_pred_sk.index, pd.date_range("January 11, 2021", periods=3, freq="2D"))
def main(): df = datasets.load_airline( ) #Univariate, monthly records from 1949 to 60 (144 records) y_train, y_test = temporal_train_test_split( df, test_size=36) #36 months for testing forecaster = NaiveForecaster( strategy='seasonal_last', sp=12 ) #model strategy: last, mean, seasonal_last. sp=12months (yearly season) forecaster.fit(y_train) #fit fh = np.arange(1, len(y_test) + 1) #forecast horizon: array with the same lenght of y_test y_pred = forecaster.predict(fh) #pred forecaster2 = AutoARIMA(sp=12, suppress_warnings=True, trace=1) forecaster2.fit(y_train) y_pred2 = forecaster2.predict(fh) forecaster3 = ExponentialSmoothing(trend='add', damped='True', seasonal='multiplicative', sp=12) forecaster3.fit(y_train) y_pred3 = forecaster3.predict(fh) forecaster4 = ThetaForecaster(sp=12) forecaster4.fit(y_train) y_pred4 = forecaster4.predict(fh) forecaster5 = EnsembleForecaster([ ('NaiveForecaster', NaiveForecaster(strategy='seasonal_last', sp=12)), ('AutoARIMA', AutoARIMA(sp=12, suppress_warnings=True)), ('Exp Smoothing', ExponentialSmoothing(trend='add', damped='True', seasonal='multiplicative', sp=12)), ('Theta', ThetaForecaster(sp=12)) ]) forecaster5.fit(y_train) y_pred5 = forecaster5.predict(fh) plot_ys(y_train, y_test, y_pred, y_pred2, y_pred3, y_pred4, y_pred5, labels=[ 'Train', 'Test', 'Naive Forecaster', 'AutoARIMA', 'Exp Smoothing', 'Theta', 'Ensemble' ]) plt.xlabel('Months') plt.ylabel('Number of flights') plt.title( 'Time series of the number of international flights in function of time' ) plt.show() print('SMAPE Error for NaiveForecaster is:', 100 * round(smape_loss(y_test, y_pred), 3), '%') print('SMAPE Error for AutoARIMA is:', 100 * round(smape_loss(y_test, y_pred2), 3), '%') print('SMAPE Error for Exp Smoothing is:', 100 * round(smape_loss(y_test, y_pred3), 3), '%') print('SMAPE Error for Theta is:', 100 * round(smape_loss(y_test, y_pred4), 3), '%') print('SMAPE Error for Ensemble is:', 100 * round(smape_loss(y_test, y_pred5), 3), '%')