mediamix is deliberately narrower than the full marketing mix modelling frameworks. This page sets out what each tool is for, where they overlap, and when to reach for which. Tools change quickly; this reflects them as of 2026, and each project’s own documentation is the authority on its current features.
The landscape
Robyn (Meta, R). An end-to-end MMM: geometric and
Weibull adstock, Hill saturation, ridge regression, multi-objective
hyperparameter search with the Python library nevergrad
(reached through reticulate), calibration to experiments,
and a budget allocator. Use it when you want Meta’s full, opinionated
pipeline.
Meridian (Google, Python). A Bayesian hierarchical MMM, built for geo-level data, with priors on ROI, reach and frequency support and experiment calibration. Its methodology descends from Jin et al. (2017).
PyMC-Marketing (PyMC Labs, Python). Bayesian MMM with configurable adstock and saturation, budget optimisation, and customer-lifetime-value models, built on PyMC.
ChannelAttribution (R and Python). Markov-chain attribution of any order, and heuristic models, in C++, starting from aggregated path strings.
recipes / tune (R, tidymodels). General-purpose preprocessing and hyperparameter tuning, with no media-specific steps.
Where mediamix fits
mediamix is the transform, attribution and reporting layer on its own, in R, with no compiled code and no Python:
| Need | mediamix | Full framework |
|---|---|---|
Adstock and saturation inside your own lm(),
brms, glmnet or Stan model |
Yes — plain functions on vectors | Usually inside the framework’s model |
| Carryover tuned jointly with a model penalty in tidymodels |
step_adstock() keeps state across resampling
boundaries |
Framework-specific search |
| Per-channel carryover by cross-validation in your own model | tune_carryover_joint() |
Framework-specific search |
| Marginal ROI by counterfactual simulation | marginal_roi() |
Robyn, Meridian, PyMC-Marketing all report one |
| Journeys built from a raw event log | build_paths() |
Not covered by the MMM frameworks; ChannelAttribution starts from paths |
| Heuristic and Markov attribution side by side |
attribute(), attribution_spread()
|
ChannelAttribution (Markov and heuristics) |
| Uncertainty intervals |
block_bootstrap() around any model |
Posterior intervals in Meridian, PyMC-Marketing; bootstrap in Robyn |
| Bayesian estimation with priors | No — use brms or Stan on mediamix transforms |
Meridian, PyMC-Marketing |
| Budget optimisation | No — marginal_roi() and scenario simulation only |
Robyn, Meridian, PyMC-Marketing |
| Reach and frequency, geo hierarchies | No | Meridian |
Choosing
- You want a complete, supported MMM product and are happy with its modelling choices: Robyn in R, or Meridian or PyMC-Marketing in Python.
-
You already have a modelling approach — a
regression, a
brmsmodel, a tidymodels workflow — and need correct media transforms and honest reporting around it: mediamix. -
You have an event log and need journeys, rule-based credit
and Markov removal effects without building the paths by hand:
mediamix, with
as_channel_paths()to hand off to ChannelAttribution for higher-order chains. - You need incrementality: none of these on their own. Run an experiment, and use it to check or calibrate whichever model you choose.
Moving parameters between tools
- Geometric decay means the same thing everywhere, but mediamix
normalises the kernel by default and Robyn does not. Use
normalise = FALSEto reproduce Robyn’s adstocked series; the decay itself is unchanged. - Robyn’s Weibull
scaleis a quantile of the window length, not a number of periods, so it does not transfer directly toadstock_weibull(). - Hill
half_maxis in the units of the adstocked media. Some tools express it as a fraction of a column’s range or maximum instead, asstep_saturation()does. - For
order = 1,markov_removal()andChannelAttribution::markov_model()implement the same removal-effect definition; small differences come from ChannelAttribution’s simulation.