def test_set_params(): params = {"trend": "additive"} f = ExponentialSmoothing(**params) f.fit(y_train, fh=1) expected = f.predict() f = ExponentialSmoothing() f.set_params(**params) f.fit(y_train, fh=1) y_pred = f.predict() assert_array_equal(y_pred, expected)
def test_exponential_smoothing(): """Test bug in 1876. https://github.com/alan-turing-institute/sktime/issues/1876#issue-1103752402. """ y = load_airline() # Change index to 10 min interval freq = "10Min" time_range = pd.date_range( pd.to_datetime("2019-01-01 00:00"), pd.to_datetime("2019-01-01 23:55"), freq=freq, ) # Period Index does not work y.index = time_range.to_period() forecaster = ExponentialSmoothing(trend="add", seasonal="multiplicative", sp=12) forecaster.fit(y, fh=[1, 2, 3, 4, 5, 6]) y_pred = forecaster.predict() pd.testing.assert_index_equal( y_pred.index, pd.period_range("2019-01-02 00:00", periods=6, freq=freq))
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), '%')
y_train, y_test = temporal_train_test_split(y, test_size = 24) plot_series(y_train, y_test) fh = ForecastingHorizon(y_test.index, is_relative=False) fh ets_frcstr = ExponentialSmoothing(trend='additive', seasonal='additive', sp=12) ets_frcstr.fit(y_train) y_pred = ets_frcstr.predict(fh) plot_series(y_train, y_test, y_pred, labels=['Обучающая', 'т', 'п']) ets_frcstr.get_fitted_params() ets_frcstr.get_params() smape_loss(y_test, y_pred) auto_ets_frr = AutoETS() auto_ets_frr.fit(y_pred) auto_ets_frr.summary() arima_frr = AutoARIMA() arima_frr = ARIMA()