What is marketing mix modeling (MMM)? How it works, what it can and can't tell you

Marketing mix modeling estimates how much each marketing channel, and everything else that moves sales, contributed to your results, using only aggregate data over time. Here's how it works end to end, with a model you can fit in your browser.

Mike Taylor By Mike Taylor · Updated · 16 min read

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. Collect2. Transform3. Model4. Decompose5. Optimisesales, spend,controls by weekadstock +saturationregression ontransformed databaseline +channel effectsresponse curves,budget scenariosvalidate, calibrate with experiments, refresh with new data
The five stages of a marketing mix model, from raw weekly data to a budget recommendation. Source: Vexpower.

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 λ\lambda between 0 and 1:

At=xt+λAt−1A_t = x_t + \lambda A_{t-1}

The second is handled with a saturation curve, most often the Hill function, where KK is the spend that achieves half the maximum effect and ss controls the shape:

f(A)=AsAs+Ksf(A) = \frac{A^s}{A^s + K^s}

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 tt are explained by a baseline (an intercept, a trend and seasonality), the control variables, and the transformed media for each channel mm, each with its own coefficient βm\beta_m:

salest=β0+trendt+seasont+∑cγczc,t+∑mβmfm(Am,t)+εt\begin{aligned} \text{sales}_t = {} & \beta_0 + \text{trend}_t + \text{season}_t \\ & + \textstyle\sum_c \gamma_c z_{c,t} + \sum_m \beta_m f_m(A_{m,t}) + \varepsilon_t \end{aligned}

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.

Interactive
Fit a marketing mix model on 104 weeks of data

Choose how long each channel's effect lasts and whether it saturates, decide which controls go in, and the regression refits in your browser. Watch what happens to the decomposition, not just the fit.

Loading the practice data…
Search
Social
Video
Controls in the model:
R² (in-sample)
–
MAPE
–
Baseline share of revenue
–
Media share of revenue
–

Weekly decomposition: what the model says each week's revenue was made of

The top line is actual revenue; hover to see each component, and the gap between the stack and the line (the residual).

Revenue per 1 of spend over the two years (modelled ROI)
TermCoefficient± SEContributionShareROI
Ordinary least squares on the Vexpower practice CSV (104 synthetic weeks: revenue, search, social and video spend, a promotion flag). Adstock is geometric and normalised; saturation is a Hill curve with shape 1, its half-point set as a multiple of the channel's average adstocked spend. Seasonality is one annual sine/cosine pair. ROI here is modelled contribution divided by spend over the two years. The data is invented and was generated with known effects, which is the only reason an answer key exists. In real work there isn't one, so a high R² or a low MAPE tells you the model can reproduce history, not that its split of credit between channels is causal.

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.

csv
MMM practice dataset (104 weeks)The same synthetic weekly data the model above fits: revenue, search, social and video spend, and a promotion flag.
Download

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 modelingMulti-touch attributionExperiments (geo, lift, holdout)
DataAggregate weekly or daily totalsUser-level clicks and impressionsTreatment vs control groups
Causal?Only if the model’s assumptions holdNo, it assigns credit by rules or correlationsYes, by design
Channels coveredAll, including TV, outdoor, offlineTrackable digital onlyOne channel or campaign at a time
Baseline, price, seasonalityYesNoControlled by the design
SpeedMonths of history, refreshed monthly or quarterlyNear real timeWeeks per test
Privacy exposureNone, no user dataHighLow to moderate
Best forBudget allocation across channelsWithin-channel optimizationValidating 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:

LibraryMaintainerLanguageMethodStatus
MeridianGooglePythonBayesian, geo-level, reach and frequencyActive; latest 2.1.0 (September 2026), JAX the default backend since 2.0
RobynMetaR, Python betaRidge regression with automated hyperparameter searchOn CRAN (3.12.1, July 2025), development slower since mid-2025; Python port in beta
PyMC-MarketingPyMC LabsPythonBayesian, flexible adstock and saturation, lift-test calibrationActive; 1.0 (August 2026) made the multidimensional MMM the only MMM class; latest 1.3.0
LightweightMMMGooglePythonBayesian (NumPyro)Archived January 2026; Google recommends Meridian
OrbitUberPythonBayesian time-series forecasting with time-varying coefficientsMaintained (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.

Downloads

csv
MMM practice dataset (104 weeks, CSV)Synthetic weekly revenue, search, social and video spend and a promotion flag. The same data the in-page model fits.
Download

Frequently asked questions

What does MMM stand for in marketing?

MMM stands for marketing mix modeling (or marketing mix modelling in British spelling). Some people, including Google's 2017 research papers, call it media mix modeling. It is a statistical method, usually a regression, that estimates how much each marketing channel and other factors such as price, promotions and seasonality contributed to sales over time.

How much data do you need for marketing mix modeling?

A common rule of thumb is two to three years of weekly data, so roughly 100 to 150 observations, with enough variation in spend for each channel. The real constraint is variation rather than length: a channel whose spend never changes cannot be measured however many weeks you have. Geo-level data multiplies the observations and helps a lot.

What is the difference between MMM and multi-touch attribution?

Multi-touch attribution follows individual users' clicks and impressions and splits credit for each conversion between touchpoints. MMM uses aggregate weekly or daily totals and statistics instead, so it needs no user tracking, covers offline channels like TV and accounts for baseline sales, seasonality and price. Attribution is granular and fast but tends to credit ads for sales that would have happened anyway; MMM is privacy-safe and holistic but coarser and slower.

Is marketing mix modeling accurate?

A marketing mix model can fit historical sales very closely and still be wrong about which channel caused them, because channels often move together with each other and with seasonality. Accuracy in the sense of fit is easy to get; credible channel estimates need good controls, enough spend variation, validation on held-out data and ideally calibration against experiments such as geo tests.

How long does it take to build a marketing mix model?

A first model on clean data can be fit in a day with Robyn, Meridian or PyMC-Marketing. Most projects take several weeks because collecting, cleaning and agreeing on the data takes most of the time, and the model then needs reviewing and refreshing. Plan for a regular refresh, monthly or quarterly, rather than a one-off report.

Is marketing mix modeling free?

The main open-source libraries, Meta's Robyn, Google's Meridian and PyMC Labs' PyMC-Marketing, are free to use. The cost is the analyst time to gather data, build, validate and maintain the model, or the fee for a vendor or consultancy that does it for you.

References

  1. Jin, Wang, Sun, Chan and Koehler (2017), Bayesian Methods for Media Mix Modeling with Carryover and Shape Effects Adstock with delayed peak, Hill saturation, ROAS and mROAS from posterior samples.
  2. Chan and Perry (2017), Challenges and Opportunities in Media Mix Modeling Why MMMs struggle: limited data, correlated inputs, selection bias.
  3. Advertising adstock (Wikipedia), for Broadbent (1979), One Way TV Advertisements Work Secondary source: adstock is usually credited to Broadbent's 1979 Journal of the Market Research Society paper; the original isn't available online.
  4. Regulation (EU) 2016/679 (GDPR) on EUR-Lex Applies from 25 May 2018.
  5. Apple ATT framework coming into force on 26 April 2021 (Lewis Silkin) App Tracking Transparency took effect with iOS 14.5.
  6. Google Privacy Sandbox: Update on plans for Privacy Sandbox technologies (17 October 2025) Chrome keeps third-party cookie choice; most Privacy Sandbox APIs retired.
  7. Meta for Developers: Announcing the Python version of Project Robyn (19 December 2024) Robyn's official release in November 2021; Python beta.
  8. Robyn on GitHub Ridge regression, Nevergrad hyperparameter search, budget allocator.
  9. Google Meridian documentation Bayesian MMM, reach and frequency, GeoX calibration.
  10. Meridian changelog on GitHub 2.0.0 (September 2026) made JAX the default backend and added experiment calibration; latest release 2.1.0 (September 2026).
  11. LightweightMMM on GitHub Archived on 19 January 2026; the README recommends Meridian (limited availability 7 March 2024, generally available 29 January 2025).
  12. PyMC-Marketing documentation Bayesian MMM with adstock, saturation, lift-test calibration and budget optimisation.
  13. Google Meridian: holdout observations Guidance on holdout design for a Bayesian MMM.
Mike Taylor
Mike Taylor

I've built marketing mix models for Monzo Bank, Booking.com, Time Out, The AA and others, advised Google, Appsflyer and Recast on MMM, and teach marketing mix modeling on LinkedIn Learning. Before that I co-founded a 50-person growth marketing agency. I write the Vexpower MMM course.

Keep reading

Learn MMM by doing itThe Vexpower course walks through thirty lessons on one invented brand, with simulators, Python labs and a decision case you can defend.
See the course