Modern Forecasting
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
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.
Concept
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.
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.
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.
- 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.
| Criterion | Deep global (train it) | Linear check | Foundation (zero-shot) |
|---|---|---|---|
| Learns from | Your series | Your series | A large external corpus |
| Data you need | Many related series and long history | A few seasons of history | A history window per series |
| Covariates | TFT takes static, known-future and observed inputs | Add known-future columns yourself | Native in Chronos-2 and TimesFM 3.0 (documented) |
| Running cost | Training, retraining, serving pipeline | Seconds on a CPU | Inference on large models; often a GPU |
| Access | Open papers and libraries | Any linear algebra library | Check weight licence or API terms (dated) |
Covariates help only if they are known at the cutoff (Day 24).
Fix the bar
Seasonal naive and ETS (or your tuned GBM) on your rolling origins and horizon, one metric such as MASE.
Match needs to what you have
Series count, history, covariates known at the cutoff, compute, licence, data that may leave.
Read benchmark claims as claims
Datasets, metric, horizon, date, leakage flag; vendor reports are self-reported.
Test cheaply and in order
Baseline, linear check, then one candidate on identical origins; decide on paired differences and cost.
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.
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.
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.
24 synthetic route series with weekly and annual cycles. Lower is better.
- the cheap linear check on your origins
- 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).
Application and workplace decision
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%}")
Mini-assessment
Technical depth
What a global model shares, derivedLocal 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.
- series (a SKU, a meter, a cell tower), time of the forecast origin, horizon
- the input window: the last L values of series i, plus any covariates known at t
- a scale (here the window mean) that puts a 10-unit and a 200-unit series on one footing
- top line (local): K separate parameter sets; bottom line (global): one set shared by all K series
- the training loss, e.g. squared error or pinball
- 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.
- series i's own least-squares slope of next value on last value (one lag, no intercept)
- 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.
| Fit | Pairs (last value -> next) | Sum xy | Sum x^2 | Slope |
|---|---|---|---|---|
| SKU A alone (level 10/day) | (1.0 -> 1.2), (1.2 -> 1.1) after scaling | 2.52 | 2.44 | 1.033 |
| SKU B alone (level 200/day) | (0.8 -> 0.9), (0.9 -> 1.0) after scaling | 1.62 | 1.45 | 1.117 |
| Global, scaled | all four pairs | 4.14 | 3.89 | 1.064 = 0.627 x 1.033 + 0.373 x 1.117 |
| Global, unscaled | raw units: (10 -> 12), (12 -> 11), (160 -> 180), (180 -> 200) | 65,052 | 58,244 | 1.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.
| Criterion | Local (one model per series) | Global (one shared map) |
|---|---|---|
| Variance | High on short series: few pairs per parameter | Low: every series adds pairs to the same parameters |
| Bias | Low: each series gets its own dynamics | High if series truly differ (a new store, a different machine type) |
| Diagnostic | Unstable fits across adjacent origins | Backtest residual bias by segment: a signed residual flags a series the map misfits |
| Fix when it fails | Pool, or shrink towards a group fit | Scale, add series features or IDs, or pool within segments |
| Fit and serve | K separate fits; a failure stays in one series | One 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.
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, workedadvancedScaling and tokens pushed through by hand on four numbers, patching counted, and the one input every zero-shot model depends on: the context window.
| Criterion | Chronos / Bolt / 2 | TimesFM | Moirai / Moirai 2 | DLinear / NLinear |
|---|---|---|---|---|
| Input representation | Scaled values quantized into tokens; Bolt and Chronos-2 use patches | Patches of the history | Patches at several sizes (Moirai); one size (Moirai 2) | The raw window; DLinear splits trend and remainder |
| Backbone | T5-style language models; Chronos-2 adds group attention | Decoder-only Transformer | Masked encoder with any-variate attention; Moirai 2 is decoder-only | One linear layer per part |
| Output | Sampled paths (Chronos) or direct multi-step quantiles (Bolt) | Point forecasts; 2.5 adds an optional quantile head | A 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.
| Step | Rule | Four hourly loads of a feeder (MW) |
|---|---|---|
| 1 Scale | divide by the mean absolute value of the context | 40, 50, 60, 50 -> scale 50 -> 0.8, 1.0, 1.2, 1.0 |
| 2 Quantize | token = bin index; illustrative bins of width 0.25 | 0.8 -> 3, 1.0 -> 4, 1.2 -> 4, 1.0 -> 4 |
| 3 Predict | a language model outputs probabilities over the next token | say P(3) = 0.1, P(4) = 0.6, P(5) = 0.3 |
| 4 Decode | bin centre x scale; sample paths or read quantiles | token 4 -> 1.125 x 50 = 56.25 MW; mean 1.175 x 50 = 58.75 MW |
| 5 Train | cross-entropy on the next token, across a large corpus | the 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.
- look-back window in time steps
- patch length and stride (an example): 62 + 2 = 64 tokens; the +2 includes S copies of the last value padded at the end
- 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.
- 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).
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 decisionsWhat a one-layer linear map learns, how much headroom it leaves, and how to read a per-origin comparison.
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.
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.
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 error metric (for example MASE) at origin k, same series and horizon for both
- number of rolling origins
- 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 familiesCore idea, inputs and outputs of four families, from their papers.
| Criterion | N-BEATS / N-HiTS | DeepAR | TFT | PatchTST |
|---|---|---|---|---|
| Core idea | Stacked fully connected blocks with residual links; N-HiTS adds multi-rate sampling | Autoregressive recurrent network trained across many series | Recurrent layers, interpretable attention, variable selection and gating | Transformer over patches of the series |
| Inputs | Univariate history | Many related series | Static, known-future and observed inputs | Each channel on its own (channel independence) |
| Output | Point forecasts; interpretable trend and season variant | A probabilistic forecast | Quantiles at several horizons | Long-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 claimSix things a rank needs before it says anything about your problem, and a computed example of ranks that do not transfer.
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.
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 accessThe dated release history in the registry, what it records about weights, code and APIs, and what to re-check.
| Date | Release | Recorded access, licence or note |
|---|---|---|
| 2023-10-05 | TimeGPT-1 preprint (Nixtla) | Commercial API via the Nixtla SDK; SDK repo licence NOASSERTION; weight terms: source not verified |
| 2024-03-12 | Chronos paper (arXiv; TMLR, Nov 2024) | Tokenized series, T5-style models; code Apache-2.0 |
| 2024-07-08 | TimesFM paper (ICML 2024) | Patched decoder-only model for zero-shot point forecasts |
| 2024 | Moirai paper (ICML 2024) | Masked encoder, any-variate attention; uni2ts code Apache-2.0 |
| 2024-10-14 | GIFT-Eval benchmark (arXiv v1) | Leaderboard added a leakage flag (2025-08-05) and a zero-shot tag (2025-08-25) |
| 2024-11-26 | Chronos-Bolt (repo news) | Patch-based, direct multi-step quantile decoder |
| 2025-09-15 | TimesFM 2.5 (repo README) | Weights up to 2.5 remain Apache-2.0 |
| 2025-10-17 | Chronos-2 report (release 2025-10-20) | Multivariate and covariate-informed; vendor benchmarks self-reported |
| 2025-11-12 | Moirai 2.0 preprint (uni2ts 2.0.0: 2025-11-04) | Decoder-only successor; no peer-reviewed venue confirmed |
| 2026-08-28 | TimesFM 3.0 release (blog 2026-08-31) | Weights non-commercial; commercial use via Google Cloud services |
| 2026-09-08 | chronos-forecasting v2.3.2 (registry) | Latest release when checked |
| 2026-09-21 | Nixtla 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 testA decision path from the baselines to one candidate family, and six checks for a fair zero-shot pilot.
- Cheap models scored?naive, ETS, linear
- no: to Run them first
yes - Headroom pays its cost?
- no: to Keep the cheap model
yes - Many related series?
- yes: to Deep global candidate
no - One zero-shot candidatelicence and data checked
- Run them firstsame origins, horizon, metric
- Keep the cheap modeldocument the headroom
- 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).
Same harness
Identical origins, horizon, series and metric as the baseline and the linear check.
Context you can serve
The history length you can pass in production; longer windows cost memory and time on every run.
Covariates known at the cutoff
Only inputs available at forecast time, as for any model (Day 24).
Leakage
Public series may sit in the pretraining corpus; prefer private or post-release periods.
Intervals checked
Coverage and width on held-out origins (Day 26); separately where values leave the context's scale (spike, outage).
Cost per run
Hardware or API cost for every forecast run, for every series.
The full cost of a modern modelFive cost layers that a small accuracy gain has to pay for.
- TrainingGPUs, tuning runs, retraining schedule (none for zero-shot).
- ServingLatency and hardware for every forecast run, for every series.
- MonitoringCoverage, bias and drift checks, as for any model (Day 26).
- LicenceWeights and code may differ; non-commercial weights block production.
- Data governanceSending series to an external API may not be allowed.
What a staff-level answer addsadvancedFive habits that separate a senior evaluation of a new family from a demo.
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?
Prerequisites and related concepts
- Forecast baselines · day 23
- Global ML forecasting models · day 24
- Rolling-origin backtesting · day 25
- Deep and foundation forecasting models
- Per-horizon error and stability · day 25
- Prediction intervals and quantiles · day 26
- Neural vs classical baseline comparison · day 35
- Transfer learning and fine-tuning decisions · day 40
References
- Are Transformers Effective for Time Series Forecasting?core
One-layer linear models outperformed several Transformer-based long-horizon forecasters on nine real-world datasets (abstract), the basis for the linear check.
- GIFT-Eval: A Benchmark For General Time Series Forecasting Model Evaluationcore
A benchmark across many datasets, frequencies and horizons with a non-leaking pretraining split, evaluating statistical, deep and foundation models.
- SalesforceAIResearch/gift-eval: GIFT-Eval benchmark and leaderboardoptional
Leaderboard repository that records a test-data-leakage flag, a zero-shot tag and MASE and CRPS ranks; rankings change, so cite with a date.
- google-research/timesfm: TimesFM (Time Series Foundation Model)core
Version history and the weight licence notice (3.0 weights non-commercial, up to 2.5 Apache-2.0).
- N-BEATS: Neural basis expansion analysis for interpretable time series forecastingoptional
Fully connected residual stacks and an interpretable variant, evaluated on M3, M4 and TOURISM.
- NHITS: Neural Hierarchical Interpolation for Time Series Forecastingoptional
Multi-rate sampling and hierarchical interpolation for long-horizon forecasting, with reported computation savings versus Transformers.
- Temporal Fusion Transformers for interpretable multi-horizon time series forecastingoptional
Handling of static, known-future and observed inputs with attention, variable selection and quantile outputs.
- A Time Series is Worth 64 Words: Long-term Forecasting with Transformersoptional
Patching and channel independence for Transformer long-horizon forecasting.
- Chronos: Learning the Language of Time Seriesoptional
Tokenized, scaled series with T5-style language models trained for zero-shot probabilistic forecasting; reported over 42 datasets.
- amazon-science/chronos-forecasting: Chronos: Pretrained Models for Time Series Forecastingoptional
Release history and model table for Chronos, Chronos-Bolt (patch-based, direct multi-step quantiles) and Chronos-2.
- A decoder-only foundation model for time-series forecastingoptional
Patched decoder-only model pretrained on a large corpus for zero-shot point forecasting.
- TimesFM-3: A zero-shot foundation model for multivariate forecastingoptional
Vendor announcement of native multivariate and covariate support in TimesFM-3; rankings are self-reported.
- Unified Training of Universal Time Series Forecasting Transformersoptional
Masked-encoder universal forecaster with any-variate attention, trained on the LOTSA archive.
- Moirai 2.0: When Less Is More for Time Series Forecastingoptional
Preprint describing the decoder-only successor with quantile loss and its stated limits at longer horizons.
- TimeGPT-1optional
Preprint describing TimeGPT-1 as a pretrained model evaluated zero-shot; the abstract states no access, weight or licence terms (API access is recorded for the Nixtla SDK repository). (Abstract)
- Forecasting: Principles and Practice, the Pythonic Wayoptional
Python edition of FPP3 with a chapter on foundation forecasting models (chapter listed on the landing page; contents not read in detail). (Ch. 15 Foundation forecasting models)
Optional sections
Deep dive
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).
- 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.
- 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.
- Not established in the registry; no head-to-head failure is documented here.
- 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.
- The N-HiTS authors report roughly 50 times less computation than Transformer baselines. (J) Training is still heavier than ETS.
- N-BEATS offers an interpretable variant with trend and seasonality bases that loses little accuracy, per the authors.
- (J) You own training, retraining, versioning and intervals, since the papers describe point forecasts.
- Not documented in the registry. (J) Regime breaks and series unlike the training set.
- (J) Test only if you have many related series and the strong baselines have left headroom.
DeepAR.
- A global autoregressive recurrent network trained across many related series that outputs probabilistic forecasts.
- Not established in the registry; compare on your data.
- Not established in the registry.
- Many related series by design.
- (J) Neural training and sampling-based forecasting cost more than statistical methods.
- (J) A black box; intervals come from the output distribution.
- (J) Training and retraining pipeline required; distributional outputs need calibration checks (Day 26).
- Not documented in the registry. (J) An output distribution family that does not fit the demand.
- (J) Consider when probabilistic output over thousands of related series is needed and GBM quantiles fall short.
Temporal Fusion Transformer.
- 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.
- The authors report significant gains over existing benchmarks on real-world datasets; the abstract names neither the datasets nor the baselines.
- Not established in the registry.
- (J) Many series with rich covariates; little value if there are no covariates.
- (J) Heavy to train relative to GBM.
- The paper presents interpretable attention and variable-selection views; (J) treat them as model explanations, not causal effects (Day 17).
- (J) Needs known-future inputs at serving time with the same availability rules as training (Day 24).
- Not documented in the registry. (J) Leaky future covariates; unstable training on short series.
- (J) Test when promotions or calendars are known and a GBM leaves headroom.
PatchTST.
- Long-horizon forecasting with a Transformer over series patches, with channel independence (each variable treated as its own series with shared weights).
- 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.
- Not established in the registry; see DLinear below for a counter-result on similar benchmarks.
- Long histories at fine granularity, as in the long-horizon benchmarks.
- The authors state patching reduces attention compute and memory quadratically for a given look-back window.
- (J) Attention maps are not explanations (Day 39).
- (J) Training and serving stack for a Transformer.
- Not documented in the registry.
- (J) Only after a linear check on long-horizon data fails to close the gap.
DLinear and LTSF-Linear.
- A set of one-layer linear forecasters for long-horizon forecasting.
- 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).
- The abstract limits itself to long-term forecasting and does not test other tasks.
- Modest; a global linear map over windows.
- Very low.
- High: coefficients are inspectable.
- Low (J): a matrix and a scaler.
- Not documented in the registry. (J) Non-linear interactions, covariates not in the window.
- (J) Always as the linear check.
Chronos, Chronos-Bolt and Chronos-2.
- 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.
- 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.
- The Chronos abstract gives "comparable and occasionally superior", not consistent superiority, and the strongest results are on datasets in the training corpus.
- History as context only; no training on your data. Training corpus is public datasets plus synthetic series.
- 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.
- (J) A black box; quantile outputs are interpretable as forecasts only.
- Code is Apache-2.0 per the repository; (J) check the licence of the weights you download and plan inference hardware.
- Not documented in the registry. (J) Series unlike the corpus; regime shifts the context window does not show.
- (J) Yes as a candidate in the harness, especially for many short series without training budget.
TimesFM 2.5 and 3.0.
- 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.
- 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.
- Not established beyond the "comes close" wording.
- History as context; no training on your data. Multivariate gains need related series or covariates.
- The announcement lists 330M parameters for TimesFM-3.
- (J) A black box.
- 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.
- 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).
- (J) Candidate in the harness; settle the licence question first.
Moirai and Moirai 2.
- 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.
- 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).
- The Moirai 2.0 abstract notes that performance plateaus as parameters grow and declines at longer horizons.
- History as context; no training on your data.
- Moirai 2.0 is reported as twice as fast and thirty times smaller than Moirai 1.0-Large (preprint abstract).
- (J) A black box.
- The uni2ts repository code is Apache-2.0 per the registry record; (J) check weight terms.
- Longer horizons per the Moirai 2.0 abstract.
- (J) Candidate in the harness.
TimeGPT.
- A pretrained model offered through a commercial API (per the Nixtla SDK repository record) for zero-shot forecasting.
- The preprint asserts strong zero-shot performance against statistical, machine-learning and deep-learning methods; the abstract gives no figures or datasets.
- Not established; the abstract gives no numbers.
- History sent to the API; no training on your data.
- Not applicable to you; compute is the vendor's.
- Weights not published as far as the registry records; the preprint abstract does not say (Source not verified).
- (J) An external dependency with data-governance, latency, cost and vendor-change implications.
- Not documented in the registry.
- (J) Only if data may leave your environment and the per-call cost beats the engineering cost of the baseline.
Interview practice
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?