Skip to main content
Back to blog
PyMC-Marketing
Marketing Mix Modeling
Bayesian Statistics
Open Source
Release

PyMC-Marketing 1.0 Is Here: What the Stable API Means for Your MMM

After two years of 0.x releases, PyMC-Marketing has shipped its 1.0 stable API. Multidimensional MMM is now the default, sampling is roughly 1.5x faster, and four new modelling workflows landed alongside it. Here's what changed, what breaks, and what it means if you run MMM in production.

Niall OultonAugust 7, 20268 min read

Today the PyMC Labs team released PyMC-Marketing 1.0.0. After two years of 0.x releases, this is the project's first stable API, and it is a bigger deal than the version number suggests. A 1.0 is a promise: the interfaces you build against today are the interfaces you will still be running next year. For anyone who has been refitting models through a string of 0.x upgrades, that promise is the feature.

SIMBA is built on PyMC-Marketing, so we read release notes like this one closely. This post is our practitioner's summary: the headline changes, the four new modelling workflows we think matter most, and what actually breaks if you are coming from 0.19.

The headline changes

Multidimensional MMM is now the MMM

The biggest structural change: the multidimensional model is no longer a separate experimental class sitting next to the "real" one. It is the MMM. Geography, product, and channel are first-class dimensions, and a single xarray.Dataset carries all model inputs.

This matters because almost nobody's marketing measurement problem is truly one-dimensional. Retailers think in regions, CPG brands think in product lines, and everyone thinks in channels. In 0.x you either flattened that structure away or maintained parallel models. In 1.0 the panel structure is the native input format, with partial pooling across the dimensions you care about.

Roughly 1.5x faster sampling

Two engineering changes, model freezing and a static-shape numba convolve1d for adstock, deliver about a 1.5x sampling speedup on the demo MMM. Notably, the team reports that plain CPU sampling now beats JAX on that benchmark. If your mental model is still "Bayesian MMM means leaving the laptop running overnight", it is worth re-checking that assumption: the fit-diagnose-refit loop keeps getting tighter.

A modern foundation

1.0 sits on PyMC 6, ArviZ 1.2, PyTensor 3, and NumPy 2, with a new namespace-based plotting API built on arviz-plots that can render interactive Plotly output. If you have been fighting dependency pins to keep an older PyMC-Marketing alive next to a modern scientific Python stack, this release resolves that tension.

Four new workflows worth your attention

Beyond the core API, 1.0 ships four new modelling workflows. Each one addresses a question we hear constantly from teams running MMM in production.

1. PIE: Predicted Incrementality by Experimentation (alpha)

You cannot run a geo test on every campaign. PIE tackles the gap: a BART model learns the mapping from campaign features to measured incrementality using the experiments you did run (geo tests, ghost-ad holdouts), then predicts a full incrementality posterior for campaigns that never had one. It is experimentation leverage: each test you run makes every untested campaign better measured. Alpha status means the API may move, but the direction is exactly right. See the PIE example notebook.

2. Funnel-aware MMM

Standard MMMs starve the upper funnel of credit. TV and video create demand that converts later through search and retargeting, and a flat regression hands the sale to whichever lower-funnel channel touched it last. The new workflow encodes that mediation explicitly as a custom MuEffect: upper-funnel media drives an intermediate demand signal, which then flows through lower-funnel channels. The advanced notebook scales the approach to a geo panel. See the funnel MMM notebook.

3. Long-term brand effects

Every brand marketer knows the frustration: brand spend looks weak in a standard MMM because the demand it builds drifts into the intercept, where no channel gets credit for it. The new workflow pairs a time-varying intercept with a Bayesian VARX over brand-tracking metrics like awareness and consideration, so slow-moving brand effects are recovered instead of absorbed. This is one of the hardest problems in marketing measurement, and having a worked, reproducible treatment of it in an open-source library is genuinely new. See the brand effects notebook.

4. Bayesian BLP

For pricing and product teams: structural demand estimation in the BLP tradition, recovering own- and cross-price elasticities from aggregate market share data, now with full Bayesian uncertainty. This extends PyMC-Marketing beyond media measurement into demand modelling proper. See the Bayesian BLP notebook.

Coming from 0.19? What breaks

A 1.0 earns its stability promise by cleaning house first, and this one does. Both MMM and CLV have breaking changes. The big ones:

ChangeWhat to do
The old MMM class is removedMove to the (formerly "multidimensional") MMM, which is now the only MMM
Module renamed: multidimensional → mmmUpdate imports; the multidimensional model now lives at the top-level mmm namespace
Deprecated Prior module removedImport Prior from pymc-extras instead
X_pred / y_pred aliases removedUse the current predict API argument names
New plotting APIPlots moved to a namespace-based API on arviz-plots, with optional interactive Plotly backends

The team ships migration guide notebooks for both MMM and CLV, and they are the right place to start. Budget an afternoon, not a rewrite: the concepts all carry over, it is mostly imports and constructor signatures. The docs have the details.

If you pin dependencies in production (you should), pin pymc-marketing>=1.0,<2 going forward. That is the whole point of a stable API: within the 1.x series, upgrades should be boring.

What this means for SIMBA users

SIMBA productionises PyMC-Marketing, which means upstream migrations are our job, not yours. The 0.19-to-1.0 breaking changes land in our codebase; what reaches you is the upside: faster fits from the sampling speedups, geo- and product-level modelling on the now-native multidimensional MMM, and the new workflows as they mature from notebooks into product features.

We track the upstream project publicly on our PyMC-Marketing page: live release feed, download trends, and contributor activity, straight from PyPI and GitHub. It is the engine under SIMBA, and today the engine hit 1.0.

Congratulations to the PyMC Labs team and the whole contributor community on the milestone. If you want to talk about what 1.0-era MMM could look like for your team, book a call.

SIMBA is a Bayesian Marketing Mix Modeling platform built on PyMC-Marketing. Upload your marketing data, build MMM models, measure channel ROI, optimize budgets, and run scenario forecasts. Learn more at getsimba.ai.

Published on August 7, 2026 by Niall Oulton

All posts