Scenario summary · Bayesian MMM interface preview
Model output, in the way an analyst wants to see it.
Everything the executive page hides for clarity, surfaced here for the people who'll be QA-ing the model and answering follow-up questions. Response curves, ROI posteriors, contribution decomposition, adstock decays, and the optimizer's full output, all sourced from the same posterior.json the executive page consumes.
01 · RESPONSE CURVES
Per-channel response curves with current and optimal spend
For each channel, the saturation curve from the Bayesian MMM fit. Solid where spend is below current, dashed where it's above. The dot marks current quarterly spend; the square marks the optimizer's recommended spend.
Below current spend
Above current spend
Current spend
Optimal spend
02 · COMBINED VIEW
Response curves overlaid
All channels on one axis, useful for spotting which channels have the steepest mROI at current spend and where saturation cliffs sit. Convention matches the panel above: solid below current, dashed above.
Below current spend
Above current spend
Current spend
Optimal spend
Constructed from the designed median Hill curve per channel, parameterized at quarterly scale:
response(s) = β · sᵅ / (sᵅ + ec50ᵅ). Assumed ranges are suppressed here for legibility, see the per-channel grid above for those.03 · ROI RANGES
Where each channel's ROI sits, and how confident we are
Designed median (dot) with an assumed range (bar) authored for this scenario. A wide bar represents a channel we've modeled as less certain, not a measured posterior.
Assumed ranges are authored inputs for this illustrative scenario, not draws from a fitted posterior. Channels with floor-hugging ranges (≥1.0×) are shown as "assumed productive"; channels whose ranges straddle 1.0× are shown as ones you'd want to reallocate cautiously.
04 · CONTRIBUTION DECOMPOSITION
Where every dollar of pipeline actually came from
Designed decomposition of the past quarter's modeled pipeline created, built from the authored parameters above rather than a fitted model. Baseline is brand, organic, referral, and customer-expansion intent, pipeline you'd have generated with zero paid media.
Stacked shares sum to total modeled pipeline created. Each channel's contribution = the designed incremental outcome assigned to that channel under the illustrative flighting pattern, not a measured attribution.
05 · HILL PARAMETERS
Saturation curve coefficients per channel
Designed medians and assumed ranges for the three Hill parameters. Use these for sanity-checking against marketing intuition: high α = sharp inflection, low α = gradual; ec50 = the spend where you've hit half the channel's ceiling.
| Channel | α (steepness) | ec50 (half-saturation, $) | β (ceiling, $) | Saturation @ current |
|---|
06 · ADSTOCK DECAY
How long each channel's media keeps working
Geometric adstock decay weights over weeks since exposure. Weight at lag = 0 is always 1.0 (this week). Weight at lag = k is decay^k. Channels with longer memory (Field Events, Podcast) carry influence many weeks past the original touch, exactly what you'd expect in a B2B sales cycle.
Decay curves overlaid
Effective contribution by weeks since exposure
Designed summaries
Decay coefficient and effective memory
| Channel | Decay | Effective memory | Max lag |
|---|
Effective memory ≈ 1 / (1 − decay). A decay of 0.62 implies ~2.6 weeks of effective contribution per impression.
07 · MODEL FIT
Actual vs predicted KPI
Illustrative weekly pipeline (points) against a designed prediction curve (line) with an assumed band, built to show what an actual-vs-predicted chart looks like. This is not a fitted model's output.
This chart is a designed illustration, not a fitted model diagnostic. No R², MAPE, or convergence statistic is reported here because no sampler has run against customer data; there is nothing to report.
08 · OPTIMIZATION DETAIL
Recommended reallocation, line-by-line
The full output of the model's
BudgetOptimizer: per-channel current spend, optimal spend, and movement, with the constraints and objective that produced the result.Objective
maximize_incremental_outcome
Total budget
...
Per-channel floor / ceiling
...
Projected lift
...
| Channel | Current | Optimal | Δ | Δ % | mROI today | Verdict |
|---|
09 · METHODOLOGY
What's under the hood
Model
Bayesian MMM (Bayesian hierarchical MMM). KPI is monetary: weekly pipeline value created (dollar value of new opportunities). One geo (national) in this prototype; production setups extend to N geos with hierarchical pooling on β across geos.
Saturation
Hill curve, applied after adstock:
μ(s) = β · sᵅ / (sᵅ + ec50ᵅ). α controls inflection; ec50 controls scale.Adstock
Geometric decay with max_lag = 26 weeks, tuned for B2B sales cycles. A LinkedIn ad seen in March can still influence a deal that closes in September. Effective spend at week t is
Σₗ decay^l · spend[t−l].Priors
In a production engagement, β ~ LogNormal (weakly informative); α ~ Uniform[0.5, 4]; ec50 ~ Uniform across plausible spend range; decay ~ Beta(2,2). No priors were sampled for this console; the values shown are hand-authored, not drawn from these distributions.
Sampler
Not applicable to this console. The Hill, adstock, and ROI values shown here are hand-authored to illustrate the interface; no NUTS sampler or MCMC chains have been run, and there is no R̂ or ESS to report. A production Compass engagement runs Meridian's NUTS sampler against a customer's actual spend and pipeline data.
Optimizer
Bayesian Budget Optimizer with
spend_constraint_lower=0.30 and spend_constraint_upper=2.50 (per-channel multiplicative bounds on current spend). Objective: maximize the designed incremental outcome above, fixed total budget. In a real engagement this optimizes the fitted model's posterior mean; here it optimizes the authored response curves.Caveats
Out-of-sample reliability degrades when proposed allocations move outside the historical envelope. Treat ranges >2× current spend as extrapolations. Reach & frequency mechanics are not modeled in this demo (spend-only); enable them by switching
media from spend to impressions in the loader and adding reach/frequency coords.