What is adstock?
What does adstock do in a model?
A marketing-mix model, or MMM, is a statistical method that estimates how marketing inputs contribute to business results using aggregated data, without user-level tracking.
The raw input is spend per week. Adstock reshapes it. Instead of "this euro worked in week 1 only", the model lets part of its effect spill into the weeks after.
What is saturation, and why does it come with adstock?
Adstock is about time. Saturation is about volume. Each extra euro tends to buy less than the one before it. PyMC-Marketing offers adstock and saturation functions side by side, and ties saturation to diminishing returns in media investment1.
The pair matters for budget decisions. Marginal ROAS is the return on the next euro, not the average. Saturation is where a good average return and a weak marginal return come from.
Why does it matter if you buy or read an MMM?
Because the settings change the answer. The carry-over assumption decides which week and which channel gets credit. Two models on the same data can disagree if they treat it differently.
That is not a reason to distrust MMM. It is a reason to ask how the choices were made and to calibrate the model against a test where you can. PyMC-Marketing, for one, supports calibrating a model with lift tests1. For how MMM sits next to other methods, see MMM vs MTA vs incrementality tests.
For ZFD: Our view is that carry-over and saturation settings are assumptions, and a report should show how much the results move when they change.
Worked example
Easily confused with
Adstock vs Saturation
Diminishing returns on volume. Adstock is the effect over time.
Adstock vs Attribution window
A rule for how long a click or view can be credited in a report. Adstock is a modelling assumption about delayed effect.
Adstock vs Scale
In agency reports, usually shorthand for "increase budget or scope". It says nothing about carry-over.
FAQ

Is adstock the same as the attribution window?
No. An attribution window is a reporting rule. Adstock is an assumption inside a model about how an effect decays over time.
Do I need adstock if I only run short promotions?
The effect of an ad does not always end with the promotion. Whether it matters for your data is a modelling question.
Sources
- pymc-labs/pymc-marketing (GitHub README)Primary source
Let’s find what’s actually working.
Next step. Check what your reported return looks like on explicit assumptions. Use the Is your ROAS real? calculator.