Part 6

Update a small state whenever new data arrives.

Exponential smoothing represents the series through evolving level, trend and seasonal states. Each new forecast error updates those states; older observations receive geometrically declining influence.

Signal question

Demand was 100, 104, 98, 103, 97, 105, and 101. Is the underlying level moving dramatically, or are the observations fluctuating around a quieter signal?

What does smoothing do?

A time series mixes useful structure with short-term randomness, measurement error, and unusual events. Smoothing reduces the influence of those temporary movements so that the current level, trend, and seasonal pattern become easier to estimate.

Smoothing is controlled memory: when a new observation arrives, the model decides how much to revise its previous belief. It should react to genuine change without chasing every noisy point.

Too reactive

Using only the newest observation treats every spike as a new normal.

Too resistant

Using the entire historical average may ignore a genuine recent shift in demand.

Begin with a moving average

A three-period moving average gives equal weight to the latest three observations:

\[M_t=\frac{Y_t+Y_{t-1}+Y_{t-2}}{3}\]

If the observations are 100, 110, and 105, then \(M_t=105\). This reduces noise, but an observation has full weight inside the window and suddenly receives zero weight after leaving it.

Exponential smoothing replaces that hard cutoff with gradually declining weights. Every past observation can contribute, but recent evidence matters more.

Memory question

Should a sudden jump redefine the current level immediately, or should previous observations resist it?

Simple exponential smoothing

\[\ell_t=\alpha y_t+(1-\alpha)\ell_{t-1},\qquad 0\leq\alpha\leq1\]
\[\widehat y_{t+h\mid t}=\ell_t\qquad(h\geq1)\]

Think of \(\ell_{t-1}\) as yesterday's best belief about the current level and \(y_t\) as fresh evidence. The update takes a weighted average: the first term accepts a fraction \(\alpha\) of the new evidence, while the second retains a fraction \(1-\alpha\) of the old belief.

\[\ell_t=\ell_{t-1}+\alpha\underbrace{(y_t-\ell_{t-1})}_{\text{latest forecast error}}\]

Walk toward the observation: start at the old level, measure how wrong it was, and move \(\alpha\) of that distance. With \(\alpha=0\), ignore the new point. With \(\alpha=1\), jump fully to it. Intermediate values trade stability for responsiveness.

Repeated substitution reveals why the method is called exponential smoothing:

\[\ell_t=\alpha y_t+\alpha(1-\alpha)y_{t-1}+\alpha(1-\alpha)^2y_{t-2}+\cdots\]
Observed demandEstimated level

The simulated demand level shifts upward midway through the series. The violet line is the estimated level \(\ell_t\), not a trend forecast. Raise \(\alpha\) to react faster and smooth less.

Small \(\alpha\)

Long memory, stable level, slower reaction to genuine change.

Large \(\alpha\)

Short memory, rapid reaction, greater sensitivity to noise and outliers.

Why every observation still matters: an observation \(j\) steps old receives weight \(\alpha(1-\alpha)^j\). The weights shrink geometrically rather than suddenly becoming zero at a fixed window boundary.

Calculate the update

The previous level is 100, the new observation is 120 and \(\alpha=0.3\). What is the updated level and next forecast?

A two-step SES example

\[\ell_1=0.3(120)+0.7(100)=106\]

Every future forecast from this origin is 106 because SES has only a level state:

\[\widehat y_{2\mid1}=\widehat y_{3\mid1}=\cdots=106\]

If the next observation is \(y_2=90\), the forecast error is \(e_2=90-106=-16\), and the new level becomes:

\[\ell_2=0.3(90)+0.7(106)=101.2\]

Error-correction view: the same update can be written \(\ell_t=\ell_{t-1}+\alpha(y_t-\ell_{t-1})\). Move the old level by a fraction \(\alpha\) of its latest error.

Capability question

Why will SES produce a flat future path even when the historical series rises?

Add a trend with Holt's method

\[\begin{aligned}\ell_t&=\alpha y_t+(1-\alpha)(\ell_{t-1}+b_{t-1})\\b_t&=\beta(\ell_t-\ell_{t-1})+(1-\beta)b_{t-1}\\\widehat y_{t+h\mid t}&=\ell_t+h b_t\end{aligned}\]

The level update compares the observation with the previously projected level. The trend update blends the newest estimated change with the previous trend. Parameter \(\beta\) controls how quickly the trend changes.

Worked Holt update

Suppose yesterday's level was \(\ell_{t-1}=100\), the estimated increase was \(b_{t-1}=5\), today's observation is \(y_t=112\), and \(\alpha=0.4,\ \beta=0.3\).

  1. Project the old state into today: \(100+5=105\).
  2. Blend the observation with that projection: \(\ell_t=0.4(112)+0.6(105)=107.8\).
  3. The newly observed level change is \(107.8-100=7.8\). Smooth it with the old trend: \(b_t=0.3(7.8)+0.7(5)=5.84\).
  4. Forecast: \(\widehat y_{t+1\mid t}=107.8+5.84=113.64\), while \(\widehat y_{t+2\mid t}=107.8+2(5.84)=119.48\).

What changed? SES would forecast the same level at every horizon. Holt carries the estimated slope forward, so the path rises by \(5.84\) per step.

Damped trend: long straight-line extrapolation can become implausible. A damping parameter \(\phi\), usually between 0 and 1, gradually reduces the trend contribution at longer horizons.

Seasonal-state question

What additional memory does a weekly bike-demand model need beyond level and trend?

Additive Holt-Winters

\[\begin{aligned}\ell_t&=\alpha(y_t-s_{t-m})+(1-\alpha)(\ell_{t-1}+b_{t-1})\\b_t&=\beta(\ell_t-\ell_{t-1})+(1-\beta)b_{t-1}\\s_t&=\gamma(y_t-\ell_{t-1}-b_{t-1})+(1-\gamma)s_{t-m}\end{aligned}\]
\[\widehat y_{t+h\mid t}=\ell_t+h b_t+s_{t+h-m(k+1)},\qquad k=\left\lfloor\frac{h-1}{m}\right\rfloor\]

For daily data with weekly seasonality, \(m=7\). The final term retrieves the latest estimated seasonal effect for the forecasted weekday. Parameter \(\gamma\) determines how quickly that seasonal pattern changes.

Worked additive Holt-Winters update

Assume weekly seasonality with \(m=7\). Before observing today, \(\ell_{t-1}=100\), \(b_{t-1}=2\), and today's weekday usually contributes \(s_{t-7}=15\) rentals. We observe \(y_t=120\), with \(\alpha=0.4,\ \beta=0.2,\ \gamma=0.3\).

  1. Remove the old seasonal effect: \(y_t-s_{t-7}=120-15=105\).
  2. Update the nonseasonal level: \(\ell_t=0.4(105)+0.6(100+2)=103.2\).
  3. Update trend: \(b_t=0.2(103.2-100)+0.8(2)=2.24\).
  4. Today's new seasonal evidence is \(120-100-2=18\). Blend it with the old weekday effect: \(s_t=0.3(18)+0.7(15)=15.9\).
  5. For the same weekday one week ahead, \(\widehat y_{t+7\mid t}=103.2+7(2.24)+15.9=134.78\).

Three memories cooperate: level says where the series is, trend says how fast it is moving, and the seasonal state says how this weekday normally differs from the underlying level.

MethodState representedForecast shape
SESLevelFlat beyond the origin
HoltLevel + trendTrending path
Holt-WintersLevel + trend + seasonalityTrending repeating path

Fitting: software estimates smoothing parameters and initial states by minimizing in-sample forecast errors. Model choice still belongs to rolling-origin validation; the smallest training SSE is not enough.

Forecast-shape question

Without looking at the labels, which forecast below has only a level, which carries a slope, and which remembers a repeating calendar pattern?

One family, three forecast shapes

Forecast shapes from SES, Holt, and Holt-Winters Three aligned panels show a flat level forecast, a trending forecast, and a trending seasonal forecast after a common forecast origin. SESLevel onlyHoltLevel + trendHolt-WintersLevel + trend + season HistoryForecastOrigin

The forecast shape follows directly from the states the model stores. A model cannot extrapolate a component it does not represent.

Seasonal-scale question

If Saturday consistently adds 50 rentals, should we model the season additively? What if Saturday is consistently 30% above the current level?

Additive or multiplicative seasonality?

Additive

\[Y_t\approx \ell_t+b_t+s_t\]

Seasonal effects stay roughly constant in target units. Saturday might add about 50 rentals whether the underlying level is 200 or 500.

\[\widehat Y_{t+h\mid t}=\ell_t+hb_t+s_{\text{matching season}}\]

Multiplicative

\[Y_t\approx(\ell_t+b_t)s_t\]

Seasonality scales with the series. A Saturday factor of 1.30 means approximately 30% above the underlying level.

\[\widehat Y_{t+h\mid t}=(\ell_t+hb_t)s_{\text{matching season}}\]

Practical distinction: use additive seasonality when seasonal amplitude is stable in units; consider multiplicative seasonality when the swings grow with the level. Multiplicative models require positive values. A log transformation can often turn multiplicative structure into additive structure.

Model-selection question

Should we choose \(\alpha\), \(\beta\), and \(\gamma\) because the fitted line looks smooth, or because the resulting forecasts perform well at historical forecast origins?

How smoothing models are fitted and chosen

  1. Select the state structure. Level only, level plus trend, or level plus trend and seasonality.
  2. Choose the seasonal period. Daily data may use \(m=7\); hourly demand may need \(m=24\) or \(m=168\).
  3. Initialize the states. Estimate the starting level, trend, and one seasonal effect for each position in a cycle.
  4. Estimate smoothing parameters. Software usually selects \(\alpha\), \(\beta\), \(\gamma\), and possibly damping \(\phi\) by minimizing a likelihood or one-step training errors.
  5. Validate the whole model. Compare SES, Holt, damped Holt, and Holt-Winters on identical rolling forecast origins and horizons.
  6. Inspect residuals. Remaining trend, seasonality, or autocorrelation means the state structure has not captured all predictable information.
Observed series behaviorFirst model to try
Changing local level, no persistent trend or seasonalitySimple exponential smoothing
Level plus persistent growth or declineHolt or damped Holt
Level, trend, and fixed seasonal swingsAdditive Holt-Winters
Seasonal swings proportional to levelMultiplicative Holt-Winters or a log-scale additive model

Final intuition: exponential smoothing is a small adaptive memory. Each observation asks whether the level moved, whether the slope changed, and whether this seasonal position behaved differently from usual.

Previous: StationarityNext: ARIMA Pre