forecasting
Forecasting
A forecast that cannot beat "repeat last period" is noise. Baseline first, fancy second. The naive forecast is free, instant, and the bar every model must clear — if your AutoARIMA loses to last-quarter-repeated, ship the repeat and say so.
You are not done when a model produces a number. You are done when you can defend the number: which method, why that method for this data, how it scored against the naive baseline in a backtest, and the interval around the point. A point estimate with no error band is a guess wearing a lab coat.
The deliverable contract
Every forecast you ship is a reproducible artifact, not a number pasted in chat:
- A script that reads the history and regenerates the forecast (no manual steps).
- A CSV/Parquet with columns
ds, forecast, lo, hi— timestamp, point, interval bounds. - A one-paragraph accuracy readout: WAPE + bias from a rolling-origin backtest, and MASE vs the naive baseline (MASE < 1.0 = you beat naive; ≥ 1.0 = ship the naive forecast instead).
If you cannot produce all three, you have not forecast — you have guessed. scripts/verify.sh checks the artifact has these columns, the right row count, and an accuracy line.
The loop
Run these in order. Skipping step 3 is the most common failure.