ChronoScope — Univariate Forecasting Atlas with a Foundation-Model Tier
A univariate time-series forecasting atlas: 15 diagnostic cases (4 real, licensed + 11 seeded synthetic), each forecast by the same 19-method ladder with backtested MASE/sMAPE/coverage, from classical baselines through ML and deep nets to four zero-shot foundation models (Chronos-Bolt, Chronos-2, TimesFM-2.5, TiRex-2). A 10-module statistical analysis suite runs alongside. Everything is baked offline and replayed in a static SPA; a Pyodide live lane forecasts a bring-your-own-series with a numpy core. Honest by design: the foundation models are offline-only, and on real M4-hourly a plain SeasonalNaive beats TimesFM-2.5.
Business Context
Anyone who has to pick a forecasting method for a real signal (load, demand, air quality, a sensor stream) faces the same trap: adopt the newest tier because it is newest, or stay with a baseline out of habit, with no evidence for either on the series in front of them. ChronoScope is the evidence. It shows, per behaviour type, where each tier earns its complexity and where it does not, so the choice is made against backtested error and calibrated coverage rather than a vendor claim. It also carries a licence-gated data provenance registry: non-redistributable sources can run in the private pipeline but a testable export guard stops their derived artifacts from ever leaking into the public repo.
Strategic Value
The differentiator is real licensed data plus published limit results, not a leaderboard. The foundation-model tier genuinely runs (four models, zero-shot from local checkpoints, including a hard cross-OS lane for TiRex-2), and its best real-case result is strong: MASE 0.476 (TiRex-2 on M4-hourly) against 0.641 for SeasonalNaive. But ChronoScope refuses the blanket claim: on that same real case a one-line SeasonalNaive (0.641) beats TimesFM-2.5 (0.729), and dedicated white-noise and random-walk cases exist precisely as honesty controls where no method should win. Interval coverage is reported next to point error, exposing deep methods whose 80%-nominal bands cover far less. The foundation models are offline-only; the live browser lane is the numpy core, and the card says so. It is a reusable pattern for method selection made on backtested evidence with the negative results left in.
The Challenge
Univariate forecasting has a crowded method space (exponential smoothing, ARIMA, gradient boosting, deep nets, and now pretrained time-series foundation models) and a marketing problem: each new tier arrives claimed as a general winner. The useful questions are quieter. On which kind of series does a given method actually help, is a pretrained foundation model worth its cost against a one-line seasonal baseline, and is the prediction interval it reports anywhere near its nominal coverage. Most demos answer none of these because they run one method on one flattering series.
Our Approach
ChronoScope fixes the axis and varies the method. Fifteen diagnostic cases each isolate one time-series behaviour: four are real and licensed (UCI Electricity, UCI Beijing PM2.5, Monash/M4 hourly and daily, all CC-BY-4.0), eleven are seeded, deterministic synthetics with their own generators (seasonal, trend, intermittent demand, random walk, white-noise control, level shift, GARCH volatility, fractional memory, chaotic Mackey-Glass, exogenous promo). Every case is forecast by the same 19-method ladder: eight classical/statistical (SeasonalNaive, SES, Holt, HoltWinters, Theta, AutoETS, AutoTheta, AutoARIMA), one ML (LightGBM), six deep (NHITS, DLinear, NLinear via neuralforecast and an in-house engine), and four zero-shot foundation models (Chronos-Bolt, Chronos-2, TimesFM-2.5, TiRex-2, the last via a purpose-built cross-OS WSL2/CUDA lane because its dependencies have no Windows wheels). Each method-case pair carries backtested MASE, sMAPE and interval coverage, plus a 10-module statistical analysis suite (stationarity, autocorrelation, seasonality, filters, changepoints, volatility, distribution, fractal, nonlinear, causality). The heavy work is offline and committed; the SPA replays it, and a Pyodide worker forecasts a user-pasted series with a pure-numpy core.
Key Performance Indicators
| KPI | Baseline | Result | Impact |
|---|---|---|---|
| Coverage of the method space | One method on one flattering series | 19-method ladder across 15 diagnostic cases (285 method-case backtests), classical to ML to deep to 4 foundation models | See per-behaviour where each tier earns its complexity |
| Foundation models, run not claimed | A pinned dependency nobody executes | 4 zero-shot FMs baked for all 15 cases (Chronos-Bolt, Chronos-2, TimesFM-2.5, TiRex-2); TiRex-2 via a cross-OS WSL2/CUDA lane | Offline-only; the live browser lane is the numpy core |
| Best real-case accuracy | SeasonalNaive MASE 0.641 (M4-hourly) | TiRex-2 MASE 0.476 on real M4-hourly (backtested) | A real gain, on a licensed real series, not a synthetic one |
| Honesty controls | "Newest tier always wins" | SeasonalNaive 0.641 beats TimesFM-2.5 0.729 on the same case; white-noise + random-walk null cases baked in | The foundation tier is not a blanket win, and the app shows it |
Architecture
chronoscope pipeline
Fix the series, vary the method
ChronoScope is a univariate forecasting atlas. Instead of running one method on one series, it fixes 15 diagnostic cases (each isolating one time-series behaviour) and runs the same 19-method ladder on every one, with backtested MASE, sMAPE and interval coverage baked for all 285 method-case pairs. Live at chronoscope.fasl-work.com.
The ladder, and where each tier stops helping
The ladder climbs from 8 classical/statistical methods (SeasonalNaive, SES, Holt, HoltWinters, Theta, AutoETS, AutoTheta, AutoARIMA) through LightGBM and 6 deep nets (NHITS, DLinear, NLinear) to 4 zero-shot foundation models (Chronos-Bolt, Chronos-2, TimesFM-2.5, TiRex-2). The foundation tier is real: all four run zero-shot from local checkpoints, TiRex-2 through a purpose-built cross-OS WSL2/CUDA lane because its dependencies have no Windows wheels. Their numbers are committed for all 15 cases, not aspirational.
Real data, and a licence guard around it
Four cases are real and licensed (UCI Electricity, UCI Beijing PM2.5, Monash/M4 hourly and daily, all CC-BY-4.0); eleven are seeded synthetics with their own generators. A licence-gated provenance registry with an enforced export guard lets non-redistributable sources (M5, Stooq) run in the private pipeline while their derived artifacts can never leak into the public repo. This is a testable honesty mechanism, not a policy sentence.
Honest about the foundation tier
On real M4-hourly, TiRex-2 gives the best backtested error (MASE 0.476 vs SeasonalNaive’s 0.641), a genuine gain on a licensed real series. But the foundation tier is not a blanket win: on the same case a one-line SeasonalNaive (0.641) beats TimesFM-2.5 (0.729), and dedicated white-noise and random-walk control cases exist precisely where no method should win. Interval coverage is reported next to point error, exposing deep methods whose 80%-nominal bands cover far less. The foundation-tier backtest windows are capped for speed, so those numbers rest on fewer windows than the classical tier, and the app states it. The foundation models are offline-only: the live browser lane is a Pyodide numpy core, never an in-browser foundation model.
Technology Stack
In action
A short tour of the live app — the real interface, recorded from the deployed site.

Application Screenshots

