I am trying to learn Holt-Winters exponential smoothing. In the algorithm there are three indices involved (level, trend, seasonality) while forecasting.

My questions:

  1. What is the interpretation of these 3 indices?
  2. How do I differentiate between different values of these indices? For example, what is the difference between level 100 and level 200 or what is the difference between trend 2 and trend 5?
  3. How do we initiate these values?

1 Answer 1

  1. As you know, you will first initialize all three indices, then update them over the historical period, then extrapolate them out into the future to derive the forecast from their extrapolated values.

    At any given time, the level index gives an estimate of the local mean, or "level" of the data-generating process (DGP), at this time. The trend index gives an estimate of the trend at this time, i.e., the change between successive time points. Finally, the seasonality index estimates the deviation from the local mean due to seasonality.

    Accordingly, in forecasting, the level will be extrapolated "as-is", since we expect future changes in the time series to be driven only by the other two indices. The trend value will also be extrapolated "as-is", or it will slowly be reduced if you use a dampened trend, which will result in a forecasted time series whose growth (or decay) asymptotically becomes flat. Trend dampening often improves accuracy over the long range. Finally, the seasonality is extrapolated by looking back exactly one cycle - for next March, you would use the seasonality index of last March, for next April, the one from last April, and so forth.

  2. If, at a particular point in time, the local trend is 100, this means that the model estimates that the local mean of the DGP is half as high as if it were 200. If the trend at this time is 2, this means that the estimated growth between two time points is 2 (and a trend index of 5 indicates an estimated growth of 5).

  3. There are various ways of initializing these values. You can initialize the mean by the overall average, or by the average of the first few observations, or simply by the very first observation. You can initialize the trend by the difference between the last and the first observation, divided by $n-1$ if you have $n$ observations (because $n$ observations give you $n-1$ increments), or by a regression trend line. You can initialize the seasonality by the deviations between your first year's observations and the level+trend fit, or take averages of these deviations over all years in your history.

    If you use a state space approach, you can initialize all these through maximum likelihood. However, this is often computationally very burdensome (monthly data require 12 seasonal indices - with level and trend, you'd have to estimate 14 parameters), for little gain in forecast accuracy, so your software will often use a heuristic as in the previous paragraph.

It may be most informative to plot the development of your indices over time. Here is an example, using forecast::ets in R, which implements a state space approach, and which we force to use a model with additive trend, seasonality and error, so this is essentially Holt-Winters:

> library(Mcomp)
> library(forecast)
> model <- ets(M3[[1998]]$x,model="AAA")
> model

 ets(y = M3[[1998]]$x, model = "AAA") 

  Smoothing parameters:
    alpha = 0.9947 
    beta  = 4e-04 
    gamma = 1e-04 

  Initial states:
    l = 3552.7263 
    b = 7.9458 
    s=154.906 -7.4477 98.1232 -14.7209 -79.7366 -117.3236
           -154.2015 -9.4785 181.9343 216.3269 -152.2493 -116.1322

  sigma:  139.8064

     AIC     AICc      BIC 
1886.317 1891.308 1931.697 
> plot(model)

Holt-Winters decomposition

Finally, I very much recommend this free online forecasting textbook, especially of course the chapter on Exponential Smoothing. One of the authors is the author and maintainer of the forecast package for R I used above.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.