## 7.8 Forecasting with decomposition

While decomposition is primarily useful for studying time series data, and exploring historical changes over time, it can also be used in forecasting.

Assuming an additive decomposition, the decomposed time series can be written as $y_t = \hat{S}_t + \hat{A}_t,$ where $$\hat{A}_t = \hat{T}_t+\hat{R}_{t}$$ is the seasonally adjusted component. Or, if a multiplicative decomposition has been used, we can write $y_t = \hat{S}_t\hat{A}_t,$ where $$\hat{A}_t = \hat{T}_t\hat{R}_{t}$$.

To forecast a decomposed time series, we forecast the seasonal component, $$\hat{S}_t$$, and the seasonally adjusted component $$\hat{A}_t$$, separately. It is usually assumed that the seasonal component is unchanging, or changing extremely slowly, so it is forecast by simply taking the last year of the estimated component. In other words, a seasonal naïve method is used for the seasonal component.

To forecast the seasonally adjusted component, any non-seasonal forecasting method may be used. For example, a random walk with drift model, or Holt’s method (discussed in the next chapter), or a non-seasonal ARIMA model (discussed in Chapter 9), may be used.

### Example: Employment in the US retail sector

dcmp <- us_retail_employment %>%
STL(Employed ~ trend(window = 7), robust=TRUE)
dcmp %>%
forecast() %>%
autoplot(dcmp) + ylab("New orders index") +
ggtitle("Naive forecasts of seasonally adjusted data") Figure 7.11: Naïve forecasts of the seasonally adjusted data obtained from an STL decomposition of the total US retail employment.

Figure 7.11 shows naïve forecasts of the seasonally adjusted electrical equipment orders data. These are then “reseasonalised” by adding in the seasonal naïve forecasts of the seasonal component.

This is made easy with the decomposition_model() model function, which allows you to compute forecasts via any additive decomposition, using other model functions to forecast each of the decomposition’s components. Seasonal components of the model will be forecasted automatically using SNAIVE() if a different model isn’t specified. The function will also do the reseasonalising for you, ensuring that the resulting forecasts of the original data are shown in Figure 7.12.

us_retail_employment %>%
model(
stlf = decomposition_model(STL,
Employed ~ trend(window = 7),
autoplot(us_retail_employment) 