Skip to content

Case study · Technical Safety Services

Revenue forecasting ensemble

A monthly revenue forecast built as an ensemble of classical time-series models, gradient boosting, and two foundation models, with learned weights, hierarchical reconciliation, and rolling-origin backtests on every release.

Period
2026
Role
Designer · sole developer
Results

6

forecasting model families combined

2

time-series foundation models benchmarked

Backtested

rolling-origin, every release

Figures are those published in my resume. Architecture is described at the pattern level: no confidential configuration, pricing logic, or customer data appears on this site.

Revenue planning for a services company runs on recurring service intervals, a backlog of scheduled work, and a pipeline of new opportunities, each with different dynamics and different data. A single forecast number assembled by hand each month cannot say how confident it is or which of those drivers moved.

Leadership needed a forecast they could plan against: one total, a prediction interval around it, and a reconciled breakdown by category that adds up to the same total.

  1. Built the forecasting data layer from the service-management warehouse and Salesforce opportunity snapshots, with a scripted snapshot job so pipeline history exists as of each month rather than being overwritten.

  2. Trained a set of specialist forecasters rather than one model: damped Holt-Winters and SARIMA on log revenue, Ridge direct models, LightGBM, and two time-series foundation models (Chronos-2 and TimesFM-2.5), plus structural experts for unit renewals, facility-by-category mix, backlog, and open pipeline.

  3. Combined them with learned weights fit on rolling-origin backtests, then reconciled the category forecasts hierarchically so they sum to the total forecast. Every release reports holdout error against a confirmation window before it is used.

  4. Benchmarked the LightGBM approach against the public Walmart M5 competition data with its official WRMSSE scorer, so the modeling choices were tested somewhere I could not fool myself.

  5. Published the results as an HTML dashboard with prediction intervals, so the executives see the range and the drivers, not just the point estimate.

How the ensemble produces one number with an interval
  1. Data layer Warehouse history plus monthly Salesforce pipeline snapshots.
  2. Specialist forecasters 6 Damped Holt-Winters, SARIMA, Ridge, LightGBM, Chronos-2, TimesFM-2.5, plus structural experts for renewals, mix, backlog, and pipeline.
  3. Learned weights Fit on rolling-origin backtests, so the weights reflect out-of-sample error.
  4. Reconcile Category forecasts are adjusted so they sum to the total. gate
  5. Publish An HTML dashboard with prediction intervals and drivers.

The learned-weight combination beats the best single forecaster on holdout, and the reconciled total is the number revenue planning now starts from.

Because the pipeline is reproducible and backtested, a change to the data or the models is a measurable change in error, not a matter of opinion.

Rolling-origin backtest, as run on every release
5 backtest origins. At each origin the models train on all history to date and forecast the next 3 months, which are then scored against what happened. The final row trains on everything and forecasts forward. Train on 10 months, score the next 3 Origin 1 Train on 11 months, score the next 3 Origin 2 Train on 12 months, score the next 3 Origin 3 Train on 13 months, score the next 3 Origin 4 Train on 14 months, score the next 3 Origin 5 Train on 15 months, forecast 3 ahead Live forecast history time →
  • Training window
  • Holdout scored against actuals
  • Forecast ahead

Each origin trains on history to that point and scores the next months against what actually happened. The learned ensemble weights are fit on these holdout errors, and a release is used only after it beats the previous one on them.

Where it sits

The highlighted nodes are the systems and people this project touched.

works opportunities submits field leads creates opportunities change requests scope · validation two-way sync price books pricing rules closed-won data CRM + quote data history forecast + intervals models analytics Sales team national org · 3 divisions Field technicians on-site at customer facilities IT & external consultants change control I govern Salesforce CRM system of record Tech Opportunity Program field leads into the pipeline Pricebook automation Python · 48 modules DealHub CPQ quoting backbone Commissions automation closed-won to payout Snowflake · MS SQL Server analytics data layer Revenue forecasting ensemble · ETS · LightGBM · foundation models Power BI executive dashboards CEO · CFO · VP Sales Ops decisions in, rules out