Going dark forfeits accumulated adstock and restarts you at the dead end of the saturation curve. This prices that loss against always-on spend at an identical budget, using the geometric adstock + Hill saturation transform Google Meridian and Meta Robyn fit.
Stop-start is what you paint. Always-on spreads the same total evenly, so every comparison holds budget constant.
Shaded band: 90% bootstrap interval on the fitted parameters.
| param | yours | fitted | 90% interval |
|---|---|---|---|
| No fit yet. Pick a source and press Fit. | |||
Intervals: 40 residual bootstrap refits. A wide one on n means the data never reached saturation.
Points on the diagonal are exact.
Adstock. Geometric decay over \(L\) lags, normalised by the weight sum so exposure stays in dollars. Sustained spend of \(X\) settles at an exposure of \(X\); a burst overshoots, then bleeds off over roughly \(1/(1-\alpha)\) weeks.
$$ a_t \;=\; \frac{\sum_{s=0}^{L}\alpha^{s}\,x_{t-s}}{\sum_{s=0}^{L}\alpha^{s}} \qquad \alpha\in[0,1) $$Hill saturation. Exposure maps to response on an S-curve: flat and near zero below threshold, steep through the middle, flat again once saturated.
$$ r_t \;=\; V_{\max}\,\frac{a_t^{\,n}}{K^{n} + a_t^{\,n}} $$\(K\) is the exposure returning half of \(V_{\max}\). \(n\) sets how hard the knee is; above about 3 the zone below threshold is effectively dead.
Why flighting costs money. Above the knee the curve is concave, so dollars piled into a burst buy less than the dollars withheld during dark weeks give up. Adstock meanwhile decays into the flat tail, and the next flight restarts from a depleted base. The headline number is the shortfall in \(\sum_t r_t\) at fixed \(\sum_t x_t\), which contains both effects and does not separate them. Below the Hill inflection at \(a = K\left(\frac{n-1}{n+1}\right)^{1/n}\) the curve is convex and the sign flips: bursting wins, because a flat budget never clears threshold.
Note the default calibration. Recentre K sets \(K\) to the always-on weekly spend, which places always-on exactly at half saturation, the most flattering point on the curve for it. Move \(K\) to see how much of the gap that assumption is carrying.
The budget-equivalent gap solves for the flat weekly spend whose cumulative response matches the stop-start schedule, then reports the difference against the real budget. Scaling the budget by the awareness percentage instead would assume response is linear in spend, which is the assumption this model exists to reject.
Fitting. \(V_{\max}\) enters linearly, so for any \((\alpha, K, n)\) it has a closed-form least squares solution and only three parameters are searched: a coarse grid, then three rounds of local refinement.
$$ \hat{V}_{\max} = \frac{\sum_t h_t\, y_t}{\sum_t h_t^{2}}, \qquad h_t = \frac{a_t^{\,n}}{K^{n}+a_t^{\,n}} $$Intervals resample residuals \(e_t = y_t - \hat{r}_t\) and refit 40 times. Real MMM estimates these jointly across every channel with priors and full posterior sampling; this is the same transform under a much smaller hammer.