Marketing Mix Modeling & Econometrics
Broadbent Adstock Decay & Hill Saturation Formula
Model marketing carryover A_t = X_t + lambda * A_{t-1}, adstock half-life -LN(2) / LN(lambda), steady-state stock X / (1 - lambda), and Hill S-curve diminishing returns.
Separate lagged ad carryover (Adstock) from diminishing marginal returns (Hill saturation)!
Modern Marketing Mix Models (MMM) avoid attributing 100% of TV, video, or upper-funnel paid-social spend to the exact week an impression airs. Simon Broadbent (1979) introduced Geometric Adstock A_t = X_t + lambda * A_{t-1} with retention decay parameter 0 < lambda < 1, implying Memory Half-Life t_half = -LN(2) / LN(lambda) periods and Sustained Steady-State Adstock A_ss = X / (1 - lambda) under constant weekly spend X! Feeding Adstock A_t into a Hill Saturation Response Lift_t = L_max * (A_t^s) / (K^s + A_t^s) (with half-saturation inflection K > 0 and slope s >= 1) captures both S-curve threshold effects and saturation!
Verify on Weekly_Spend X = 100 ($k, B2), Adstock_Decay lambda = 0.60 (B3), Max_Incremental_Lift L_max = 50.00 ($k, B4), Half_Saturation_Adstock K = 250.00 (B5), and Hill_Slope s = 2.0 (B6): Adstock Half-Life is -LN(2) / LN(0.60) = 1.3569 weeks; Sustained Steady-State Adstock is 100 / (1 - 0.60) = 250.00 (2.5x weekly spend!); and Steady-State Weekly Incremental Lift at A_ss = K = 250 hits exact half-maximum 50 * (250^2) / (250^2 + 250^2) = 25.00 ($k, Marginal ROAS = 0.25)!
| MMM Adstock & Hill Metric (X=100, lambda=0.60, L_max=50, K=250, s=2) | Formula | Verified Output |
|---|---|---|
| Carryover Half-Life (Weeks) | -LN(2) / LN(lambda) | 1.3569 weeks |
| Steady-State Adstock Pool (A_ss) | X / (1 - lambda) | 250.00 (vs 100 Weekly Spend) |
| Steady-State Hill Incremental Lift | L_max * A_ss^s / (K^s + A_ss^s) | 25.00 ($k — Exact Half-Max!) |
| Single-Burst Week-1 Lift (A_1 = 100) | 50 * 100^2 / (250^2 + 100^2) | 6.90 ($k Before Carryover Builds) |
Broadbent Adstock Half-Life & Sustained Steady-State Pool Formula
Validate 0 < lambda < 1 (when lambda = 0 there is zero carryover; when lambda >= 1 memory never decays).
=IF(OR(B3 <= 0, B3 >= 1), "Require 0 < lambda < 1", ROUND(-LN(2) / LN(B3), 4))Hill Saturation Incremental Lift at Steady-State Adstock Formula
In a shared Arte Sheets MMM planning workbook, let media-agency contributors propose alternative channel decay rates lambda via Suggester mode and compare steady-state lift before approving budget reallocations.
=LET(x_sp, B2, lm_d, B3, l_mx, B4, k_hs, B5, s_hl, B6, IF(OR(x_sp < 0, lm_d < 0, lm_d >= 1, l_mx <= 0, k_hs <= 0, s_hl <= 0), "Invalid MMM Input", LET(a_ss, x_sp / (1 - lm_d), ROUND(l_mx * (a_ss ^ s_hl) / ((k_hs ^ s_hl) + (a_ss ^ s_hl)), 2))))Try the example
Use the original values or change them to test your understanding.