Marketing Mix Modeling: How MMM Measures Channel Impact
Advanced4 minInnovialabs editorial team
In short
MMM is a statistical model that uses weekly channel spend and sales over a long period to estimate how much of your sales each channel drove, accounting for delayed ad effects, saturation and external factors.
What MMM is, in plain terms
Marketing Mix Modeling (MMM) is a regression model that explains sales through a set of drivers: spend in each ad channel, seasonality, prices, promotions, holidays and competitor activity. It does not look at individual users but at aggregated data over time, for example by week.
The model gives you:
- each channel's contribution to sales;
- ROI or ROAS per channel, including offline (TV, outdoor, radio);
- response curves showing how results change as budget grows;
- budget reallocation recommendations.
MMM's main strength is that it needs no cookies, clicks or user identifiers. That makes it resilient to privacy restrictions and useful for channels where the user journey cannot be tracked.
Two key effects: adstock and saturation
Adstock (carryover). Advertising works beyond the day it runs: some people buy a week or a month later. Adstock models this as a residual effect that decays over time. The simplest form is geometric decay:
adstock[t] = spend[t] + decay * adstock[t-1]
The decay parameter (between 0 and 1) shows how long the effect lasts. It tends to be larger for display and video than for search, but the model estimates it from the data.
Saturation (diminishing returns). Each additional dollar in a channel brings less than the previous one: the audience is finite and frequency rises. This is described with an S-shaped or concave curve, such as the Hill function. Saturation is what lets the model say "adding budget here no longer pays off, but there it still does."
Open-source tools
| Tool | Developer | Approach | Language |
|---|---|---|---|
| Meridian | Bayesian model, supports geo-level data and calibration through priors | Python | |
| Robyn | Meta | Regularized regression with automated hyperparameter search | R (a Python version exists) |
| PyMC-Marketing | PyMC community | Bayesian MMM on PyMC, highly customizable | Python |
All three are free but require an analyst with statistics experience. There is no magic button: quality depends on data preparation and validation.
Data requirements
- Target metric by week: sales, revenue, leads or new customers.
- Spend by channel for the same weeks, plus impressions or GRPs for offline where possible.
- Control variables: prices, discounts and promotions, seasonality and holidays, product availability, major external events.
- Enough history, usually several years of weekly data, so the model can see seasonality and different budget levels.
- Variation in spend. If a channel's budget never changes, the model cannot separate its effect from the baseline.
For small businesses with one or two channels and a short history, MMM often cannot produce reliable conclusions; experiments are more useful there.
How MMM complements attribution
| Attribution | MMM | |
|---|---|---|
| Data level | User, click, session | Aggregates over time |
| Offline channels | Barely visible | Included |
| Speed | Daily | Monthly or quarterly |
| Cookie dependency | High | None |
| Granularity | Campaigns, ads | Channels and broad groups |
In practice teams combine them: attribution for day-to-day campaign optimization, MMM for strategic budget allocation, and incrementality experiments (geo tests, lift tests) to calibrate the model and verify its conclusions.
Common mistakes
- Too little data or no variation, which produces unstable estimates.
- Missing key drivers, so promotion or seasonality effects get credited to ads.
- Trusting the output blindly without checking it against experiments and common sense.
- Building the model once and forgetting it. Markets change, and the model needs refreshing.