Team forecasting system: compare teams, predict the effect of roster changes
A deterministic forecasting engine: it models each performer separately, sums to the team and shows a range of outcomes from a Monte Carlo simulation. No language model touches the numbers.
§01 The case in detail
- Task
- Compare teams and predict how roster changes (new hires, departures) change a team’s results.
- How it works
The system is a deterministic forecasting engine: no language model touches the numbers. It models each performer separately, then sums to the team.
A Monte Carlo simulation replays attrition, spend share by tenure cohort and returns, giving a range of outcomes drawn from real historical spread, not fixed percentages.
Incomplete months are flagged and imputed with explicit, labelled assumptions. Every run is versioned with a data fingerprint, and can be back-tested on history truncated to a past date.
- Stack
- FastAPI · server-rendered pages · e-mail one-time-code sign-in · three containers: web, build, compute (build and compute have no network)
- Why no LLM
- The forecast has to be reproducible and explainable. A fixed seed and a data fingerprint make every run repeatable, and the decision stays with a person: the tool is advisory.
- Data
- Per-performer data, not team aggregates
- Tenure cohorts as a frame
- Team-level bootstrap when per-performer data is missing
- Unclosed months flagged
- Model
- Monte Carlo with a fixed seed (reproducible)
- Attrition with smoothing (zero exits in a small sample is not zero risk)
- Returns drawn from neighbours of similar spend size
- Team budget as a shared ceiling
- Control
- As-of-date back-test against the fact
- Risk rules (concentration, drawdown, unconfirmed spend)
- Versioned runs with a data fingerprint
- Advisory tool: the decision stays with a person
Architecture as text: who passes what to whom
Sign-in
- Team member ↔ CDN + proxy: requests
- CDN + proxy ↔ Web: filtered
- Web → Mail service: one-time code
- Web ↔ Results DB: codes, sessions
Upload + build
- Web → Uploads: stage Excel
- Web → Results DB: queue request
- Host timer → Build job: start
- Uploads → Build job: read files
- Results DB → Build job: requests
- Build job → Team data: write
- Operator → Team data: manual push
Forecast
- Team data → Compute job: read only
- Compute job → Results DB: runs, risks
View
- Results DB → Web: runs, risks
- Web → Team member: pages
§02 Deterministic Monte Carlo forecasting without an LLM: problem, approach, outcome
- Problem
- Compare teams and predict how roster changes (new hires, departures) change a team’s results.
- Approach
- A deterministic forecasting engine that models each performer separately and sums to the team. A Monte Carlo simulation replays attrition, spend share by tenure cohort and returns. Incomplete months are flagged and imputed with explicit, labelled assumptions.
- Outcome
- The forecast is a range of outcomes drawn from real historical spread, not fixed percentages. Every run is versioned with a data fingerprint, repeatable with a fixed seed, and can be back-tested on history truncated to a past date.
Short answers
- Why forecast without a language model?
- The forecast has to be reproducible and explainable. No language model touches the numbers; a fixed seed and a data fingerprint make every run repeatable.
- What does the Monte Carlo simulation do here?
- It replays attrition, spend share by tenure cohort and returns, and gives a range of outcomes drawn from real historical spread instead of fixed percentages.
- How are incomplete months handled?
- They are flagged and imputed with explicit, labelled assumptions. When per-performer data is missing, a team-level bootstrap is used.
- How is the forecast checked against reality?
- By an as-of-date back-test: the model runs on history truncated to a past date and is compared with what happened.
- Is zero departures in a small sample treated as zero risk?
- No. Attrition is smoothed, so a small sample with no exits does not mean no risk.
- Does the tool make the decision?
- No. It is an advisory tool and the decision stays with a person.
See also: Forecasts and dashboards CRM for a network of martial-arts clubs.
§03 Related
- CRM for a network of martial-arts clubsWhatsApp funnels, reports, trainer pay
- Approval system for financial requestsPersonal project: rules as data, encryption, audit log
- Person dossier aggregator from official sourcesMany sources, one reviewed dossier
- Forecasts and dashboardsNumbers computed by code, with an honest range
- LLM integration into working systemsWire a model into the POS, booking, CRM, messengers
Have a task like this? Write to me.
Send me a message
It goes straight to my Telegram. I reply to the address you leave.