Part 3

A model must beat a sensible guess.

A baseline is a complete forecasting method, not a decorative score. It encodes the simplest plausible story about persistence, repetition or growth and gives every complex model a fair opponent.

Tomorrow question

If today is Sunday, which is a better guess for Monday: Sunday's demand or last Monday's demand? What assumption does each choice make?

Five useful baselines

Mean

\[\widehat y_{t+h\mid t}=\bar y_{\text{train}}\]

Assumes no useful time structure beyond a stable level.

Naive

\[\widehat y_{t+h\mid t}=y_t\]

Assumes the most recently observed level persists.

Seasonal naive

\[\widehat y_{t+h\mid t}=y_{t+h-m(k+1)}\]

Repeats the matching position from the latest observed season, where \(k=\lfloor(h-1)/m\rfloor\).

Drift

\[\widehat y_{t+h\mid t}=y_t+h\frac{y_t-y_1}{t-1}\]

Extends the average change from the first to latest observation.

Recent-window mean

\[\widehat y_{t+1\mid t}=\frac1w\sum_{j=0}^{w-1}y_{t-j}\]

Uses the average of the latest \(w\) observations as the next level.

Terminology: this recent-window mean is often called a moving-average forecast. It is not the MA(\(q\)) error model inside ARIMA.

Calculate before revealing

Fourteen daily observations end on Sunday. Forecast the next Monday using naive, seasonal naive, drift and a three-day mean.

A worked baseline example

WeekMonTueWedThuFriSatSun
Week 1100110120125140170155
Week 2108116127132148180164

Naive

\[\widehat y_{15\mid14}=y_{14}=164\]

“Monday will look like yesterday.”

Seasonal naive

\[\widehat y_{15\mid14}=y_8=108\]

“Monday will look like last Monday.”

Drift

\[\widehat y_{15\mid14}=164+\frac{164-100}{13}=168.92\]

“The average upward change will continue.”

Three-day mean

\[\widehat y_{15\mid14}=\frac{148+180+164}{3}=164\]

“The recent local level will continue.”

Hold out the final two weeks

ActualNaiveSeasonal naiveForecast origin
—Naive MAE
—Seasonal-naive MAE
7 daysSeasonal period

The shaded region is unseen at the forecast origin. Both methods generate the full 14-day path using only the first 42 days; seasonal naive cycles through the final observed week rather than reading actual values from the holdout.

Interpretation: the last value ignores day-of-week structure. Seasonal naive follows the weekly shape and becomes the benchmark a more complex model must improve upon.

Fairness question

Can we select the best baseline after looking at the final test period and still call it an untouched test set?

Match the baseline to the structure

Observed behaviorFirst baselineReason
Stable level, little dependenceTraining meanTests whether temporal structure adds value.
Stable local levelNaiveThe newest observation is informative.
Strong daily cycle in hourly dataSeasonal naive with \(m=24\)Compare the same hour yesterday.
Strong weekly cycle in hourly dataSeasonal naive with \(m=168\)Compare the same hour and weekday last week.
Persistent trend, weak seasonalityDriftProjects average historical change.
Previous: PatternsNext: Lags and ACF