MMM Model Comparison: How Robyn, Meridian, PyMC and OLS-Based Engines Differ
By
Phil Spencer
·
9 minute read
About the Author
With a strong background in marketing analytics and business strategy, Phil is responsible for delivering a range of software and services including MMM and MTA. Prior to this, Phil held senior roles at Nielsen, Pointlogic and MediaCom, where he specialized in business analytics for the marketing industry.
Robyn, Meridian, PyMC-Marketing and least-squares models all estimate how much each marketing driver contributes to sales, and they get there by different statistical routes. The broadest dividing line is statistical philosophy: PyMC and Meridian are Bayesian, the least-squares engines are frequentist, and Robyn combines ridge regression with an evolutionary search. That split tends to shape how fast a model runs, how business beliefs enter the model, and whether uncertainty is reported as a full posterior distribution, as standard errors or as an ensemble of candidate models. The engines also differ in how they set carryover and saturation, model trend and seasonality, and apply constraints, and each of these is covered below.
Statistical philosophy by engine
Statistical philosophy and how uncertainty is reported, by engine. Filter by family.
This guide compares the six estimation engines available in MMM Labs, ScanmarQED's multi-engine Marketing Mix Modeling platform. Because all six read the same model specification (the same variables, expected signs, transformations and priors), the differences between their results are methodological rather than the product of different inputs. That makes a fair comparison possible.
A Marketing Mix Modeling (MMM) engine is the estimation method that turns a model specification into fitted coefficients, channel contributions and ROI. Choosing an engine is choosing a set of statistical assumptions, so it pays to know what each one assumes.
What are the six MMM engines in MMM Labs?
MMM Labs runs three engines built by ScanmarQED and three open-source engines, all from a single model configuration.
| Engine | Built by | Estimation approach | Uncertainty reported | Typical runtime |
|---|---|---|---|---|
| OLS | ScanmarQED | Ordinary least squares | Standard errors | Seconds |
| Constrained OLS | ScanmarQED | Bounded least squares | Standard errors | Seconds |
| Adaptive MMM | ScanmarQED | Gradient-based optimization, ridge-stabilized | Standard errors | 2–10 min |
| PyMC | PyMC Labs (open source) | Bayesian inference (MCMC) | Full posterior distribution | 5–15 min |
| Meridian | Google (open source) | Bayesian inference (MCMC) | Full posterior distribution | 10–30 min |
| Robyn | Meta (open source) | Evolutionary search + ridge regression | Model ensemble (Pareto front) | 10–30 min |
Runtimes are typical for a standard weekly model and vary with data size and configuration.
How do MMM engines set adstock and saturation?
An important difference between MMM engines is how they set transformation parameters: the adstock decay rates, saturation points and curve slopes that describe how media works over time. Every parameter in an MMM Labs configuration carries a plausible range. Each engine does something different with that range:
- Fixed (OLS, Constrained OLS): parameters are set at the center of the configured range. No search, no tuning.
- Optimized (Adaptive MMM): parameters are tuned together with the coefficients by a gradient-based optimizer, within the configured ranges.
- Searched (Robyn): an evolutionary optimizer generates and scores thousands of candidate models and keeps the best trade-offs.
- Estimated (PyMC, Meridian): parameters receive full posterior distributions through Bayesian sampling.
In practice, OLS and Constrained OLS answer the question "given these transformation settings, what are the best coefficients?" Adaptive MMM, PyMC, Meridian and Robyn also answer "what should the transformation settings be?" Your configured ranges act as the guardrails in every case.
How do OLS, Constrained OLS and Adaptive MMM work?
The three ScanmarQED engines are least-squares methods. They share fast runtimes and familiar regression diagnostics, and differ in how much structure they impose.
OLS is a diagnostic first look. Nothing is constrained and no business beliefs are applied, so the fit shows what the data says about a specification before anyone imposes assumptions on it. A wrong-signed coefficient stays visible as evidence about the data instead of being pushed back into range. That makes OLS useful as a reference point. It does not make it the most trustworthy model: on collinear media data, an unconstrained fit is usually less reliable than one that imposes structure.
Constrained OLS keeps the fixed-transformation design and builds your beliefs into estimation. A positive sign expectation becomes a hard floor at zero, and prior ranges become hard bounds. ROI or contribution-share beliefs enter as soft penalties, weighted by how confident you are and scaled to the data's own error, so a business prior bends the solution rather than overwhelming it.
Adaptive MMM treats carryover and saturation settings as unknowns. It tunes them jointly with the coefficients inside your configured ranges, which makes it the closest thing in the platform to "let the data choose the adstock and the curve." A small ridge penalty keeps correlated media channels from trading large offsetting coefficients, and the optimizer runs from multiple starting points to avoid settling on a poor local solution. A contribution guardrail stops any single variable from absorbing the entire baseline. It remains a least-squares method with standard diagnostics.
How does PyMC-Marketing work for MMM?
PyMC-Marketing is a fully Bayesian MMM package. Every configured prior, on coefficients and on transformation parameters, becomes a genuine Bayesian prior, and every reported quantity comes with a posterior distribution. Uncertainty intervals on contributions, ROI and response curves are first-class outputs rather than approximations.
PyMC stands out in three areas:
- Multi-market modeling: true hierarchical partial pooling, where each market's media effect is drawn from a shared distribution and markets that do differ keep their differences.
- Experiment calibration: lift-test results enter the model directly as evidence (supported for national models).
- Seasonality: built-in yearly seasonality using Fourier terms. PyMC has no time-varying trend mechanism, so long-run drift needs an engineered trend variable.
Media effect by market
How does Google Meridian differ from other MMM engines?
Meridian is Google's open-source Bayesian MMM, built for geo-level modeling. In MMM Labs it consumes the same configuration as every other engine, with several genuine methodological differences:
- Saturation before carryover. Meridian applies the saturation curve first and adstock second, the reverse of the other five engines.
- Its own priors for transformation parameters. Adstock decay, half-saturation and slope use Meridian's native prior families.
- ROI or contribution priors, one type for all paid media. Paid-media effects are parameterized through business-meaningful priors rather than raw coefficients, but all paid channels must use the same prior type.
- A time-varying baseline. Instead of fixed trend and seasonality variables, Meridian estimates a smooth baseline through time that absorbs both. Its "base" is therefore not directly comparable to the base of an engine with explicit seasonal terms.
- Geo hierarchy by design. In multi-market models, every effect is market-specific and shrunk toward a population-level estimate, which lets sparse markets borrow strength from the rest.
How does Meta Robyn work?
Robyn is Meta's open-source MMM framework. It combines ridge regression with a large-scale evolutionary search over adstock and saturation settings. Rather than returning one model, Robyn evaluates thousands of candidates and returns a Pareto front: the set of models where no alternative is better on both prediction error and decomposition plausibility (how closely each channel's contribution share tracks its spend share). Adding lift-test calibration introduces a third objective.
Three practical points shape how Robyn behaves:
- Sign constraints, not numeric bounds. A variable can be restricted to positive, negative or unconstrained, but a coefficient cannot be held inside a specific interval.
- Prophet trend and seasonality. Meta's Prophet decomposes the sales series first, and the trend and yearly-season components enter the regression as variables.
- National models only. Robyn is built for national-level data and does not support panel or market-level modeling. Use PyMC or Meridian for those. MMM Labs surfaces the auto-selected candidate, keeps the full Pareto front, and refits the chosen model over the full modeling window so Robyn's results cover the same period as every other engine.
How do the six MMM engines compare side by side?
| Attribute | OLS | Constrained OLS | Adaptive MMM | PyMC | Meridian | Robyn |
|---|---|---|---|---|---|---|
| Transformation parameters | Fixed | Fixed | Optimized | Estimated | Estimated (own priors) | Searched |
| Coefficient constraints | Reported only | Hard bounds | Hard bounds | Via priors | Via priors | Sign only |
| Business priors (ROI / contribution) | None | Soft penalties | Soft penalties | Bayesian priors + lift tests (national) | One global ROI or contribution prior type | Lift-test calibration |
| Uncertainty | Standard errors | Standard errors | Standard errors | Full posterior | Full posterior | Pareto ensemble |
| Multi-market models | Sum, separate or panel | Sum, separate or panel | Sum, separate or panel | Hierarchical panel | Geo hierarchy | National only |
| Trend and seasonality | Engineered variables | Engineered variables | Engineered variables | Fourier seasonality + intercept | Time-varying baseline | Prophet trend + season |
| Log (multiplicative) models | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
Why do MMM engines give different results on the same data?
MMM engines give different results on identical data because they make different methodological choices, not because one of them is broken. The main sources of divergence are:
- How transformation settings are chosen: fixed, optimized, searched or estimated.
- How constraints are honored: hard bounds, priors, sign restrictions, or not at all.
- How carryover is scaled: the Bayesian engines redistribute a period's effect over time without changing its total, while the least-squares engines and Robyn let carryover accumulate and the coefficient absorbs the difference.
- How the baseline is built: engineered variables, Fourier terms, a time-varying spline or Prophet components.
- Pipeline order: Meridian saturates before adstock; the other five do the reverse.
Contributions and ROI stay directly comparable across engines, because each engine applies its own conventions consistently. Baselines need more care, especially when comparing Meridian with engines that use explicit seasonal terms.
All six engines also follow the same validation discipline. Each fits once on a training window to produce honest out-of-sample error on a holdout period, then refits on the full window to produce the reported coefficients. The holdout tells you how well the specification generalizes; the full-window fit gives the most precise estimates.
This is where comparing engines earns its keep. When independent methods converge on the same channel ROI, you have evidence rather than output. When they diverge, the disagreement points to the specific assumption worth testing before the result reaches a budget decision.
Which MMM engine should you use?
The right engine depends on the question you need answered and the data you have.
- Use OLS when you want a fast, unconstrained read of what the data says before any beliefs are applied.
- Use Constrained OLS when you hold firm sign expectations or ROI beliefs and need results in seconds.
- Use Adaptive MMM when you are unsure of the right adstock and saturation settings but want least-squares speed, hard bounds and familiar diagnostics.
- Use PyMC when you need uncertainty intervals on every output, hierarchical multi-market models, or lift-test calibration.
- Use Meridian when you model at geo level and want ROI priors as the native language of the model.
- Use Robyn when you work with national data and want an ensemble of candidate models to choose from.
No engine is the right choice for every brand or every question. That is why MMM Labs does not ask you to commit to one upfront: you can specify the model once, run it through several engines, and let the data guide the methodology decision.
Frequently Asked Questions
Business priors are your existing beliefs about the ROI or contribution of a channel or other driver, and each engine handles them differently. In PyMC, they become Bayesian priors that shape the estimate directly, and lift-test results can be added as evidence in national models. Meridian expresses paid-media effects through ROI or contribution priors, using one prior type for all paid channels. Constrained OLS and Adaptive MMM add them as soft penalties, so a belief bends the estimate without overriding the data. Robyn can be calibrated against lift-test results. Plain OLS uses no business priors, which makes it a useful check on what the data says before any beliefs are applied.
No. Robyn is built for national-level models: market data is summed into one series before modeling, and Robyn does not support panel or market-level estimation. For regional or market-level models, PyMC offers hierarchical partial pooling across markets, and Meridian offers a geo hierarchy that lets sparse markets borrow strength from the rest. Least-squares panel models with per-variable pooling controls (full, partial or none) are another option.
Meridian builds its baseline differently in two ways. By default, it replaces fixed trend and seasonality variables with a smooth baseline that changes through time and absorbs both. It also standardizes control variables around their mean, so controls such as price or distribution are measured as deviations from their average, and their average effect sits in the baseline rather than being reported as a contribution. Meridian’s base can therefore look larger or smaller than in other engines, depending on the direction of those effects, and is not directly comparable. Paid-media contributions and ROI remain comparable across engines.
OLS and Constrained OLS run in seconds. Adaptive MMM typically takes 2 to 10 minutes, Meridian and Robyn 10 to 30 minutes, and PyMC 5 to 15 minutes. Bayesian sampling and large-scale evolutionary search take longer than least squares because they evaluate many parameter combinations rather than solving one. Runtimes vary with data length, the number of variables and model configuration.
No. MMM Labs provides no-code access to Robyn, Meridian and PyMC alongside ScanmarQED's own engines in one cloud-based interface, which you can reach in three ways: the point-and-click app, the AI assistant built into MMM Labs, or your own assistant, such as Claude, ChatGPT or Microsoft Copilot, connected through MCP. You configure the model once, covering variables, sign expectations, transformations and priors, and run it through any supported engine. MMM Labs validates the configuration against each engine before the run starts and reports any unsupported combination.