Prototype · gcu-media-planning · synthetic case data + public 2026 benchmarks
Two modes. The 2012 case replays the GCU finding on a synthetic fixture: optimise the upstream metric and the plan goes pessimal on the downstream one. The planner runs the same boast-and-bound math on your real budget against cited public benchmarks — and hands you a plan.csv.
CPI = cost-per-Inquiry, the number a channel manager is paid against. CPS = cost-per-Start, the number the institution is paid against. The note's finding: a CPI-optimal plan is CPS-pessimal.
Hard upper bound on total spend. Default is a flat budget — last quarter's total, "no increase in total cost."
Flat upside ceiling each channel may grow over last quarter's spend. The GCU pilot used a flat 10% as a hack; the honest version is a per-vendor number (some vendors have 50% headroom, some −20%).
Multi-period weighted scorecard. The remaining weight splits across the three older quarters. The pilot ran 5 / 10 / 15 / 70, oldest to newest — a politics tool dressed up as a statistics tool.
| Channel | CPI $ | CPS $ | Plan $ | vs base |
|---|
The CPL-vs-CPA toggle — same lineage as the case's CPI-vs-CPS. Public benchmarks price leads; your lead→customer close rate they can't know.
From your CRM — benchmarks don't publish it. Applied flat across lead-priced channels; channels with published purchase CPA (TikTok ecommerce) use it directly.
A label on the plan, nothing more — nothing is fetched or scraped.
The programmatic-display numbers come from an aggregator citing primaries second-hand — off by default; re-verify before committing budget.
| Channel · source | Spend $ | Share | Leads (±30%) | Eff. $/unit |
|---|
Assumptions, declared: diminishing returns as per-channel tranches (10/10/15/15% of budget at 1.00/1.15/1.35/1.60× benchmark cost — concave, so the greedy fill stays provably optimal, same argument as the case tab); 50% per-channel ceiling; ±30% planning band because the sources publish medians with no error bars. Mirrors planner/plan.py.