-
Notifications
You must be signed in to change notification settings - Fork 1
Home
A linear-programming decision-support system for splitting a fixed marketing budget across platforms and objectives — with named constraints, data-driven uncertainty bounds, and a confidence score that refuses to claim certainty the data can't support.
Author: Hoda Rezvanjoo, Independent Researcher · ORCID
0009-0006-3882-2669
Live demo: https://digital-budget-optimisation-engine.streamlit.app/
Source: https://github.com/Hoda834/digital-budget-optimisation-engine
License: MIT
Cite as: see CITATION.cff
| Domain | Decision support systems · constrained optimisation · marketing analytics |
| Method | Linear programming (PuLP / CBC), James-Stein shrinkage, piecewise-linear diminishing returns, Monte Carlo robustness |
| Scale | 12 platforms × 4 objectives × 3 yield brackets × 3 scenarios per run, solves in <1s |
| Codebase | ~5,900 lines typed Python 3.11 · Streamlit UI · 141-case pytest suite · CI on every push |
| Outputs | Auditable allocation, per-KPI forecasts with data-driven confidence bands, classified decision report, Plan A / Plan B |
Marketing-budget decisions rarely fail for lack of data. They fail because budgets are limited and must satisfy competing objectives, platform performance is interdependent, business constraints are applied informally or too late, and scenario uncertainty is ignored or oversimplified. The result is a recommendation no one can defend in a meeting.
This framework treats media-mix planning as a constrained optimisation problem with declared assumptions. Every floor, cap, weight, and multiplier is named, visible on the results page, and editable without walking the wizard from scratch. Every binding constraint surfaces with its shadow price, so "why is Facebook capped?" has a literal answer rather than a hand-wave.
Where the data is thin, the engine says so: short histories are shrunk toward the cross-platform mean, forecast confidence bands scale with the observation window, and a Monte Carlo robustness check flags any platform whose rank is fragile to plausible noise.
In scope: quarterly media-mix planning under declared business policy — producing a defensible allocation with explicit assumptions and uncertainty bounds.
Out of scope: live-API continuous optimisation, sub-platform allocation at the campaign/ad-set/creative level, causal incrementality estimation, Bayesian recalibration between runs. The engine inherits whatever attribution bias is in the KPIs you supply.
These limits appear in the report's forecast caveat, in the README, and in Decision-Logic — they are part of the artefact, not hidden.
- Orientation — Getting-Started · Architecture · Wizard-Walkthrough
- Modules — Module 1 — Objectives · Module 2—Platforms · Module 3—Historical-KPIs · Module 4—Cost-per-Unit · Module 5—LP-Optimiser · Module 6—Forecasting · Module 7—Interpretation
- Data & configuration — CSV-Import-Reference · KPI-Catalogue · Calibration-Constants
- Method & engineering — Decision-Logic · Contributing · FAQ-and-Troubleshooting