Skip to content
ML Academy

Core day 27 of 60 · Week 6 · Part I · orientation depth

Modern Forecasting

A vendor deck says a pretrained forecasting model "ranks first on a public benchmark" and proposes replacing your route-level ETS forecasts with it. Before any pilot: what would have to be true for that family to deserve a test, and what is the cheapest test that would tell you?

By the end: For a forecasting problem described by number of series, history, horizon, covariates and budget, you decide whether a deep or foundation family warrants a test, name the baseline and linear check it must beat on your own rolling-origin backtest, and list what you must verify before quoting a benchmark result.

At a glance

A modern forecasting family earns a test only by beating the baseline and a linear check on your own rolling origins, at a cost and licence you can carry.

  • Global models

    One shared map fitted on many scaled series (SKUs, meters, towers); foundation models share it from a corpus.

  • Fix the bar first

    Seasonal naive and ETS on your origins, horizon and metric.

  • Headroom

    The gap above the linear check caps what any heavier family can win.

  • Claims are dated

    Ranks need datasets, metric, horizon, date and a leakage flag; licences change.

  • Price it

    Training, serving, monitoring, licence and data-governance limits count.

Recall · 5 min

From Day 25: name the three things a valid rolling-origin comparison holds fixed across candidates. From Day 24: what makes a model "global", and what does it need that a per-series ETS does not? Then clear your due review cards.

Open due reviews

Sign in to record this block.

Concept · 10 min

Classical models fit one small model per series; Day 24's boosting fits one model across series from features you design. Modern families change how the model reads history (learned, not specified) and how many series it learns from, up to a pretrained corpus. Each is a hypothesis with a price: test it against the cheap models on your own backtest.

Series count, history, covariates and budget decide whether a modern family is worth a test

Predict first

Which single piece of evidence would move a foundation model from "interesting" to "worth a pilot" for your routes?

Text description of the figure

A set of problem characteristics (number of series, history length, horizon, covariate availability, compute and licence constraints). Each setting highlights the families whose needs are met and shows what the recommended next test is.

From one model per series to one model for all series Overview
  • Classical

    ETS, ARIMA: one small model per series (Day 23).

  • Global ML

    Boosting across series on features you design (Day 24).

  • Deep global

    N-BEATS, N-HiTS, DeepAR, TFT, PatchTST: history read by a network you train.

  • Linear check

    A one-layer linear map shared by all series: the cheap bar for deep models.

  • Foundation

    Chronos, TimesFM, Moirai, TimeGPT: pretrained once, used zero-shot.

Local or global: who owns the parameters, and where they were fitted Hierarchy
own thetashared thetayour seriesa corpusA forecasting modela map from recent historyto the futureLocalETS, ARIMA: fitted seriesby seriesGlobalwindows from every series,scaledFitted on your databoosting, deep global,linear checkFoundation modelfitted elsewhere; yourseries = context
  • A forecasting modela map from recent history to the future
    • own thetaLocalETS, ARIMA: fitted series by series
    • shared thetaGlobalwindows from every series, scaled
      • your seriesFitted on your databoosting, deep global, linear check
      • a corpusFoundation modelfitted elsewhere; your series = context

A foundation model is a global model whose "all series" is a pretraining corpus. Zero-shot quality therefore depends on what your context window contains and how close your series are to that corpus.

What each modern group needs from you Comparison
CriterionDeep global (train it)Linear checkFoundation (zero-shot)
Learns fromYour seriesYour seriesA large external corpus
Data you needMany related series and long historyA few seasons of historyA history window per series
CovariatesTFT takes static, known-future and observed inputsAdd known-future columns yourselfNative in Chronos-2 and TimesFM 3.0 (documented)
Running costTraining, retraining, serving pipelineSeconds on a CPUInference on large models; often a GPU
AccessOpen papers and librariesAny linear algebra libraryCheck weight licence or API terms (dated)

Covariates help only if they are known at the cutoff (Day 24).

Is a modern family worth a test? Four steps Sequence
  1. Fix the bar

    Seasonal naive and ETS (or your tuned GBM) on your rolling origins and horizon, one metric such as MASE.

  2. Match needs to what you have

    Series count, history, covariates known at the cutoff, compute, licence, data that may leave.

  3. Read benchmark claims as claims

    Datasets, metric, horizon, date, leakage flag; vendor reports are self-reported.

  4. Test cheaply and in order

    Baseline, linear check, then one candidate on identical origins; decide on paired differences and cost.

The linear check, computed Illustration
What the linear check learned28 days agoyesterday114input day → (rows: days ahead)

Each row is one day ahead (1-14), each column one input day (oldest left). Nobody told the model about weekdays: its largest weights sit 7, 14, 21 and 28 days before each target, which is a learned weekday average.

Same origins, same scaleSeasonal naive1.0324-week weekday mean0.8358-week weekday mean0.867Linear check0.812Oracle (true mean)0.728headroom10.4%

MASE over 26 rolling origins, 14 days ahead. The cheap linear map beats the strong baseline by 2.8%; the oracle caps the prize: only 10.4% headroom is left for any heavier family.

-0.1000.10Paired differences by origin← betterworse →Linear checkmean ± 2 SE8-week weekday meanMASE minus the 4-week mean

Per-origin MASE minus the 4-week mean (below zero = better). The linear check wins 20 of 26 origins and its mean ± 2 SE stays below zero; the 8-week mean loses on most origins. Decide on this, not on one average.

Synthetic: 8 daily route series with weekday and annual cycles and multiplicative noise (seed 27); two years train, rolling origins every 14 days in year three. Ridge on windows scaled by their own mean. A smaller cousin of the application harness, so its numbers differ.

A ridge map shared by all routes learns a weekday average by itself; the oracle shows how much is left to win.

The harness: MASE over 26 rolling origins, 14 days ahead (today's run) Chart
  • Seasonal naive1.002
  • 4-week weekday meanthe strong baseline (stands in for ETS)0.824
  • Linear check (ridge)4.0% better, at 26 of 26 origins0.791
  • Oracle (true mean)the noise floor: unknown on real data0.702

24 synthetic route series with weekly and annual cycles. Lower is better.

How much is left for a heavier family? Formula
headroom=MASElinear−MASEoracleMASElinear=0.791−0.7020.791≈11.2%\begin{aligned} \text{headroom} &= \frac{\text{MASE}_{\text{linear}} - \text{MASE}_{\text{oracle}}}{\text{MASE}_{\text{linear}}} \\ &= \frac{0.791 - 0.702}{0.791} \approx 11.2\% \end{aligned}
MASElinear\text{MASE}_{\text{linear}}
the cheap linear check on your origins
MASEoracle\text{MASE}_{\text{oracle}}
the noise floor; on real data only bounded, never observed

Any candidate competes for part of this gap, and that part must pay for training, serving, monitoring and licences.

  • Deep global models you train: N-BEATS, N-HiTS, DeepAR, TFT, PatchTST.
  • A linear check: one-layer linear models beat several Transformer forecasters on nine long-horizon datasets (Zeng et al., 2023).
  • Pretrained foundation models: Chronos, TimesFM, Moirai, TimeGPT. Zero-shot means no fitting on your series, not no evaluation.
  • Four steps: fix the bar, match needs, read claims as claims, test cheaply in order. Licence and data-access terms are dated facts; check them again before production.

Assumptions

  • Your series resemble the data a family was designed or pretrained for; transfer is an empirical question, not a property of the model.

  • The backtest uses the same origins, horizon and metric for every candidate, including the baseline, and the candidate cannot have seen the test period in pretraining.

  • Cost counts: training, serving, monitoring, licence terms and data-governance limits (sending data to an API).

Sign in to record this block.

Application and workplace decision · 10 min

Run the harness. Before running, estimate how much the linear check gains and how much headroom would remain for a heavier family.

  • 24 synthetic daily route series with weekly and annual cycles; the true mean is known, which real data never provide.
  • Four forecasts for a 14-day horizon over 26 rolling origins in the last year: seasonal naive, a 4-week same-weekday mean (standing in for ETS), a global ridge "linear check" in the spirit of DLinear, and the oracle.
  • Scores are MASE against the in-sample seasonal-naive error.

Python

import numpy as np

rng = np.random.default_rng(27)
S, T, H, L, split = 24, 3 * 364, 14, 28, 2 * 364      # routes, days, horizon, look-back, end of training
t = np.arange(T)
wk = rng.normal(0, 0.08, (S, 7)) + np.array([0.06, 0, 0, 0.04, 0.07, -0.13, -0.05])   # weekday shapes
phase = rng.integers(0, 364, (S, 1))
mean = rng.uniform(80, 200, (S, 1)) * (1 + wk[:, t % 7] + 0.2 * np.sin(2 * np.pi * (t - phase) / 364))
y = rng.gamma(40, mean / 40)                          # noisy demand, synthetic; the true mean is known

def windows(lo, hi, step=1):                          # inputs (S, n, L), targets (S, n, H), origins
    o = np.arange(lo, hi, step)
    return np.stack([y[:, i - L:i] for i in o], 1), np.stack([y[:, i:i + H] for i in o], 1), o

Xtr, Ytr, _ = windows(L, split - H)                   # training windows end before the first test origin
sc = Xtr.mean(2, keepdims=True)                       # scale each window by its own mean
A, B = (Xtr / sc).reshape(-1, L), (Ytr / sc).reshape(-1, H)
W = np.linalg.solve(A.T @ A + np.eye(L), A.T @ B)     # linear check: one ridge map shared by all routes

X, Y, o = windows(split, T - H + 1, H)                # rolling origins every 14 days in year 3
sc = X.mean(2, keepdims=True)
same_day = np.arange(H) % 7
fc = {"seasonal naive": X[:, :, -7:][:, :, same_day],
      "4-week weekday mean": X.reshape(S, -1, 4, 7).mean(2)[:, :, same_day],
      "linear check (ridge)": (X / sc) @ W * sc,
      "oracle (true mean)": np.stack([mean[:, i:i + H] for i in o], 1)}
scale = np.abs(y[:, 7:split] - y[:, :split - 7]).mean(1)[:, None, None]   # in-sample seasonal-naive MAE
mase = {k: (np.abs(Y - f) / scale).mean(axis=(0, 2)) for k, f in fc.items()}  # per origin
base, lin, floor = (mase[k].mean() for k in ["4-week weekday mean", "linear check (ridge)", "oracle (true mean)"])
for k, v in mase.items():
    print(f"{k:22s} MASE {v.mean():.3f}  beats the weekday mean at {(v < mase['4-week weekday mean']).sum():2d} of {len(v)} origins")
print(f"linear check gains {1 - lin / base:.1%} over the strong baseline; headroom left above it: {(lin - floor) / lin:.1%}")

This code is executed in the repository's checks (pnpm lesson:py / lesson:sql). It is not run on this site; copy it into your notebook.

Sign in to record this block.

Mini-assessment · 8 min

Your first answer is your evidence. You can re-answer later in practice mode; that is labelled practice.

Question 1 · easy

A vendor says its forecasting model works "zero-shot" on your route series. What does that mean?
Options

How confident are you? (optional, used for calibration)

Question 2 · medium

A retailer has 40,000 related store-SKU daily series with four years of history, known-future promotion calendars and a 28-day horizon. A tuned LightGBM global model already beats seasonal naive by 12% MASE on rolling origins. Which next step is best justified?
Options

How confident are you? (optional, used for calibration)

Question 3 · hard

A vendor report states that its new model "ranks first among pretrained models" on a public leaderboard of many datasets. Your problem is daily passengers for 24 routes at horizons of 1 to 60 days. Which response best establishes whether to adopt it?
Options

How confident are you? (optional, used for calibration)

Question 4 · medium

(Illustrative numbers.) In the harness (MASE against the in-sample seasonal-naive error) the strong baseline scores 0.900, the linear check 0.860 and the oracle 0.760. The lesson defines headroom as (linear check - oracle) / linear check. How much headroom is left above the linear check, in percent (one decimal)?
percent

How confident are you? (optional, used for calibration)

Question 5 · hard

(Illustrative numbers.) A foundation model and a tuned ETS are scored on the same 26 rolling origins (MASE). Foundation: mean 0.80; ETS: mean 0.82. The per-origin paired difference has mean 0.02 and standard deviation 0.10, and the foundation model wins 14 of 26 origins. Serving it needs a vendor API with a monthly fee and sending route data outside the company. Which recommendation is best supported?
Options

How confident are you? (optional, used for calibration)

Sign in to complete lessons and keep your progress.

Technical depth · optional · 37 min in total

Open only what you need. Nothing here is required to complete the day; the assessment covers the core above.

What a global model shares, derived9 minLocal and global fits as two loss functions, the pooled estimate as a weighted average of local ones worked by hand on two SKUs, and when pooling fails.
Local versus global, as two loss functions Formula
θ^i=arg⁡min⁡θ∑tℓ(yi,t+h,fθ(xi,t))θ^=arg⁡min⁡θ∑i∑tℓ(yi,t+hsi,fθ(xi,tsi))\begin{aligned} \hat\theta_i &= \arg\min_\theta \sum_t \ell(y_{i,t+h}, f_{\theta}(x_{i,t})) \\ \hat\theta &= \arg\min_\theta \sum_i \sum_t \ell(\tfrac{y_{i,t+h}}{s_i}, f_{\theta}(\tfrac{x_{i,t}}{s_i})) \end{aligned}
i, t, hi,\ t,\ h
series (a SKU, a meter, a cell tower), time of the forecast origin, horizon
xi,tx_{i,t}
the input window: the last L values of series i, plus any covariates known at t
sis_i
a scale (here the window mean) that puts a 10-unit and a 200-unit series on one footing
θ\theta
top line (local): K separate parameter sets; bottom line (global): one set shared by all K series
ℓ\ell
the training loss, e.g. squared error or pinball
W=(A⊤A+I)−1A⊤BW = (A^{\top}A + I)^{-1}A^{\top}B
the application's linear check: the bottom line with squared loss and a ridge penalty, A and B every route's scaled windows

What a global model shares is theta: one map from scaled recent history to the scaled future. The application's ridge has L x H = 28 x 14 = 392 shared weights; 24 local copies would need 9,408.

The pooled slope is a weighted average of the local slopes Formula
w^global=∑i∑txit yit∑i∑txit2=∑iπi w^iπi=∑txit2∑j∑txjt2\begin{gathered} \hat w_{\text{global}} = \frac{\sum_i \sum_t x_{it}\,y_{it}}{\sum_i \sum_t x_{it}^2} = \sum_i \pi_i\,\hat w_i \\ \pi_i = \frac{\sum_t x_{it}^2}{\sum_j \sum_t x_{jt}^2} \end{gathered}
w^i\hat w_i
series i's own least-squares slope of next value on last value (one lag, no intercept)
πi\pi_i
series i's share of the total sum of squared inputs: its weight in the pooled fit

Derivation: write each local numerator as w_i times its denominator and divide. Pooling shrinks every series towards the others. Scaling is not cosmetic: pi_i grows with the squared size of a series' inputs, so unscaled, the biggest store, meter or tower decides the shared map.

Worked by hand: one shared slope for two online-shop SKUs (illustrative) Table
FitPairs (last value -> next)Sum xySum x^2Slope
SKU A alone (level 10/day)(1.0 -> 1.2), (1.2 -> 1.1) after scaling2.522.441.033
SKU B alone (level 200/day)(0.8 -> 0.9), (0.9 -> 1.0) after scaling1.621.451.117
Global, scaledall four pairs4.143.891.064 = 0.627 x 1.033 + 0.373 x 1.117
Global, unscaledraw units: (10 -> 12), (12 -> 11), (160 -> 180), (180 -> 200)65,05258,2441.117: SKU B has 99.6% of the weight

Next-day forecasts: SKU A 1.064 x 1.1 x 10 = 11.7 units (local 11.4), SKU B 1.064 x 1.0 x 200 = 212.9 (local 223.4). Each series borrows strength from the other. Recomputed in Python.

What pooling buys and what it costs Comparison
CriterionLocal (one model per series)Global (one shared map)
VarianceHigh on short series: few pairs per parameterLow: every series adds pairs to the same parameters
BiasLow: each series gets its own dynamicsHigh if series truly differ (a new store, a different machine type)
DiagnosticUnstable fits across adjacent originsBacktest residual bias by segment: a signed residual flags a series the map misfits
Fix when it failsPool, or shrink towards a group fitScale, add series features or IDs, or pool within segments
Fit and serveK separate fits; a failure stays in one seriesOne pass over K x T windows; one map's failure hits every series

Pooling is shrinkage. It wins when series are many, short and similar after scaling; it loses where one segment behaves unlike the rest.

When sharing parameters pays, by sector Overview
  • Retail

    40,000 store-SKU series with promotions: each is short and noisy, together they are rich.

  • Energy

    Smart-meter loads share daily and weekly shapes across households.

  • Telecom

    Thousands of cell towers with the same commuter rhythm; a fault on one is local.

  • Healthcare

    15 emergency departments: too few series to learn a deep shared map; start local.

  • Manufacturing

    Sensors on different machine types: pool within a type, not across types.

Practitioner heuristics, not sourced rules. The test is always the same harness on your own origins.

How foundation models read a series, workedadvanced8 minScaling and tokens pushed through by hand on four numbers, patching counted, and the one input every zero-shot model depends on: the context window.
How the pretrained families read a series (from the papers and repositories) Comparison
CriterionChronos / Bolt / 2TimesFMMoirai / Moirai 2DLinear / NLinear
Input representationScaled values quantized into tokens; Bolt and Chronos-2 use patchesPatches of the historyPatches at several sizes (Moirai); one size (Moirai 2)The raw window; DLinear splits trend and remainder
BackboneT5-style language models; Chronos-2 adds group attentionDecoder-only TransformerMasked encoder with any-variate attention; Moirai 2 is decoder-onlyOne linear layer per part
OutputSampled paths (Chronos) or direct multi-step quantiles (Bolt)Point forecasts; 2.5 adds an optional quantile headA distribution (Moirai); quantiles via quantile loss (Moirai 2)Point forecasts for the whole horizon

Mechanisms only; none of these rows says which family is more accurate on your series.

Worked by hand: a series becomes tokens, and tokens become a forecast (illustrative bins) Table
StepRuleFour hourly loads of a feeder (MW)
1 Scaledivide by the mean absolute value of the context40, 50, 60, 50 -> scale 50 -> 0.8, 1.0, 1.2, 1.0
2 Quantizetoken = bin index; illustrative bins of width 0.250.8 -> 3, 1.0 -> 4, 1.2 -> 4, 1.0 -> 4
3 Predicta language model outputs probabilities over the next tokensay P(3) = 0.1, P(4) = 0.6, P(5) = 0.3
4 Decodebin centre x scale; sample paths or read quantilestoken 4 -> 1.125 x 50 = 56.25 MW; mean 1.175 x 50 = 58.75 MW
5 Traincross-entropy on the next token, across a large corpusthe same loss as next-word prediction

Scaling, quantization into a fixed vocabulary and cross-entropy training are what the Chronos abstract describes; the bin width and probabilities here are illustrative. Step 2 shows the cost: 1.0 and 1.2 share a token, so resolution is lost inside a bin. Arithmetic checked in Python.

Patching, counted Formula
N=⌊L−PS⌋+2,attention pairs∝N2N = \Bigl\lfloor \frac{L - P}{S} \Bigr\rfloor + 2, \qquad \text{attention pairs} \propto N^2
L=512L = 512
look-back window in time steps
P=16, S=8P = 16,\ S = 8
patch length and stride (an example): 62 + 2 = 64 tokens; the +2 includes S copies of the last value padded at the end
N2N^2
512^2 = 262,144 pairs of time steps versus 64^2 = 4,096 pairs of patches: 64 times fewer

The formula and the padding are from the PatchTST paper (section 3.1), whose title calls a series "worth 64 words". TimesFM, Moirai and Chronos-Bolt also read patches; the same arithmetic applies, and one token now summarizes 16 steps. Counts checked in Python.

A zero-shot model sees only the window you pass Illustration
90110130150170-84-56-280+28Same method, two context lengthscontext endsactual420 days112 daysDays relative to the forecast originDaily demand
  • actuals (dashed: true mean)
  • 112-day context
  • 420-day context

One origin just before the seasonal rise. With 112 days of context the forecaster sees a weekly pattern and a level, so it predicts more of the same (MAE 18.2); with 420 days it also sees what happened after these dates last year (MAE 9.4).

Error by context length14.25614.011214.022414.133610.139210.142010.1560covers a year+ the horizoncontext length, days

Mean absolute error over 25 origins in year three, by context length. Nothing changes until the window reaches back a full year plus a month; then the annual pattern enters and the error drops.

Synthetic daily series with a weekday shape and an annual cycle (seed 2727). The forecaster is a deliberately simple context-only stand-in, not a foundation model: weekday profile times the last 28 days' level, times last year's change over the same dates when the window covers it.

The same context-only forecaster with a short and a long window; the annual pattern exists for it only once the window covers a year.

The linear check and paired decisions4 minWhat a one-layer linear map learns, how much headroom it leaves, and how to read a per-origin comparison.
The linear check, computed Illustration
What the linear check learned28 days agoyesterday114input day → (rows: days ahead)

Each row is one day ahead (1-14), each column one input day (oldest left). Nobody told the model about weekdays: its largest weights sit 7, 14, 21 and 28 days before each target, which is a learned weekday average.

Same origins, same scaleSeasonal naive1.0324-week weekday mean0.8358-week weekday mean0.867Linear check0.812Oracle (true mean)0.728headroom10.4%

MASE over 26 rolling origins, 14 days ahead. The cheap linear map beats the strong baseline by 2.8%; the oracle caps the prize: only 10.4% headroom is left for any heavier family.

-0.1000.10Paired differences by origin← betterworse →Linear checkmean ± 2 SE8-week weekday meanMASE minus the 4-week mean

Per-origin MASE minus the 4-week mean (below zero = better). The linear check wins 20 of 26 origins and its mean ± 2 SE stays below zero; the 8-week mean loses on most origins. Decide on this, not on one average.

Synthetic: 8 daily route series with weekday and annual cycles and multiplicative noise (seed 27); two years train, rolling origins every 14 days in year three. Ridge on windows scaled by their own mean. A smaller cousin of the application harness, so its numbers differ.

A ridge map shared by all routes learns a weekday average by itself; the oracle shows how much is left to win.

Deciding on paired differences Formula
dˉ=1K∑k=1K(ekcand−ekbase),SE(dˉ)=sdK\bar d = \frac{1}{K}\sum_{k=1}^{K} (e^{\text{cand}}_k - e^{\text{base}}_k), \qquad \mathrm{SE}(\bar d) = \frac{s_d}{\sqrt{K}}
eke_k
the error metric (for example MASE) at origin k, same series and horizon for both
KK
number of rolling origins
sds_d
standard deviation of the per-origin differences

Pairing removes the origin-to-origin swings both models share; a higher mean whose spread crosses zero is not a win. Origins next to each other are correlated, so treat the SE as optimistic and look at the sign count too.

The deep global families3 minCore idea, inputs and outputs of four families, from their papers.
Deep global models at a glance (from the original papers) Comparison
CriterionN-BEATS / N-HiTSDeepARTFTPatchTST
Core ideaStacked fully connected blocks with residual links; N-HiTS adds multi-rate samplingAutoregressive recurrent network trained across many seriesRecurrent layers, interpretable attention, variable selection and gatingTransformer over patches of the series
InputsUnivariate historyMany related seriesStatic, known-future and observed inputsEach channel on its own (channel independence)
OutputPoint forecasts; interpretable trend and season variantA probabilistic forecastQuantiles at several horizonsLong-horizon forecasts

Mechanisms (attention, patching, pretraining) return in Part II. The N-HiTS authors report roughly 50 times less computation than Transformer baselines; training is still heavier than ETS (judgement).

Reading a benchmark claim3 minSix things a rank needs before it says anything about your problem, and a computed example of ranks that do not transfer.
What a benchmark rank needs before you quote it Overview
  • Datasets

    Which series, which frequencies; do they resemble yours?

  • Metric and horizon

    MASE or CRPS, at which horizons?

  • Date

    Leaderboards move; a rank without a date is stale.

  • Leakage flag

    Could the model have seen the test data in pretraining? GIFT-Eval's leaderboard records a flag.

  • Zero-shot tag

    Was it fitted on the benchmark series or not?

  • Who reported it

    Vendor reports for new versions are self-reported.

A rank is a property of the data, not of the method Illustration
Same methods, four kinds of seriesStable seasonTrend + seasonLevel breakShort and noisyAverage rankHolt-Winters20.9210.2710.4931.051.8Linear AR32.1120.9361.3010.733.0Naive43.6330.9320.7651.143.5SES63.7450.9730.7821.044.0Seasonal naive10.8361.0871.9341.134.5Drift53.7040.9540.7971.195.0Holt (damped)74.5071.0950.8061.156.3

Synthetic monthly series from the Day 23-25 forecast playground (one seed per kind); rolling origins at the end of each series, 6 steps ahead; MASE with a 12-month seasonal scale. Seven classical methods, parameters picked on training data only.

Rank of each method (1 = lowest MASE) on four kinds of series, with MASE underneath. Seasonal naive ranks 1, 6, 7, 4 across the four; the leaderboard-style average rank on the right flattens that into one number.

Seven classical methods on four kinds of series; the same method moves from first to last, so an average rank over many datasets can be led by a method that is last on the kind of series you have.

Releases, licences and access3 minThe dated release history in the registry, what it records about weights, code and APIs, and what to re-check.
Foundation forecasting models in the source registry (checked 2026-10-11) Table
DateReleaseRecorded access, licence or note
2023-10-05TimeGPT-1 preprint (Nixtla)Commercial API via the Nixtla SDK; SDK repo licence NOASSERTION; weight terms: source not verified
2024-03-12Chronos paper (arXiv; TMLR, Nov 2024)Tokenized series, T5-style models; code Apache-2.0
2024-07-08TimesFM paper (ICML 2024)Patched decoder-only model for zero-shot point forecasts
2024Moirai paper (ICML 2024)Masked encoder, any-variate attention; uni2ts code Apache-2.0
2024-10-14GIFT-Eval benchmark (arXiv v1)Leaderboard added a leakage flag (2025-08-05) and a zero-shot tag (2025-08-25)
2024-11-26Chronos-Bolt (repo news)Patch-based, direct multi-step quantile decoder
2025-09-15TimesFM 2.5 (repo README)Weights up to 2.5 remain Apache-2.0
2025-10-17Chronos-2 report (release 2025-10-20)Multivariate and covariate-informed; vendor benchmarks self-reported
2025-11-12Moirai 2.0 preprint (uni2ts 2.0.0: 2025-11-04)Decoder-only successor; no peer-reviewed venue confirmed
2026-08-28TimesFM 3.0 release (blog 2026-08-31)Weights non-commercial; commercial use via Google Cloud services
2026-09-08chronos-forecasting v2.3.2 (registry)Latest release when checked
2026-09-21Nixtla SDK v0.9.0 (registry)Latest release when checked

Code and weights can carry different licences (TimesFM up to 2.5 Apache-2.0, 3.0 non-commercial). Versions, licences and ranks move; re-check on the day you decide, cite ranks with a date, and check which data may be sent to an external API.

Choosing and running the next test3 minA decision path from the baselines to one candidate family, and six checks for a fair zero-shot pilot.
Which candidate earns the next test? Diagram
Cheap modelsscored?naive, ETS, linearRun them firstsame origins, horizon,metricHeadroom paysits cost?Keep the cheap modeldocument the headroomMany relatedseries?Deep globalcandidateplus one zero-shot modelOne zero-shotcandidatelicence and data checkednoyesnoyesyesno
  1. Cheap models scored?naive, ETS, linear
    • no: to Run them first
  2. Headroom pays its cost?
    • no: to Keep the cheap model
  3. Many related series?
    • yes: to Deep global candidate
  4. One zero-shot candidatelicence and data checked
  5. Run them firstsame origins, horizon, metric
  6. Keep the cheap modeldocument the headroom
  7. Deep global candidateplus one zero-shot model

With few series or a short history, the zero-shot model is the one cheap extra candidate (judgement, not a sourced rule).

A fair zero-shot pilot, in six checks Sequence
  1. Same harness

    Identical origins, horizon, series and metric as the baseline and the linear check.

  2. Context you can serve

    The history length you can pass in production; longer windows cost memory and time on every run.

  3. Covariates known at the cutoff

    Only inputs available at forecast time, as for any model (Day 24).

  4. Leakage

    Public series may sit in the pretraining corpus; prefer private or post-release periods.

  5. Intervals checked

    Coverage and width on held-out origins (Day 26); separately where values leave the context's scale (spike, outage).

  6. Cost per run

    Hardware or API cost for every forecast run, for every series.

The full cost of a modern model2 minFive cost layers that a small accuracy gain has to pay for.
What a modern model costs beyond accuracy Stack
  1. TrainingGPUs, tuning runs, retraining schedule (none for zero-shot).
  2. ServingLatency and hardware for every forecast run, for every series.
  3. MonitoringCoverage, bias and drift checks, as for any model (Day 26).
  4. LicenceWeights and code may differ; non-commercial weights block production.
  5. Data governanceSending series to an external API may not be allowed.
What a staff-level answer addsadvanced2 minFive habits that separate a senior evaluation of a new family from a demo.
What a staff-level answer adds Overview
  • Bar before candidate

    Write the margin that justifies adoption before seeing results.

  • Headroom bounds the prize

    The gap above the linear check caps any gain; often most of it is noise.

  • Dated facts

    Versions, licences and ranks with the date read; re-check on the decision day.

  • Data leaving

    An API forecast is a data transfer; governance can end a project accuracy supports.

  • Ownership

    Who retrains, monitors coverage and rolls back; zero-shot does not remove those jobs.

Memory anchor

Novelty is not suitability: put the candidate in the same harness as the strong baseline and let your origins decide.

Useful for

  • Responding to a vendor or colleague proposal (a retail demand platform, an energy-load API) with a concrete, cheap test instead of an opinion.

  • Choosing which one or two families to evaluate when you have a fixed few days of experiment time, for example on telecom cell traffic or SaaS usage series.

  • Writing the "why no modern model" paragraph in a forecasting report when the evidence does not justify one.

Not suitable for

  • Learning how attention, patching or pretraining work - those mechanisms belong to Days 33-39.

  • Settling a choice without data: nothing in this lesson substitutes for your own rolling-origin comparison.

Traps

Comparing against the weak baseline

The candidate beats seasonal naive by 15% and is adopted, but the ETS or GBM already in production would have matched it on the same origins.

How to avoid it

Put the strongest model you already have in the same harness, and report the gain over that.

Treating a rank as a result

A leaderboard average over other datasets and horizons is quoted as proof for a retailer's store-SKU demand or a utility's feeder loads; later the benchmark adds a leakage flag and the order moves.

How to avoid it

Quote benchmark, metric, horizon, date and leakage status, and confirm on your data.

Senior reasoning

A senior is neither a fan nor a sceptic of new families. They price the test, order the candidates by cost, and insist on the same origins for every model. They separate what a paper or repository documents from what is judgement, they check licences and data flows early because those can end a project that the accuracy numbers support, and they write down the margin that would justify adoption before looking at results.

Interview question

"Foundation models will make classical forecasting obsolete. Agree or disagree?" How would you structure the answer?

Recall cards scheduled after completion

  • What four steps decide whether a modern forecasting family deserves a test?
  • What does "zero-shot" mean for a forecasting foundation model, and what does it not mean?

Reviewed on a 1 · 3 · 7 · 14 · 30-day schedule; a miss returns the card to 1 day.

References

Optional sections

Deep dive · 20 min

How to read this section. Each family below answers the same nine questions. Statements marked (J) are judgement, not sourced facts. Statements without a mark come from the abstract or official repository named in the references; abstracts name benchmarks but often not metrics or horizons, and those details are in the papers, which are not reproduced here. Where the registry holds nothing, the answer says so.

The nine questions: 1 problem solved; 2 better than classical; 3 worse; 4 data needs; 5 compute; 6 interpretability; 7 production complexity; 8 failure modes; 9 would I use it.

N-BEATS and N-HiTS (deep, trained on your data).

  1. Univariate forecasting with stacks of fully connected blocks and backward and forward residual links; N-HiTS adds multi-rate input sampling and hierarchical interpolation for long horizons.
  2. The N-BEATS authors report top results on M3, M4 and TOURISM for two configurations, about 11% over a statistical benchmark and about 3% over the previous M4 winner (the abstract does not name the metric or the benchmark). The N-HiTS abstract compares with Transformers, not with classical models.
  3. Not established in the registry; no head-to-head failure is documented here.
  4. Trained on a corpus of series; the papers' settings are competition and long-horizon datasets. (J) Short or few series leave little to learn from.
  5. The N-HiTS authors report roughly 50 times less computation than Transformer baselines. (J) Training is still heavier than ETS.
  6. N-BEATS offers an interpretable variant with trend and seasonality bases that loses little accuracy, per the authors.
  7. (J) You own training, retraining, versioning and intervals, since the papers describe point forecasts.
  8. Not documented in the registry. (J) Regime breaks and series unlike the training set.
  9. (J) Test only if you have many related series and the strong baselines have left headroom.

DeepAR.

  1. A global autoregressive recurrent network trained across many related series that outputs probabilistic forecasts.
  2. Not established in the registry; compare on your data.
  3. Not established in the registry.
  4. Many related series by design.
  5. (J) Neural training and sampling-based forecasting cost more than statistical methods.
  6. (J) A black box; intervals come from the output distribution.
  7. (J) Training and retraining pipeline required; distributional outputs need calibration checks (Day 26).
  8. Not documented in the registry. (J) An output distribution family that does not fit the demand.
  9. (J) Consider when probabilistic output over thousands of related series is needed and GBM quantiles fall short.

Temporal Fusion Transformer.

  1. Multi-horizon forecasting with static covariates, known-future inputs and observed-only series, using recurrent layers, interpretable self-attention, feature selection and gating, with quantile outputs.
  2. The authors report significant gains over existing benchmarks on real-world datasets; the abstract names neither the datasets nor the baselines.
  3. Not established in the registry.
  4. (J) Many series with rich covariates; little value if there are no covariates.
  5. (J) Heavy to train relative to GBM.
  6. The paper presents interpretable attention and variable-selection views; (J) treat them as model explanations, not causal effects (Day 17).
  7. (J) Needs known-future inputs at serving time with the same availability rules as training (Day 24).
  8. Not documented in the registry. (J) Leaky future covariates; unstable training on short series.
  9. (J) Test when promotions or calendars are known and a GBM leaves headroom.

PatchTST.

  1. Long-horizon forecasting with a Transformer over series patches, with channel independence (each variable treated as its own series with shared weights).
  2. The abstract claims a significant improvement over state-of-the-art Transformer models and strong results from self-supervised pretraining and transfer; it names no classical baseline.
  3. Not established in the registry; see DLinear below for a counter-result on similar benchmarks.
  4. Long histories at fine granularity, as in the long-horizon benchmarks.
  5. The authors state patching reduces attention compute and memory quadratically for a given look-back window.
  6. (J) Attention maps are not explanations (Day 39).
  7. (J) Training and serving stack for a Transformer.
  8. Not documented in the registry.
  9. (J) Only after a linear check on long-horizon data fails to close the gap.

DLinear and LTSF-Linear.

  1. A set of one-layer linear forecasters for long-horizon forecasting.
  2. On nine real-world datasets the linear models outperformed the compared Transformer-based models in all cases, often by a large margin (abstract; the paper's metrics and horizons are not reproduced here).
  3. The abstract limits itself to long-term forecasting and does not test other tasks.
  4. Modest; a global linear map over windows.
  5. Very low.
  6. High: coefficients are inspectable.
  7. Low (J): a matrix and a scaler.
  8. Not documented in the registry. (J) Non-linear interactions, covariates not in the window.
  9. (J) Always as the linear check.

Chronos, Chronos-Bolt and Chronos-2.

  1. Zero-shot probabilistic forecasting: values are scaled and quantized into tokens and language-model architectures (T5 family) are trained on them; Chronos-Bolt is a patch-based variant that outputs multi-step quantiles directly; Chronos-2 adds multivariate and covariate-informed forecasting through group attention.
  2. The Chronos authors report comparable and occasionally superior zero-shot performance against methods trained on each dataset, over 42 datasets (abstract). The Chronos-2 report claims state-of-the-art results on fev-bench, GIFT-Eval and Chronos Benchmark II among pretrained models; these are self-reported.
  3. The Chronos abstract gives "comparable and occasionally superior", not consistent superiority, and the strongest results are on datasets in the training corpus.
  4. History as context only; no training on your data. Training corpus is public datasets plus synthetic series.
  5. The README states Chronos-Bolt is up to 250 times faster and 20 times more memory-efficient than original Chronos models of the same size; the model table runs from 8M to 710M parameters (T5) and 120M for Chronos-2.
  6. (J) A black box; quantile outputs are interpretable as forecasts only.
  7. Code is Apache-2.0 per the repository; (J) check the licence of the weights you download and plan inference hardware.
  8. Not documented in the registry. (J) Series unlike the corpus; regime shifts the context window does not show.
  9. (J) Yes as a candidate in the harness, especially for many short series without training budget.

TimesFM 2.5 and 3.0.

  1. A patched decoder-only model pretrained on a large corpus for zero-shot forecasting; the repository documents TimesFM 2.5 (September 2025, 16k context, optional quantile head) and TimesFM 3.0 (August 2026) with native multivariate and covariate support.
  2. The original abstract says out-of-the-box accuracy on public datasets comes close to supervised models trained on each dataset, which is a claim of closeness, not superiority. The TimesFM-3 announcement claims top average rank among pretrained models on GIFT-Eval, FEV-Bench and TIME; these are the authors' own results.
  3. Not established beyond the "comes close" wording.
  4. History as context; no training on your data. Multivariate gains need related series or covariates.
  5. The announcement lists 330M parameters for TimesFM-3.
  6. (J) A black box.
  7. Weights up to 2.5 are Apache-2.0; TimesFM 3.0 weights are under a non-commercial licence, with commercial and production use through authorized Google Cloud services, per the repository README.
  8. Not documented in the registry. (J) Context beyond the window is dropped (the README's MLX section truncates at 15,360 points; other runtimes were not checked).
  9. (J) Candidate in the harness; settle the licence question first.

Moirai and Moirai 2.

  1. Universal zero-shot forecasting: a masked-encoder model with any-variate attention trained on LOTSA (over 27 billion observations in nine domains per the abstract). Moirai 2.0 is a preprint describing a decoder-only backbone, a single patch size and a quantile loss, trained on a new 36M-series corpus.
  2. Moirai: competitive or superior zero-shot performance compared with full-shot models (abstract; benchmarks not named there). Moirai 2.0: ranks among the top pretrained models on GIFT-Eval and is smaller and faster than Moirai 1.0-Large (preprint abstract).
  3. The Moirai 2.0 abstract notes that performance plateaus as parameters grow and declines at longer horizons.
  4. History as context; no training on your data.
  5. Moirai 2.0 is reported as twice as fast and thirty times smaller than Moirai 1.0-Large (preprint abstract).
  6. (J) A black box.
  7. The uni2ts repository code is Apache-2.0 per the registry record; (J) check weight terms.
  8. Longer horizons per the Moirai 2.0 abstract.
  9. (J) Candidate in the harness.

TimeGPT.

  1. A pretrained model offered through a commercial API (per the Nixtla SDK repository record) for zero-shot forecasting.
  2. The preprint asserts strong zero-shot performance against statistical, machine-learning and deep-learning methods; the abstract gives no figures or datasets.
  3. Not established; the abstract gives no numbers.
  4. History sent to the API; no training on your data.
  5. Not applicable to you; compute is the vendor's.
  6. Weights not published as far as the registry records; the preprint abstract does not say (Source not verified).
  7. (J) An external dependency with data-governance, latency, cost and vendor-change implications.
  8. Not documented in the registry.
  9. (J) Only if data may leave your environment and the per-call cost beats the engineering cost of the baseline.
Interview practice · 10 min

Your team has two years of daily arrivals for 15 hospital emergency departments and a seasonal-naive baseline. A manager asks you to train a Temporal Fusion Transformer for staffing. How do you respond?

Content version 6 · last verified 2026-10-18 · depends on numpy