Skip to content

SIMULATION LAYER 01 / 05

The next three quarters, as a range.

A projection is p10, p50 and p90 per period. Not because a point estimate is hard to compute, but because publishing one claims a precision the data does not carry — and anyone reading a single number will treat it as a commitment.

Each recommended action is re-simulated through the same machinery, so its effect is comparable with the baseline rather than asserted.

What a projected panel carries

Tier
which rung of the ladder answered
Decoder
the named model that produced it
Granularity
day, week, month or quarter — as recorded
Points
native, trained on, held back
Quantile source
native quantiles, or empirical paths
Calibration
error on holdout, fit, and whether history was sufficient

If the last row says insufficient, the panel locks. It does not degrade quietly into a wider band.

SIMULATION LAYER 02 / 05

The ladder

Six tiers, tried in order. The panel names the one that answered.

Descending the ladder is the normal case, not a failure state. What would be a failure is a lower tier presented as a higher one.

  1. T0FixtureThe design reference path, used to build and review the interface. Never mixed with a customer snapshot, and labelled as fixture wherever it appears.
  2. T1TimesFMA time-series foundation model with native quantiles. The weights are 925 MB and are not in the image, so on a fresh install this rung is unavailable until they are fetched deliberately.
  3. T2TimesFM with exogenous regressorsThe same model given series the data plane established independently — never a regressor invented to improve the fit.
  4. T3ClassicalWhere the ladder starts when the weights are absent. Well-understood statistical models with intervals that can be checked by hand.
  5. T4BootstrapEmpirical paths resampled from the recorded series, when a parametric fit is not defensible. The band comes from the paths themselves.
  6. T5LockedNot enough recorded history to project at all. The panel states the lock reason and what it would need, and shows no band.

SIMULATION LAYER 03 / 05

The gate

A projection is never labelled TimesFM unless it came from TimesFM.

When the weights are missing, the vendored loader does not fail loudly enough to be safe: it returns a stub that answers in the same shape, and the payload still reports the same source string either way. The only reliable signal is the decoder name.

So the gate checks the decoder name, and a stub result falls through to classical models. The decoder is also persisted with every stored forecast, which means a number produced by a stub stays discoverable months later rather than becoming indistinguishable from a real one.

bi/forecast/ladder.py · bi/engine_bridge.py

Why a name check and not a health check

There is no health endpoint on the vendored forecasting module. It exposes three functions and nothing that reports readiness, so trusting the call would mean trusting a stub.

Measured, not assumed

On a clean monotonic ramp, the stub’s first forecast point came back at a value the real model would not produce. That single measurement is why the gate exists in code rather than in a comment.

The projection, temporal and ensemble flags all default off, so nothing can serve a projection by accident during development.

SIMULATION LAYER 04 / 05

Calibration

Every projection is scored against history it was not shown.

Periods are held back, the model projects them, and the error is reported on the panel next to the band. A backtest series is carried alongside the recorded one so the two can be drawn together and compared by eye.

  • Holdout periods

    How many were withheld, stated per panel. A fit reported without this is unreadable.

  • Error and fit

    Mean absolute error and a fit percentage, both nullable — absent when there was not enough history to compute them honestly.

  • Sufficient

    A plain boolean. When it is false the panel carries a low-confidence treatment rather than a number that looks like the others.

  • Target, when one exists

    A target is a stated intention, drawn in its own colour, never blended into the projection.

SIMULATION LAYER 05 / 05

A projection is only as good as the extraction under it.

Which is why the trace goes back past the model, through the calculation, to the cell.