Marketing mix modelling is a technique from the era of television and print that became newly relevant for an unexpected reason: it never needed to know who anyone was. It works entirely on aggregate data, which makes it immune to exactly the privacy changes that broke user-level tracking.
It is also routinely oversold. This is what it takes, what it answers, and when you should not attempt one.
What is a marketing mix model?
A marketing mix model uses statistical regression on aggregate historical data to estimate how much each marketing input contributed to an outcome such as sales.
In plain terms: you assemble a table of weekly figures — sales, spend per channel, price, seasonality, anything else that plausibly matters — and fit a model that explains the variation in sales using the other columns. The coefficients are the estimated contributions.
What does it actually require?
Four things, and the third is where most attempts fail.
Enough history. Two to three years of weekly observations is the common working minimum. Fewer observations than variables is not a model; it is arithmetic that always fits.
Genuine variation in spend. This is the binding constraint, and it is under-appreciated. If a channel's budget has been broadly flat for two years, there is no variation for the regression to learn from, and the model cannot distinguish that channel's effect from the baseline. Models are informative in proportion to how much the inputs actually moved.
Non-marketing drivers. Price, promotions, distribution changes, competitor activity, weather in weather-sensitive categories, and seasonality. Omitting these is the single most common failure: whatever moved at the same time as spend gets credited to spend.
Someone with judgement. Not necessarily a data scientist. Someone who knows the business well enough to notice that a coefficient is implausible and to know what else was happening in the week the model finds surprising.
The data table
The whole exercise rests on one table. Columns, at minimum:
| Column | Notes |
|---|---|
| Week | Consistent week boundaries throughout |
| Sales or revenue | The outcome being explained |
| Spend per channel | One column per channel, consistently defined |
| Price index | Average selling price or discount depth |
| Promotion flag | Whether a promotion ran that week |
| Seasonality | Week of year, holidays, category-specific peaks |
| Distribution | Store count, market coverage, if relevant |
| Competitor activity | Even a crude proxy beats omitting it |
Assembling this honestly takes longer than fitting the model, and it is where the value is. Teams frequently discover during assembly that two systems disagree about what revenue was — which is a finding worth the effort on its own.
Two things every model must handle
These two adjustments are what separate a marketing mix model from an ordinary regression, and skipping them produces confidently wrong coefficients.
Adstock, or carryover. Advertising affects sales beyond the week it ran. Money spent in week one produces some effect in weeks two and three. A model that ignores this attributes a delayed effect to whatever ran later.
Diminishing returns, or saturation. The tenth thousand spent in a week does less than the first thousand. A model assuming a straight line will systematically overstate what happens if you double a budget — which is usually the exact question being asked.
Both are standard in any serious MMM package. Neither is optional.
Can you do this without a specialist?
Partly, and being clear about which parts matters.
What a capable analyst can do with an open-source package: assemble the data table, fit a model with sensible defaults, produce contribution estimates, and run a simple budget scenario.
What genuinely needs experience: choosing which variables belong, deciding how to treat a structural break such as a rebrand or a market entry, judging whether a coefficient is plausible, and quantifying uncertainty honestly rather than presenting a point estimate as fact.
The packages have made the statistics accessible. They have not made the judgement accessible, and a model built without it will produce numbers — which is the danger, because numbers get acted on.
Validate against something the model did not see
A model that fits history well can still predict the future badly. Two checks are worth insisting on before anyone acts on the output.
Holdout validation. Fit the model on all but the most recent few months, then check whether it predicts those months. A model that fits everything it has seen and fails on what it has not is describing noise.
Experimental validation. Run an incrementality test on one channel and compare the result against what the model claims for it. Where they agree, confidence in both rises considerably. Where they disagree, the experiment wins — it measured causation directly.
That second check is the most valuable thing you can do with a mix model, and the most often skipped.
When not to build one
Three situations where the effort is better spent elsewhere.
Not enough history. Under two years of consistent data, the model will be unstable and the estimates will swing with each refresh.
Flat spend. No variation, nothing to learn. Deliberately varying budget for a period is a legitimate precursor, but that is an experiment, not a model.
One dominant channel. If 90% of spend is in one place, a model has almost nothing to disentangle. A holdout test on that channel answers the real question faster and more directly.
Where it fits
MMM answers a specific question: how should budget be split across channels over the coming months. It is slow, aggregate and approximate, and for that question it is the best tool available in a privacy-constrained environment.
It does not replace platform reporting for in-channel optimisation, and it does not replace experiments for causal evidence. Used for either, it produces confident nonsense; used for allocation and validated against an experiment, it is genuinely useful. The full stack is described in marketing measurement in a privacy-first world.