Methodology

Bayesian MMM without a black box

How TriaCaf's marketing mix modeling pack works: adstock and saturation, three specifications, ROAS ranges, and the checks every run passes.

· 6 min read · TriaCaf

Marketing mix modeling (MMM) estimates how much each channel contributed to revenue, using spend and outcome data you already have, with no user-level tracking. The method is decades old. The trouble is that most MMM output arrives as a single number per channel, with no way to tell how much the model is guessing.

TriaCaf's MMM pack is built so that you can see the guessing. Here is what it fits, what it reports and how it is checked.

What goes in

A CSV with a date column, two or more spend columns (one per channel) and a revenue or sales column. Weekly data is typical. TriaCaf profiles the file before anything is fit, typing each column and flagging gaps and outliers, so problems with the data surface before they become problems with the model.

What the model assumes, in plain terms

The pack uses PyMC-Marketing with two well-established building blocks:

Both are estimated from your data, with priors that keep them in a plausible range, rather than set by hand.

Three specifications, not one

How long advertising effects last is one of the most consequential assumptions in an MMM, and one of the hardest to know in advance. So the pack does not rely on one: the main model is fit with a maximum adstock lag of 8 periods, and the same data is then refit with maximum lags of 4, 8 and 12 periods to see whether the answer moves.

If the three specifications broadly agree on each channel's return, that agreement is evidence the answer does not hinge on the lag you happened to choose. If they disagree, the sensitivity layer is flagged with a warning, and the Decision Brief tells you to review the result before acting on it.

Ranges, not point estimates

The main output is a posterior distribution of return on ad spend (ROAS) for each channel. A channel with a wide distribution is a channel the data cannot pin down. That is often the most useful finding in the whole model, because it tells you where an experiment, such as a geo test, would teach you the most.

How the model is checked

Every MMM run goes through the same five verification layers as every other pack:

What MMM cannot tell you

An MMM is an observational model. If two channels always rise and fall together, no amount of modeling can fully separate them, and the posterior will be wide for both. That is the honest answer, and it is why the TriaCaf MMM pack sits alongside the synthetic control and geo test packs: when the observational answer is uncertain, the next step is an experiment.

No black box

None of this is proprietary magic. The model structure is standard, the specifications are listed in the analyst appendix of every brief, and the signed model card records exactly what was fit and on which data. You can disagree with an assumption, but you can always see it. More on the pack itself is on the Decision Packs page.

← All insights Book a call