PyMC-Marketing

A fully configurable Bayesian MMM you assemble yourself.

PyMC-Marketing isn't a fixed model the way Robyn and Meridian are — it's a kit you assemble: which decay curve, which saturation curve, which priors, how hard to sample. That flexibility is the point (and the tradeoff): if you don't have a specific reason to want that control, Robyn or Meridian will get you a result with far fewer decisions to make.

Connecting it

Drag a PyMC node off Period (or directly off Variables). The modal has two modes:

  • Guided — a form with the fields below. Recompiles into the model spec every time you save, so it's never out of sync with what you see.
  • Advanced — a raw JSON editor for the same spec, for when a setting you need isn't exposed as a guided field. meryn validates it before saving, so a malformed spec is rejected with an error rather than accepted and failing later during training.
The PyMC guided configuration modal
The PyMC guided configuration modal
Dragging a PyMC node onto the canvas

Adstock (carryover)

Field Default What it controls
Adstock kind Geometric The shape of how a channel's effect decays after spend stops. Geometric is a single-parameter exponential decay — the same family Robyn uses, and a reasonable default. Other options: Delayed (effect peaks after a lag rather than immediately), Weibull (PDF) (a peak-then-decay shape with more parameters to fit), Binomial (a flexible decay), or None (no carryover — same-period effect only).
Max lag 8 (range 1–52) The longest carryover window considered, in your data's time units.

Saturation (diminishing returns)

Field Default What it controls
Saturation kind Logistic The shape of how a channel's effect flattens out as spend increases. Other options: Hill / Hill (sigmoid), Michaelis-Menten, Tanh / Tanh (baselined), Inverse scaled logistic, or None. If you're not choosing this for a specific reason, Logistic is the safest default.
Multiplicative (log-log) Off (additive) Whether channel effects add up (the default) or multiply. Turning it on doesn't restrict what you pick for Saturation — meryn resolves it when compiling the spec, replacing the chosen saturation with the log form the multiplicative model requires.

Seasonality and time-varying effects

Field Default What it controls
Yearly seasonality 2 (0–10 Fourier modes) How much flexibility the model has to fit a recurring yearly pattern. Set to 0 to disable seasonality entirely.
Time-varying intercept Off Lets the baseline level drift smoothly over time instead of staying fixed. Meaningfully increases training time.
Time-varying media Off Lets each channel's coefficient drift over time instead of staying fixed for the whole period. Also increases training time.

Leave both time-varying options off unless you have a specific reason to believe the effect actually changed shape mid-period (a big pricing change, a channel mix shift) — they're the most expensive knobs in this modal.

Priors

Option What it means
Informed by spend share (default, recommended) Sets each channel's starting belief in proportion to its share of total spend — a sensible, data-driven default with no manual input needed.
PyMC defaults PyMC-Marketing's own out-of-the-box priors, with no adjustment for your data.

There's no custom option in the guided form — to encode specific prior beliefs, edit the spec directly in Advanced mode.

Effort

One selector sets how deeply the sampler runs — there's no custom level and no sampler choice:

Level Draws / Tune / Chains Target accept When to use it
Low — a first look 500 / 500 / 2 0.90 Fast iteration while you're still deciding on the model structure — expect noisier convergence diagnostics.
Medium (recommended) 1000 / 1000 / 4 0.90 The default balance of speed and reliability for most models.
High — slower, tighter estimates 4000 / 4000 / 4 0.95 A final run once you're happy with the structure and want the most reliable result.

Holdout validation

Field Default What it controls
Hold out the last 20% Off Scores the model on the final 20% of the date range, which it didn't train on. It's a checkbox — the fraction is fixed at 20%. The holdout is the last contiguous block of dates, the same approach as Robyn, unlike Meridian's scattered holdout.

Calibration (optional)

Same lift-test editor as Robyn and Meridian: add a channel, a date range, tested spend, the measured lift, a Confidence (0–1) that sets how much weight the test carries, and a Scope, and meryn validates the row against your actual spend data live. All three engines share the mechanism — what differs is what each does with the rows (Meridian, for instance, turns them into ROI priors). Two things are specific to PyMC: it only calibrates paid channels (organic and contextual columns enter as covariates, not as something with a saturation curve to calibrate), and each lift-test row covers exactly one channel rather than letting you sum several into one test.

Reading convergence

PyMC results include a three-level convergence verdict — converged, partial, or not converged — based on standard Bayesian MCMC diagnostics: r-hat, effective sample size, and divergences. This is the one place across the three engines where meryn applies its own threshold rather than reading a verdict the framework provides directly (Meridian ships its own built-in reviewer; Robyn has its own verdict, derived from the two objectives its optimizer minimizes). Treat anything short of "converged" as a reason to sample more — try High effort — before trusting the model's numbers.

By-market data

PyMC supports by-market projects: with a market dimension mapped, it fits a hierarchical model with partial pooling — each market gets its own parameters, informed by what the others show — and its allocator can move budget between markets, not just between channels. The only engine limited to nationally aggregated data is Robyn.

What connects here

Upstream: Period or Variables. Downstream: Budget allocator or Benchmark.

What you get back

Fit quality, contributions, response curves and ROI on the results page, plus the on-screen Export PPT that all three engines share. There's no downloadable report here the way Robyn and Meridian have one: meryn only exposes report files the framework itself generates, and pymc-marketing doesn't produce an equivalent.