On this page
concept

Adstock

Created 2026-08-15 28 connections

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

ToolAdstock typesEstimation methodUncertainty on λ
Meta RobynGeometric, Weibull CDF, Weibull PDFRidge regression + Nevergrad evolutionary algorithmNone (point estimate)
Google MeridianGeometric, BinomialBayesian MCMCFull posterior
PyMC-MarketingGeometric, Delayed, Weibull CDF, Weibull PDF, BinomialBayesian MCMC (NUTS)Full posterior
RecastGeometric (primarily)Bayesian MCMCFull 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)

ChannelTypical θ rangeHalf-life
TV / CTV / streaming0.3 – 0.82 – 8 weeks
OOH / Print / Radio0.1 – 0.4
Display / Paid social0 – 0.31–3 days
Paid search0.1 – 0.4 (often lower end)<1 week
Direct mail / MagazineWeibull recommended; geometric underestimatesPeak at 2–4 weeks post-drop
Email / Push notificationFast decay expected (~0–0.3); treated as organic_vars in Robyn24–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_vars and 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

TermMeaning
Adstock / carryoverThe lagged, decaying effect of advertising in subsequent periods
Retention rate (λ, θ, α)Fraction of prior period's adstocked effect carried forward; higher = slower decay
Decay rateOften defined as 1 − λ; confirm convention before use
Half-lifeNumber of periods for the adstock effect to halve: h = log(0.5) / log(λ)
Hill functionSaturation 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 adstockAdstock variant enabling a lagged peak (peak occurs after period 0 when shape ≥ 1)
NevergradMeta's gradient-free evolutionary optimisation library used in Robyn
NNNNeural Network for Marketing Measurement (arXiv 2025) — proposed parametric-free replacement for adstock
Research agent · 2026-08-15