On this page
- Origin
- Core formula
- Types of adstock transformation
- 1. Geometric adstock
- 2. Delayed adstock
- 3. Weibull CDF adstock
- 4. Weibull PDF adstock
- 5. Binomial adstock
- 6. Causal convolution / carryover (LightweightMMM)
- Adstock and saturation: order of operations
- How major MMM tools implement adstock
- Benchmarks by channel type (as-of 2024)
- What practitioners report
- Retail/ecommerce considerations
- Research frontier (2025–2026)
- Contradictions
- Key terms
Adstock
Adstock
Adstock is the mathematical transformation applied in Media Mix Modeling (MMM) to account for the delayed and decaying effect of advertising spend on consumer behaviour. Coined by British media analyst Simon Broadbent in 1979, adstock captures the insight that a single advertising exposure does not exhaust its effect in the period it runs — it builds awareness and recall that carry forward, decaying over time, until a subsequent exposure refreshes the effect. For ecommerce retailers, correctly specifying adstock is the difference between crediting all of a brand TV campaign's impact to its airing week and distributing that impact across the 8–12 weeks during which it actually influences purchases.
Origin
Simon Broadbent introduced adstock in "One Way TV Advertisements Work," Journal of the Market Research Society, Vol. 23, No. 3, pp. 139–166, 1979 (Wikipedia, sourcing Broadbent 1979). His framework translates advertising into a cumulative process and proposes regressing sales on accumulated (adstocked) advertising rather than on raw spend. A peer-reviewed revisit appeared in Applied Economics in 2024 — "Adstock Revisited" (Taylor & Francis, 2024) — the first academic reworking of the foundational framework in several decades.
Core formula
The standard recursive form, as stated in all major MMM tooling documentation (Robyn, PyMC-Marketing, Meridian, Recast):
A_t = E_t + λ · A_(t-1)
where:
- A_t = adstocked advertising value in period t
- E_t = raw advertising exposure (spend, GRPs, impressions) in period t
- λ ∈ (0, 1) = decay/retention rate (also called "adstock rate" or "theta")
- A_t with λ = 0 → each period is fully independent; λ approaching 1 → effects persist indefinitely
Half-life of adstock: h = log(0.5) / log(λ). Example: λ = 0.5 → half-life 1 period; λ = 0.7 → half-life ~2 periods; λ = 0.9 → half-life ~7 periods (Recast, 2024-10-04).
Terminology warning (Recast, 2024-10-04): some practitioners define "decay" as 1 − λ, so a "70% carryover" model is the same as a "30% decay" model. Always confirm convention with the analyst before interpreting parameters.
Types of adstock transformation
All major open-source MMM libraries implement multiple adstock variants (PyMC-Marketing stable docs; Meta Robyn docs, 2024; Google Meridian docs 2026-07-08):
1. Geometric adstock
Single parameter θ (or α, or lambda — convention varies). A_t = x_t + θ · A_(t-1). Most common default. The peak effect always occurs at period 0 (the period of exposure). Recommended by Robyn docs when communicating results to non-technical stakeholders. Robyn's bounds by channel type:
- TV: θ ∈ [0.3, 0.8]
- OOH / Print / Radio: θ ∈ [0.1, 0.4]
- Digital (display, paid social): θ ∈ [0, 0.3]
- Paid search: θ ∈ [0.1, 0.4] (effect concentrated near click date, lower end of range in practice)
2. Delayed adstock
Adds a delay parameter θ (distinct from decay) such that the peak effect occurs after θ periods, not at period 0. Available in PyMC-Marketing as DelayedAdstock. Relevant for channels where the response mechanism has a natural lag: direct mail (peak response observed at ~3 weeks post-drop in a BBC TV licence example, Recast 2024-10-04), magazine advertising (circulation build takes weeks), and OOH in complex purchase cycles.
3. Weibull CDF adstock
Two parameters: lam (scale) and k (shape). Produces C-shape or S-shape decay. The peak value always stays at period 0 — no lagged peak. More flexible than geometric across the full decay path but more computationally expensive (Robyn docs; PyMC-Marketing docs). Supported by an Ekimetrics & Annalect joint study showing Weibull survival function "better fits modern media activity such as Facebook" (cited in Robyn docs, undated).
4. Weibull PDF adstock
Two parameters. Enables a lagged peak (peak effect occurs after period 0 when shape ≥ 1), enabling a true hump-shaped carryover curve. When shape > 2: hump-shaped; shape = 1: reduces to exponential decay. Requires more iterations to fit reliably. Available in Robyn and PyMC-Marketing.
5. Binomial adstock
Alternative flexible parametrisation available in PyMC-Marketing (v1.0.0, 2026-08-07) and in Google Meridian as a weight function option. Meridian's binomial weighting puts more weight on the latter part of the lag window — useful for channels where carryover is more persistent and builds over time.
6. Causal convolution / carryover (LightweightMMM)
Google's predecessor library (LightweightMMM, now superseded by Meridian) offered a "carryover" variant using a weighted average over a lag window rather than the recursive formula. Meridian formalises this as: Adstock(x_t, ..., x_(t-L); α) = [Σ_{s=0}^L w(s;α) · x_(t-s)] / [Σ_{s=0}^L w(s;α)] with L = 8 weeks default (Google Meridian docs, 2026-07-08). Normalised, so the adstocked value cannot exceed the maximum raw input.
Adstock and saturation: order of operations
Adstock models carryover (timing); the Saturation Curve (Hill function) models diminishing returns (volume). Both are required for an unbiased MMM: without both, a linear coefficient mistimes and overstates every channel (ResearchGate preprint, 2025).
The standard pipeline is adstock first → Hill saturation second. This is the default in Google Meridian (hill_before_adstock = False). Meridian's Reach & Frequency model reverses this (hill_before_adstock = True) because the saturation function applies to reach before carryover accumulates (Meridian docs, 2026-07-08).
Recast (2024) notes that saturation should be applied before normalising the adstock series — the order of normalisation within the pipeline is a separate implementation detail from the adstock-vs-Hill sequencing question.
The Hill function in Meridian: Hill(x; ec, slope) = 1 / (1 + (x/ec)^(−slope)), where ec is the half-saturation point (Hill(ec) = 0.5) and slope controls the S-vs-concave shape. Default prior assumes concave (slope ≤ 1). S-shaped curves (slope > 1) can cause budget optimisation convergence issues (Meridian docs).
How major MMM tools implement adstock
| Tool | Adstock types | Estimation method | Uncertainty on λ |
|---|---|---|---|
| Meta Robyn | Geometric, Weibull CDF, Weibull PDF | Ridge regression + Nevergrad evolutionary algorithm | None (point estimate) |
| Google Meridian | Geometric, Binomial | Bayesian MCMC | Full posterior |
| PyMC-Marketing | Geometric, Delayed, Weibull CDF, Weibull PDF, Binomial | Bayesian MCMC (NUTS) | Full posterior |
| Recast | Geometric (primarily) | Bayesian MCMC | Full posterior |
(Sources: Meta Robyn docs 2024; Meridian docs 2026-07-08; PyMC-Marketing stable docs 2026; Recast blog 2024-10-04; Nuso.co.uk comparison ~2025)
Key difference: Robyn does not quantify uncertainty over adstock parameters — a meaningful limitation when purchase cycles are seasonal. For ecommerce fashion/apparel brands, where the same channel's effectiveness varies between peak and off-peak, Bayesian posteriors over λ are informative (Nuso.co.uk, ~2025).
Benchmarks by channel type (as-of 2024)
| Channel | Typical θ range | Half-life |
|---|---|---|
| TV / CTV / streaming | 0.3 – 0.8 | 2 – 8 weeks |
| OOH / Print / Radio | 0.1 – 0.4 | — |
| Display / Paid social | 0 – 0.3 | 1–3 days |
| Paid search | 0.1 – 0.4 (often lower end) | <1 week |
| Direct mail / Magazine | Weibull recommended; geometric underestimates | Peak at 2–4 weeks post-drop |
| Email / Push notification | Fast decay expected (~0–0.3); treated as organic_vars in Robyn | 24–48 hours |
(Sources: Robyn docs 2024; Recast 2024-10-04; PyMC-Marketing docs 2026)
All benchmarks are starting ranges for prior elicitation, not ground-truth values. Channel-level adstock must be estimated from data rather than assumed (fusepoint, 2026-01-10; Recast, 2024).
What practitioners report
- Manual adstock selection is error-prone: choosing parameters without data-driven estimation allows analysts to shape results to what they want to see — e.g., inflating TV effectiveness by setting θ too high. Solutions: evolutionary algorithms (Robyn's Nevergrad), or Bayesian MCMC (PyMC-Marketing, Meridian, Recast) (Recast, 2024-10-04).
- Weibull is not always longer than geometric: A numerical example (Forecastegy, 2022) shows that Weibull (shape=0.5, scale=0.5) decays faster than geometric (θ=0.9) — practitioners who assume Weibull always implies longer effects would be wrong.
- Adstocks above 0.9 are rare in practice because of implausibly long tails (Recast, 2024).
- Bolt case study (PyMC Labs, August 2023): Bolt (ride-hailing) implemented Bayesian MMM with PyMC-Marketing in production, including adstock estimation. Published on Bolt Engineering blog and presented on PyMC Labs YouTube channel. No fashion-retail specific case study with adstock parameters was surfaced in this research run — a gap.
- Fashion/apparel purchase cycles are longer than FMCG, which extends the meaningful half-life of TV/OOH adstock for retail brands. Fashion MMM practitioners should not inherit digital-only benchmarks (Recast, 2024; secondary inference).
Retail/ecommerce considerations
- Email and push notifications: Robyn classifies these as
organic_varsand applies adstock + saturation transformations identically to paid media. Given open-rate concentration within 24–48 hours, low decay rates (θ ≈ 0.1–0.2) are expected (Robyn docs, 2024). - Seasonal ecommerce: Robyn explicitly notes that "eCommerce businesses can have a revenue impact several days prior to holiday as items need to be delivered before holiday" — recommending custom holiday event windows. This affects how adstock accumulation is interpreted around peak periods.
- Paid search vs. social spend reallocation: MMM models with accurate adstock and saturation typically recommend shifting spend from social to search, because social channels reach saturation faster and have shorter adstock half-lives — a pattern documented in the ResearchGate preprint (2025) ecommerce retailer example.
Research frontier (2025–2026)
- Google Meridian (September 2025 update): Enhanced decay functions extended to cover pricing, promotions, brand recall, and longer-term upper-funnel effects — not just paid media.
- PyMC-Marketing v1.0.0 (2026-08-07): Reached first stable major version; added BinomialAdstock as a fifth type; causal discovery notebooks added.
- NNN paper (arXiv:2504.06212, April–June 2025): First neural architecture specifically designed to replace parametric adstock in MMM. Uses Transformer self-attention to model temporal dependencies from data, bypassing pre-specified decay forms. Not yet integrated into any major open-source MMM tool. Argues parametric adstock "typically lose[s] identifiability from the baseline beyond a few months" and cannot handle time-varying response curves (creative quality, targeting changes).
- "Adstock Revisited" (Applied Economics, 2024): First peer-reviewed academic revisit of Broadbent's 1979 framework in a top economics journal in several decades. Full text paywalled; existence confirmed via fusepoint (2026-01-10).
Contradictions
Weibull implies longer carryover than geometric — Robyn docs and the broader practitioner consensus treat Weibull as the "more flexible, often longer-tailed" option (Robyn docs, 2024). A numerical Python example by Mario Filho (Forecastegy, 2022-12-27) demonstrates that Weibull (shape=0.5, scale=0.5) produces faster decay than geometric (θ=0.9) — the direction of the difference depends entirely on the specific parameter values chosen.
Adstock is applied before saturation (default) — Google Meridian's default order is Adstock first, Hill second (hill_before_adstock = False) (Meridian docs, 2026-07-08). Meridian's own Reach & Frequency model reverses this (hill_before_adstock = True). Recast (2024) adds that saturation should be applied "before normalising the adstock series" — referring to a different normalisation step, not the Adstock-vs-Hill sequence.
Robyn uses MCMC — Robyn uses Nevergrad evolutionary algorithm + ridge regression, not Bayesian MCMC (Robyn docs, 2024). PyMC-Marketing and Meridian use MCMC and produce full posterior distributions over adstock parameters. The practical implication: Robyn returns point estimates for λ, not uncertainty ranges.
Key terms
| Term | Meaning |
|---|---|
| Adstock / carryover | The lagged, decaying effect of advertising in subsequent periods |
| Retention rate (λ, θ, α) | Fraction of prior period's adstocked effect carried forward; higher = slower decay |
| Decay rate | Often defined as 1 − λ; confirm convention before use |
| Half-life | Number of periods for the adstock effect to halve: h = log(0.5) / log(λ) |
| Hill function | Saturation curve applied after adstock; models diminishing returns with spend |
| ec (half-saturation point) | Spend level at which Hill(x) = 0.5; controls where diminishing returns kick in |
| Weibull PDF adstock | Adstock variant enabling a lagged peak (peak occurs after period 0 when shape ≥ 1) |
| Nevergrad | Meta's gradient-free evolutionary optimisation library used in Robyn |
| NNN | Neural Network for Marketing Measurement (arXiv 2025) — proposed parametric-free replacement for adstock |