Marketing Mix Modeling: A Complete Guide
A marketing mix model (MMM) decomposes observed sales into a base term and the estimated incremental lift attributed to each marketing channel. Before a team reallocates budget on the strength of an MMM's channel attribution, it needs to understand what the model actually measures, and what it can't.
What an MMM decomposes
MMM starts from a simple accounting identity:
Observed sales equal a base level, plus whatever lift gets attributed to TV, digital ads, promotions, and other factors.
For example, TV drove some portion of sales, digital drove another, promotions another, and the remainder came from seasonality or other unexplained factors. The regression form underneath assumes each channel's effect is linear and immediate. Real marketing rarely works that way.
Why the basic equation isn't enough
Spending on a channel doesn't translate to sales in a straight line. Zero spend gives zero impact. Some spend produces a visible lift. But spend without limit doesn't keep producing proportional sales: audiences saturate and the channel loses effectiveness. Timing matters too: a TV campaign's impact can carry over for weeks after the spend runs, while a digital ad's impact fades almost immediately.
To reflect this, MMM adds two transforms before the regression step: adstock, which captures lag and carryover, and saturation, which models diminishing returns.
Adstock: the carryover effect
An ad's effect doesn't land only in the week the money is spent. Some viewers act that week, some weeks later, some never. Adstock creates a transformed version of the spend variable that carries a fraction of each week's effect into the following weeks:
Adstock_t = Spend_t + \lambda \cdot Adstock_{t-1}The current period's adstocked value is that period's spend plus a decayed fraction of the prior period's adstock, and so on backward. λ (lambda) sets the decay rate: a channel with a high λ retains more of its modeled effect across periods, while one with a low λ retains less. As a historical planning example, $1M spent on TV in week 1 with λ = 0.8 decays to $0.8M in week 2, $0.64M in week 3, and $0.51M in week 4.
Saturation: diminishing returns
Even after adstock, more spend doesn't produce proportionally more sales. The first dollars reach the most responsive part of the audience; later dollars reach people who are harder to convince. Before that adstocked spend goes into the regression, MMM passes it through a saturation function, and a handful of function families show up repeatedly:
- Logarithmic: f(x) = log(1 + x). Steep growth at low spend, flattening as spend rises.
- Hill: f(x) = x^α / (x^α + θ^α). α controls how sharply the curve bends toward saturation; θ is the half-saturation point, the spend level where the channel delivers half its total modeled impact.
- Tanh: f(x) = b * tanh(x / (b * c)). b sets the ceiling on impact the channel can deliver; c governs the curve's approach to that ceiling.
- Logistic: f(x) = (1 - e^(-x)) / (1 + e^(-x)). Its steepness parameter controls the curve before it flattens, with a half-saturation point near the inverse of that parameter.
With both transforms in place, the flow runs: raw spend, then adstock (carryover), then saturation (diminishing returns), then regression. Each channel's estimated contribution is a coefficient applied to its saturated, adstocked spend; the base term is the model's residual level given the specified controls like price and trend, not an identified no-marketing counterfactual, and it can absorb brand equity built by prior marketing along with any omitted driver.
Control variables: what isn't marketing
Sales move for reasons that have nothing to do with ad spend: a recurring holiday, weather, added shelf space. MMM adds these as control variables alongside the media channels. Leaving them out means marketing gets credit for changes it didn't cause; including them separates real incremental lift from normal shifts in the baseline.
Point estimate or distribution: the frequentist-Bayesian split
Once the model's structure is set, its parameters (the channel coefficients and the adstock/saturation parameters) still have to be estimated from historical data. There are two common approaches.
The classic route is frequentist estimation: the nonlinear adstock and saturation parameters are fit by grid search or nonlinear least squares, and the channel coefficients are then estimated by ordinary least squares (OLS) regression conditional on those fixed transform parameters, producing a best-fit number for each coefficient along with a standard error and confidence interval. Those intervals come from repeated-sampling theory rather than a probability statement about the true effect, and a team's prior knowledge from past campaigns can't be built into the estimate directly.
Bayesian estimation replaces the single best-guess number with a distribution: a likely range along with the probability that the true effect falls outside it. That distinction, a point estimate versus an uncertainty-aware estimate, is the practical question a stakeholder needs answered before treating an MMM's output as the basis for a budget decision.
Subconscious applies this same discipline at the level of a single decision rather than a channel coefficient: a controlled experiment estimates a causal effect and reports it with a confidence interval, so a stakeholder sees the range, not just a headline number. Read more about how Subconscious runs controlled experiments.
What MMM can't do
MMM is backward-looking. It needs a substantial history of sales and spend data, and it works at the level of channels and weeks or months, not individual ads or individual days. It can show that TV performed well over a quarter; it can't say which specific ad or airing drove a given day's sales. Leaving out a real driver of sales, such as a competitor's move or a shelf-space change, can bias the estimated returns for every channel in the model.
Because of these limits, MMM works best paired with experiments and lift tests rather than used alone. An experiment can validate or recalibrate what the model estimates; the model can extend a single experiment's findings across the full media mix. Subconscious's research applies the same standard: a reported effect always carries its confidence interval, and results replicate before they inform a decision. See the leaderboard for how those replicated results are tracked.
Further reading on the mechanics
For a worked derivation of the adstock and saturation transforms with PyMC, see Media Effect Estimation with PyMC: Adstock, Saturation & Diminishing Returns. For a shorter walkthrough of the same carryover and diminishing-returns effects, see Saturation and Adstock Effects in Bayesian MMM.