Skip to content

All projects

Pipeline and Forecast Cockpit

Synthetic benchmark Synthetic data: Ledgerly

Pipeline analytics plus a quarterly bookings forecast that is back-tested honestly: for every past quarter it rebuilds the pipeline as it looked on day one, forecasts, and compares with what actually closed.

Status
Code on GitHub
Relevant to
Data and analytics, GTM Systems
Code
github.com/jungmarker/pipeline-forecast-cockpit

Results · Synthetic data: Ledgerly

  • forecast error (MAPE) over 9 quarters, against 42.5% for CRM stage-weightingSynthetic benchmark
  • MAPE on a second company never used while building the modelSynthetic benchmark
  • Q4 2026 forecast, P10–P90 $8.1M–$11.4MSynthetic benchmark

At a glance

Question
How much will close this quarter, and how far off is the usual CRM forecast?
Data
Ledgerly’s synthetic pipeline, plus a second synthetic company held back until the model was finished.
Compared with
CRM stage-weighting: each open deal’s amount times a generic stage percentage.
How it was tested
For each of 9 past quarters, rebuild the pipeline as it looked on day one, forecast, and compare with what actually closed. Rates are learned only from quarters that had already ended.
Result
Mean absolute error of 8.9% against 42.5% for stage-weighting, and 8.1% on the held-out company.
What it doesn’t show
Both companies come from the same simulator, so the size of the gap describes this data. It shows the method on a known answer key, not its accuracy on a real pipeline.
Forecast cockpit with back-test accuracy, funnel and pipeline hygiene
Forecast cockpit with back-test accuracy, funnel and pipeline hygiene

The problem

On Ledgerly’s synthetic pipeline, CRM stage-weighting under-called bookings by 42.5% on average across 9 back-tested quarters. In this data, stage percentages are generic, many SMB deals are created and won within the quarter, and 30% of Discovery deals have no amount.

What I built, in detail

  • A conversion model with win-this-quarter rates by deal type, segment, stage and age, plus in-quarter run-rate and 4,000 simulations for a P10–P90 band.
  • No future data: a deal’s stage comes from its last stage change before the quarter started, and rates are learned only from quarters that had already ended. A test checks both.
  • Thin Enterprise segments are shrunk toward the stage average, and missing amounts are imputed instead of counted as $0.
  • A single-file dashboard: funnel, velocity, win rate by source and a pipeline-hygiene list by owner.

Stack

DuckDB SQL, Python, pandas, numpy, Chart.js, pytest, GitHub Actions