Marketing mix modeling (MMM) is a statistical method that estimates how much each of your marketing channels, and everything else that moves sales, such as price, promotions, seasonality and the economy, contributed to your results, using aggregate data over time rather than tracking individual users. In practice it’s a regression of weekly (or daily) sales on weekly spend by channel plus a set of control variables, with a couple of transformations that let advertising work with a delay and with diminishing returns. The output is a decomposition of sales into a baseline and the incremental contribution of each channel, which you can turn into a return on investment per channel and a forecast of what would happen if you moved budget around.
The question it answers is the one every marketing budget eventually runs into: “If I spent this money differently, what would happen to sales?” Platform dashboards can’t answer that, because each platform grades its own homework, and click-based attribution can’t either, because it only sees the people it can track and it can’t tell you what would have happened without the ad. I’ve built marketing mix models for companies like Monzo Bank, Booking.com, Time Out and The AA, and advised Google, Appsflyer and Recast on MMM, and in my experience the method is less magical and more useful than either its fans or its critics make out. I’ll show you how it works end to end, and you can fit a real model on two years of (synthetic) data further down this page.
What MMM stands for, and the names it goes by
MMM stands for marketing mix modeling, spelled marketing mix modelling in the UK. You’ll also hear media mix modeling, which is the same method applied with a narrower scope (just paid media, without price, distribution or product), and the term Google’s researchers used in their influential 2017 papers. I’ve written up the difference properly in media mix modeling vs marketing mix modeling, but the short version is that they’re the same regression, and which name people use mostly tells you where they learned it. Older practitioners, especially in the UK and in consumer packaged goods, tend to call the whole discipline “econometrics”, which is the branch of statistics it comes from (see marketing econometrics).
The “marketing mix” part goes back to Harvard’s Neil Borden, who popularised the phrase for the blend of decisions (price, product, promotion, distribution and so on) a marketer has to mix together, and later to E. Jerome McCarthy’s four Ps. The modeling part came from econometricians measuring advertising with distributed lag regressions in the 1950s and 1960s, the adstock idea usually credited to Simon Broadbent’s 1979 paper, and the scanner data boom that made weekly sales data cheap for consumer goods brands. I’ve written the full history of marketing mix modeling separately, with an interactive timeline, because it explains a lot about why the method looks the way it does.
Why marketing mix modeling came back
For most of the 2010s, MMM was something big consumer brands bought from consultancies once a year, while digital marketers used click-based attribution and platform reporting instead. That changed when the tracking that attribution depends on started to break. The EU’s GDPR applied from May 2018 and made consent a prerequisite for most tracking. Then Apple’s App Tracking Transparency framework came into force with iOS 14.5 on 26 April 2021, requiring apps to ask permission before tracking users across other companies’ apps and websites, and many people declined. Within months, a large share of the conversions Facebook and other ad platforms used to attribute to ads disappeared from view, even though the sales themselves didn’t.
The cookie story is messier than people remember. Google spent years promising to remove third-party cookies from Chrome, then announced in 2025 that it would keep its current approach to cookie choice instead, and on 17 October 2025 said it was retiring most of the Privacy Sandbox APIs that were meant to replace them. However, Safari already blocks third-party cookies by default, Firefox blocks known trackers by default, consent banners have shrunk the trackable audience, and the walled gardens share less user-level data than they used to. The upshot is that user-level attribution is permanently incomplete, and a method that only needs aggregate spend and sales totals looks a lot more attractive than it did ten years ago.
The other half of the comeback is that the tooling became free. Meta open-sourced Robyn (officially released in November 2021), Google released LightweightMMM and then replaced it with Meridian (in limited availability from March 2024 and open to everyone from 29 January 2025), and PyMC Labs built PyMC-Marketing. It’s worth keeping in mind that two of those come from the biggest sellers of advertising in the world, which is one reason I always want a model’s results checked against an experiment. However, a technique that used to require a consultancy and a six-figure budget can now be run by one analyst with a laptop, which is how I ended up teaching it to marketers rather than just statisticians.
How marketing mix modeling works, end to end
Every MMM project I’ve worked on, whether it was built in Excel or in a Bayesian library, follows the same five steps. The tools change how much of each step is automated, but they don’t change what has to happen.
1. Collect a weekly table of sales, spend and the things that also move sales
The raw material is a table with one row per week (or day) and one column per variable: the outcome you care about (revenue, orders, sign-ups), spend or impressions for each channel, and the non-marketing drivers, such as price, promotions, holidays, competitor activity, distribution, stock-outs and macro conditions. Two years of weekly data is the usual minimum, and more important than length is variation: if a channel’s spend never changes, the model has nothing to learn from. This step takes most of the time on a real project, because the data lives in a dozen systems with different date boundaries and definitions. The MMM data requirements guide has a checklist and a sufficiency checker, and the Northstar worked example shows the kind of mess you actually get handed.
2. Transform spend so it behaves like advertising does
Advertising doesn’t work like a light switch. Some of this week’s effect shows up next week and the week after (carryover), and the tenth thousand dollars buys less than the first (diminishing returns). MMM handles the first with adstock, a running total where each week keeps a share of last week’s effect. In its simplest geometric form, with retention rate between 0 and 1:
The second is handled with a saturation curve, most often the Hill function, where is the spend that achieves half the maximum effect and controls the shape:
These are assumptions about how advertising works, not facts the data hands you, and different choices can fit the data about equally well while telling different stories. That’s the most important thing to understand about MMM, and the model below will let you see it for yourself.
3. Model sales as baseline plus transformed media
The core model is a regression. Sales in week are explained by a baseline (an intercept, a trend and seasonality), the control variables, and the transformed media for each channel , each with its own coefficient :
The classic way to estimate it is ordinary least squares, often on log-transformed data (see the log-log model). Robyn uses ridge regression and searches thousands of adstock and saturation settings automatically, while Meridian and PyMC-Marketing are Bayesian, estimating the transformations and coefficients together and letting you put priors on them. However, the structure is the same in all of them.
4. Decompose sales into baseline and incremental contributions
Once you have the coefficients, you can multiply each one back through its variable to see how much of each week’s sales the model attributes to it. The sum of the channel pieces is the incremental sales from marketing; whatever comes from the intercept, trend and seasonality is the baseline, the sales you’d have had without any advertising. This decomposition is the famous stacked chart in every MMM deck, and it’s the thing finance actually wants to see.
5. Optimise: response curves and budget scenarios
Finally, because each channel has its own saturation curve, you can ask what the next dollar would do in each one. The slope of the curve at your current spend is the marginal ROAS, and, setting aside minimum and maximum spend constraints, a budget is efficient when the marginal return is the same in every channel. Budget allocation tools shift money from channels with low marginal returns to channels with high ones, inside whatever constraints you set, and scenario planning compares a handful of realistic plans rather than trusting a single “optimal” answer.
Fit a real marketing mix model in your browser
The widget below fits an MMM on the practice dataset from the Vexpower course: 104 weeks of synthetic revenue, three channels and a promotion flag. Every time you move a slider, it re-applies adstock and saturation, refits the regression and redraws the decomposition. Start by looking at the fit, then switch seasonality off and watch what happens to video.
The thing I want you to notice is how little the fit statistics move compared with the story. Without seasonality, R² collapses to about 0.2, but the bigger problem is that the regression hands the annual cycle to whichever channel happened to line up with it, and video comes out negative. With seasonality in, R² stays between roughly 0.87 and 0.94 across the whole retention range, yet video’s ROI falls from about 0.65 to under 0.3 as you push carryover up, and at 90 percent retention search goes negative. Switching on a saturation curve for search at 1× barely moves R² at all, while search’s ROI nearly doubles and the media share of revenue jumps from about a fifth to nearly a third, because a curve that bends means the model credits search with a big chunk of revenue at spend levels below anything in the data. In case you’re wondering which setting is right, this data was generated with no carryover and no saturation at all (it’s a straight linear recipe, which is why 0 percent retention fits best here), and pressing the answer key button shows how far off you are. On your own data you never get that button, and real advertising does carry over and saturate, which is why the rest of this page spends so much time on validation and experiments.
What you get out of a marketing mix model
A finished MMM gives you five things, and it helps to be clear which one you’re actually using, because they have different levels of reliability.
- Decomposition: Weekly sales split into baseline, each channel, promotions and other drivers. Good for understanding history and for explaining what happened in a particular quarter.
- Contribution: The total incremental sales the model credits to each channel over a period, usually also shown as a share of sales.
- ROI or iROAS: Contribution divided by spend, the average incremental revenue per dollar in each channel (strictly that’s incremental ROAS; ROI proper subtracts the spend and usually works on margin rather than revenue, so it’s worth checking which one a deck means). This is what most people mean by “the MMM result”, and it’s an average over the spend levels you actually had (see incrementality for why “incremental” matters).
- Response curves: For each channel, predicted contribution at different spend levels, which tells you where the next dollar is worth less than the last one.
- Budget scenarios: Predicted outcomes for alternative plans, which is where the model turns into a decision.
In my experience, the further down that list you go, the more the result depends on the model’s assumptions rather than the data. The decomposition of the past is mostly constrained by what actually happened, while a response curve at double your historical spend is an extrapolation of a shape you assumed. Even the contribution figure carries a hidden extrapolation, because it’s measured against zero spend, and most channels never went anywhere near zero in the data, so the shape of the curve below your lowest observed week (which the data says almost nothing about) decides a lot of the answer. I’d much rather show a CFO a range of outcomes for three realistic plans than a single optimized budget to the nearest dollar, and the communicating MMM results guide has a decision memo template for exactly that.
What marketing mix modeling can’t do
MMM is observational. It learns from how sales moved when your spend moved, and if your spend moved for reasons that also affect sales, the model can’t tell the two apart. The classic example is spending more in the run-up to Christmas: sales and spend rise together, and unless seasonality is modeled well, the model gives the ads credit for the season. The same problem shows up when budgets are set as a percentage of last month’s sales, or when two channels always launch together. David Chan and Mike Perry’s 2017 Google paper, Challenges and Opportunities in Media Mix Modeling, is still the best summary of these issues: limited data, correlated inputs and the selection bias that comes from spend responding to demand.
There are some things it simply isn’t built for. It can’t tell you which ad creative, keyword or audience worked, because the data is aggregated to channel-week level; it can’t measure a channel that never varied; and it struggles with small channels whose effect is smaller than the week-to-week noise in sales. It’s also slow, since it needs months of data to see a change, so it’s a poor tool for daily campaign optimization. Finally, it assumes the future looks like the past, which is a strong assumption after a price change, a new competitor or a pandemic. It’s also worth knowing that the usual validation checks only go so far: a model that predicts held-out weeks well has shown that it forecasts total sales, not that its split of credit between channels is right, because a wrong split can forecast just as well when the channels move together. That’s why I treat MMM as one instrument among several, and why experiments matter so much for the channels you’re about to bet on.
MMM vs multi-touch attribution vs experiments
People often frame this as a choice, but the three methods answer different questions and are strongest in combination (the marketing measurement framework page has a selector that matches the method to the question). Multi-touch attribution follows individual users and splits credit for each conversion across the ads they saw, which makes it fast and granular but blind to anything it can’t track and prone to crediting ads for sales that would have happened anyway. Experiments, such as geo lift tests, conversion lift studies and holdouts, are the closest thing marketing has to ground truth, but each one answers one question about one channel at one moment.
| Marketing mix modeling | Multi-touch attribution | Experiments (geo, lift, holdout) | |
|---|---|---|---|
| Data | Aggregate weekly or daily totals | User-level clicks and impressions | Treatment vs control groups |
| Causal? | Only if the model’s assumptions hold | No, it assigns credit by rules or correlations | Yes, by design |
| Channels covered | All, including TV, outdoor, offline | Trackable digital only | One channel or campaign at a time |
| Baseline, price, seasonality | Yes | No | Controlled by the design |
| Speed | Months of history, refreshed monthly or quarterly | Near real time | Weeks per test |
| Privacy exposure | None, no user data | High | Low to moderate |
| Best for | Budget allocation across channels | Within-channel optimization | Validating or calibrating a specific effect |
The approach I recommend is to use MMM for the cross-channel budget question, experiments to check the channels where the money and the uncertainty are biggest, and attribution for day-to-day optimization inside a channel. When a well-run experiment and the model disagree, I’d usually side with the experiment, after checking that both are measuring the same thing (an experiment measures one channel over a few weeks at the spend level you tested, while the model’s ROI is an average over two years), and feed it back into the model as a prior or a calibration target, which is what calibrating MMM with experiments covers. I’ve also written a fuller comparison in MMM vs multi-touch attribution.
The data a marketing mix model needs
For a first model, this is the list I’d ask for, at weekly granularity and covering at least two years:
- Outcome: Revenue, orders or another KPI that matches the decision, from the system finance trusts.
- Media: Spend for every paid channel, plus impressions or GRPs where spend is a poor proxy for exposure (TV, video, outdoor).
- Price and promotions: Average price or discount depth, promotion flags, sale periods.
- Calendar: Holidays, events, known seasonality, launches.
- Distribution and supply: Store counts, stock-outs, website outages.
- External factors: Competitor activity where known, macro indicators that matter for your category, weather for weather-sensitive products.
- Experiments: Any past lift or geo test results, with dates, so they can calibrate the model.
The most common problem isn’t missing columns but channels that move together, spend that never varies and definitions that changed halfway through (a new attribution window in the revenue figure, a channel renamed in the spend export). If you can break the data down by region, do it, because a geo-level model has many more observations to learn from, which is the argument of Google’s geo-level hierarchical MMM paper.
Bayesian vs frequentist marketing mix models
The original MMMs, and the model on this page, are frequentist: you choose the transformations, fit a regression and read off point estimates with standard errors. That’s transparent and fast, and you can do it in Excel, but it struggles when you have more variables than the data can support, and it gives you no principled way to use what you already know from experiments or industry benchmarks. Robyn is still frequentist, but it uses ridge regression, which shrinks the channel coefficients toward zero to stabilize correlated channels (a penalty that works a lot like a sceptical prior), plus an evolutionary search over the transformation settings, so in practice it sits somewhere between the two camps.
Bayesian MMMs, such as Meridian and PyMC-Marketing and the approach laid out in Jin et al. (2017), put prior distributions on every parameter, estimate adstock and saturation alongside the coefficients, and return a full posterior distribution, so uncertainty comes out naturally as a range. The priors are a feature when they come from real evidence, like a lift test, and a liability when they’re defaults nobody examined, because with two years of weekly data the prior can easily dominate. I explain how to set and check them in Bayesian marketing mix modeling.
The marketing mix modeling tools on offer
You have three broad options: open-source libraries you run yourself, SaaS platforms, and consultancies or agencies. These are the main open-source libraries as of October 2026:
| Library | Maintainer | Language | Method | Status |
|---|---|---|---|---|
| Meridian | Python | Bayesian, geo-level, reach and frequency | Active; latest 2.1.0 (September 2026), JAX the default backend since 2.0 | |
| Robyn | Meta | R, Python beta | Ridge regression with automated hyperparameter search | On CRAN (3.12.1, July 2025), development slower since mid-2025; Python port in beta |
| PyMC-Marketing | PyMC Labs | Python | Bayesian, flexible adstock and saturation, lift-test calibration | Active; 1.0 (August 2026) made the multidimensional MMM the only MMM class; latest 1.3.0 |
| LightweightMMM | Python | Bayesian (NumPyro) | Archived January 2026; Google recommends Meridian | |
| Orbit | Uber | Python | Bayesian time-series forecasting with time-varying coefficients | Maintained (1.1.5.1, May 2026), but a forecasting library rather than an MMM package |
The open-source MMM libraries page compares them in detail, and marketing mix modeling software covers the commercial vendors. If you’re weighing up whether to build in-house or pay someone, build vs buy has a cost calculator. For learning, I’d start in a spreadsheet or Python from scratch before reaching for a library, because the libraries automate the decisions you most need to understand.
How to start marketing mix modeling this month
You don’t need a vendor or a data science team to get going, and a rough first model is more useful than a perfect plan. This is the sequence I’d follow:
If you’d like to practise on a case before using your own data, the marketing mix modeling example walks through the course’s invented Northstar brand from brief to decision memo, and the measurement plan page will help you write the brief. The full Vexpower marketing mix modeling course is 30 lessons built around that same case, with simulators for adstock, saturation, experiments and budget decisions. In my experience the first model you build will be wrong in instructive ways, and the habit of checking it against experiments and business sense is worth more than any particular library.
