Why Kuwalyst runs on PyMC-Marketing rather than Meridian
Why Kuwalyst runs on PyMC-Marketing rather than Google Meridian or Robyn: parametrisation, calibration, auditability, and what it changes for your media plan.
Hajime Takeda · Updated September 28, 2026
Three open-source MMM libraries, one table
Google Meridian, Meta’s Robyn and PyMC-Marketing, maintained by PyMC Labs and its community, are the three open-source libraries a marketing scientist shortlists for marketing mix modeling today. Searches for them run under several spellings, Google Meridian or Meridian Google, PyMC-Marketing or PyMC Marketing, and usually ask the same question: which library, and why. Kuwalyst runs on PyMC-Marketing. This page says why, with the trade-offs, and it is written by someone who has used all three.
| PyMC-Marketing | Google Meridian | Meta Robyn | |
|---|---|---|---|
| Maintainer | PyMC Labs and the PyMC community | Meta | |
| Language and stack | Python, on PyMC | Python; JAX backend by default since 2.0, TensorFlow Probability distributions | R, with a Python version in beta |
| Estimation | Bayesian, MCMC sampling | Bayesian, MCMC sampling | Regularised regression, evolutionary hyperparameter search |
| Where the priors sit | On the structural parameters: adstock, saturation, coefficients | ROI per channel by default; marginal ROI, contribution or coefficient priors configurable, structural priors behind them | No Bayesian priors; hyperparameter ranges, regularisation and selection criteria |
| Uncertainty | Posterior distribution for every parameter | Posterior distribution for every parameter | Candidate models; bootstrap intervals for ROAS or CPA within clusters; no posterior |
| Calibration with experiments | Lift-test observations enter the likelihood | ROI priors set from experiments, with calibration windows | Calibration-error objective in the model search |
| Data granularity | National or panel (geo or product) | Built for geo-level data, national supported | One time series; no hierarchical geo estimation |
| Model structure | A PyMC model your team can read, extend and modify | Configurable specification, including a full-funnel approach with mediators | Fixed structure with configuration |
| Licence | Apache 2.0 | Apache 2.0 | MIT |
Read the table as a set of choices, not a scoreboard. Each library makes different decisions about where the assumptions go and how much of the model the user is meant to touch.
Why we chose PyMC-Marketing
The Media Planner needs three things from its model: assumptions a client’s team can inspect, a way to load models built outside the platform, and a way to feed experimental evidence back into the next fit. PyMC-Marketing gives it a Bayesian media mix model written as an ordinary PyMC model, and Kuwalyst builds the planning workflow around it.
The priors are explicit. In PyMC-Marketing, the prior on a channel’s adstock decay, on its half-saturation point and on its coefficient is a distribution the team writes in code and can read back. The Bayesian MMM method sheet describes the three tiers the planner uses: strong priors on adstock decay, moderate priors on saturation, weak positive priors on the coefficients. Informative decay priors reduce the ambiguity between carryover, saturation and coefficient on two or three years of weekly data; they do not remove it, which is why the planner checks prior sensitivity and reports bands.
Calibration has a place in the model. PyMC-Marketing can add lift-test observations to the likelihood, with their uncertainty deciding how much they move the fit. The Media Planner’s own loop is simpler and is stated on every page of this site: the return measured by a geo-lift experiment becomes a prior on the channel’s coefficient in the next fit, and when the model’s estimate and the measured return differ by more than a third, the plan flags an identification problem on that channel.
The model is inspectable. The model card, the priors, the response curves and the fit diagnostics are stored as artefacts the team can open, and the trust page says where they are hosted. Hajime Takeda, Kuwalyst’s co-founder, contributed to the library’s documentation, and the methods the planner runs are the ones in Marketing Science in Python, chapter by chapter.
What Google Meridian does well, and where it constrains
Meridian is a serious library, and for some teams the right one. It is built for geo-level data: a hierarchical model that fits regions jointly, which extracts more information from the same weeks when spend varies by region. It can model any channel with suitable reach and frequency data, using unique reach and average frequency within each period rather than spend alone. Its priors on paid media are expressed on ROI by default, the language a marketing team already speaks, and can be switched to marginal ROI, contribution or coefficient priors; calibration from experiments means setting those ROI priors from measured values, with calibration windows to say which period the experiment covers. Its specification is configurable, including a full-funnel approach with mediators such as query volume. The Google Meridian documentation covers the model assumptions, the configuration and the diagnostics in detail, and a Google Meridian partner programme certifies agencies to run it.
The constraints follow from the same choices. Translating an experiment measured at one spend level, in one period, into a prior on a whole response curve is a modelling decision in any library; in Meridian that decision is made through the ROI-prior parametrisation and its calibration settings, which suits teams that think in ROI and constrains teams that want to place the evidence directly on the structural parameters. Geo-level data is the design centre: national fits are supported, but a brand with one national series and offline channels gets less of what makes Meridian distinctive. The model is configured rather than written: what the configuration does not expose means changing the library’s implementation rather than the model. And Meridian open source runs on a JAX and TensorFlow Probability stack, which matters when the team’s existing code, tests and habits are in PyMC.
None of those are defects. They are the reasons a team chooses Meridian. Kuwalyst chose PyMC-Marketing for direct access to the PyMC model and its parametrisation; the loading of external models, the recalibration schedule and the audit records are the Media Planner’s application code, and would have to be built around any library.
Robyn, briefly
Robyn is Meta’s open-source MMM package, implemented in R with a Python version currently in beta. It does not sample a posterior. It fits a ridge regression, and the adstock and saturation hyperparameters are chosen by an evolutionary search over thousands of candidate models, scored on prediction error and on the distance between each channel’s share of effect and its share of spend. When experiments are available, a third objective penalises the gap between the modelled and the measured incremental effect. The output is a set of candidate models on a Pareto front; the analyst picks one, and Robyn’s clustering step provides bootstrap intervals for ROAS or CPA within a cluster of candidates.
That makes Robyn accessible to teams without a Bayesian workflow: no explicit priors to write, although the hyperparameter ranges, the regularisation and the selection criteria encode assumptions of their own. It also makes uncertainty a different object: a bootstrap interval across candidate models is not a posterior on a parameter, and a plan built on one chosen model does not carry the posterior band the two Bayesian libraries provide. For Meridian vs Robyn, the short version is a difference in what comes out: candidate models and bootstrap intervals from Robyn, posterior distributions from Meridian.
What this changes for you: auditability, portability, calibration
Auditability. To assess an estimate, television’s saturation for instance, the team can open the stored priors, response curves and fit diagnostics, and the measured, projected and benchmark labels say where each figure on the plan came from. A projected figure is still a model output; the difference is that the assumptions behind it can be read.
Portability. The Media Planner can load models built by your team or a partner, so a plan can run on an existing model rather than requiring a new fit inside the platform. The plan says which figures come from which model.
Calibration. The planner proposes geo-lift experiments from the first plan and uses their measured returns to inform the channel’s coefficient prior in the next fit. The marketing mix modeling guide goes through how model estimates and experimental evidence fit together in a plan.
What the library does not change: the data you need, the discipline of the experiments, or the reading of the bands. All three libraries require defensible assumptions, suitable data and validation; their estimation and calibration methods differ, and this site documents the method the planner runs.
A worked example
The example is fictional, and its figures are assumed for illustration. A retailer runs paid search, paid social, online video and television, with two and a half years of weekly data. Suppose the model, fitted with the planner’s default priors, estimates television’s average incremental return over a change comparable to the planned test at 1.6×, with a 90% credible interval from 0.7× to 2.9×: too wide to move budget on. The team runs a six-week geo holdout, television paused in a set of regions, with a synthetic control built from the untreated ones.
Suppose the test estimates 2.1× incremental revenue per euro of television spend removed, with a 90% confidence interval from 1.5× to 2.8×, over the test window. In the Media Planner, that measured return informs the prior on television’s coefficient in the next fit; suppose the refitted model then puts the same quantity at 2.0× with an interval from 1.5× to 2.6×, an assumed output rather than a value computed from the intervals above. The plan shows the 2.0× tagged projected next to the 2.1× tagged measured, with their intervals and conditions, and reads the marginal return at the proposed spend off the refitted curve before any budget moves.
Each library would take the experiment in differently: PyMC-Marketing can also carry it as a lift-test observation in the likelihood, Meridian would translate it into an ROI prior on television for the calibration window, and Robyn would add it to the calibration-error objective of its model search. All three use the evidence; each requires the analyst to check that the experiment and the modelled effect describe the same spend change, period and population.