How we forecast your spend
The “Projected this month / next month” figures on the Costs page — and the
budget_forecast_breach / forecast_increase alerts — all come from one
forecast, computed only from your own billing history. There is no second
model anywhere in the product, and nothing in the number is a canned constant.
The point forecast
Section titled “The point forecast”For the month in progress, the projection is the highest of three honest readings — we surface risk early and never project below what you have already spent:
- Month-to-date — what the bill already says.
- Run rate — month-to-date divided by the fraction of the month elapsed.
- Model — a Holt-Winters forecast (level + trend + yearly seasonality, smoothing parameters grid-searched per org) fitted on your closed months only. The partial current month never contaminates the training data.
Next month’s figure is the same model’s two-step-ahead point.
The ± band
Section titled “The ± band”The band is not a fixed percentage. We replay the model over your own history — a rolling backtest: for every month we have, refit on only the months before it and score the prediction against what actually happened. The ± band is the 80th percentile of those absolute errors, so roughly 8 out of 10 of the model’s own historical misses fell inside it. The band’s lower edge never dips below what you have already spent this month.
Disclosed accuracy
Section titled “Disclosed accuracy”The same backtest produces the accuracy figure shown next to the projection: the mean absolute percentage error (MAPE) one month ahead, with the number of backtest samples it was measured on. It answers “how wrong has this forecast typically been for us” — not a benchmark, not a promise.
When we say nothing instead
Section titled “When we say nothing instead”- Fewer than 3 closed months — no forecast at all. A trend line through one or two points is a guess, so the surface hides and the API answers with an explicit “not enough history” reason.
- Fewer than 6 closed months — point forecast only, no ± band and no accuracy figure. A band fitted on one or two residuals is noise dressed up as confidence.
- Stale history — if the newest closed month on record is older than last month (for example a cloud sync that stopped weeks ago), we refuse with an explicit “history is stale” reason instead of relabelling an old model point as “this month”.
Short histories make wide, noisy bands; we show them as they are rather than tightening them cosmetically. Every number traces to your own cost rows.