d-dat · agentic ai marketing TR·ENguide · 0707.05.2026~13 min read
// guide · marketing mix modelling

Marketing Mix Modelling: Post-Cookie Budget Allocation in Practice.

As third-party cookies erode, MTA alone no longer answers the budget-allocation question. Marketing Mix Modelling — a classic statistical technique from the 1990s — measures each channel's true contribution from aggregate data, with no cookie dependency. This guide walks through what MMM is, how it differs from MTA, when to use it, and how to set it up from scratch.

// author Mesut Şefizade // updated 7 May 2026 // scope MMM · MTA · Robyn · Meridian · incrementality
// short answer

MMM (Marketing Mix Modelling) links aggregate sales and spend data via a statistical model to estimate each channel's true contribution and saturation point. vs. MTA: MMM works on weekly/daily totals instead of user-level click paths, so cookie loss doesn't degrade it. Typical outputs: cross-channel budget reallocation, saturation-point detection, halo-effect measurement, what-if scenarios. Cost: 6-10 week first build, needs ~2 years of weekly data; ROI becomes clear above ~$500K monthly ad spend.

// 01What is MMM, and why is it back?

Marketing Mix Modelling (MMM) is a classic statistical method that originated in 1990s FMCG (Procter & Gamble, Unilever) for measuring TV advertising's contribution to sales. The logic is simple: model the relationship between weekly sales and weekly marketing spend, control for external factors (seasonality, macroeconomics, competitor activity), and back out each channel's true contribution.

From 2010-2020 the digital ad industry built around MTA (multi-touch attribution); MMM looked old-fashioned. Three forces brought it back from 2021 onward:

  • Third-party cookie loss. Safari ITP, iOS 14.5+ ATT, Chrome's slow 3pc deprecation — the user-level click-tracking foundation of MTA weakened materially.
  • Walled gardens. Meta, Google and TikTok each see complete data inside their own platforms but won't share with each other; cross-platform attribution needs a neutral measurement layer, and MMM is neutral by construction.
  • AI acceleration. Open-source tools — Google's Meridian, Meta's Robyn — turned Bayesian MMM from a month-long academic project into a two-week engineering job.
// modern MMM ≠ classical MMM Classical MMM was monthly linear regression with manual fixes. Modern MMM uses Bayesian estimation (Robyn, Meridian, LightweightMMM), adstock (decay of media effect over time) and saturation curves. More reliable, more actionable.

// 02MMM vs. MTA: when do you use which?

MMM and MTA are not competitors. They answer different questions; mature marketing operations run both.

PropertyMMMMTA
Data levelAggregate (weekly/daily totals)User-level
Cookie dependencyNoneHard dependency
Data needed2 years weekly (~104 weeks)30-90 days
Question answered"How should I split budget across channels?""Which click drove this conversion?"
Decision cadenceQuarterly / annual strategicDaily / weekly operational
Halo effectsCaptured (TV → Search lift)Limited
Saturation pointDirect outputNot derivable
Setup costHigh (6-10 weeks)Low (with GTM)
RefreshQuarterlyContinuous

What to ask each one

Ask MMM: How should I split a $30M annual budget across Google, Meta, TikTok, TV and OOH? Does my TV spend lift Search conversions (halo)? Am I saturated on Search? If I add 20% there, what happens?

Ask MTA: Was yesterday's conversion driven by Google Ads campaign A or Meta retargeting? What's campaign X's CPA over the last 7 days? Which keyword group converts highest?

// practical recommendation Below roughly $200K/month ad spend, MMM rarely pays back. At that scale MTA + clean conversion tracking + the occasional incrementality test (geo-lift) covers most decisions. MMM ROI usually becomes clear above $500K/month spend.

// 03The math, intuitively

Without falling into formal notation, modern MMM has three pillars.

1. The base regression

The simplest version models weekly sales as a function of weekly channel spend:

Salest = β0 + β1·Googlet + β2·Metat + β3·TVt + ... + ε

Each β is "how many additional sales per extra dollar of spend on that channel". Two big realities are missed: (a) ad effects don't stop the week the ad runs — they decay; (b) ad effects aren't linear — they saturate.

2. Adstock — delayed effect

The TV ad you saw this week may keep working for the next four weeks. Adstock models that:

Adstockt = Xt + λ · Adstockt-1

The decay rate λ is channel-dependent. Performance Search has λ ≈ 0.1 (effect dies fast). TV has λ ≈ 0.6 (effect persists for weeks). Estimating λ correctly is the most consequential single step.

3. Saturation — diminishing returns

You spend $100K/week on Search and get 200 sales. Will spending $200K give you 400? Almost never — typically more like 320 (saturation). A Hill or S-shape curve captures this:

Effect = β · Xα / (Xα + γα)

α and γ control how fast saturation kicks in and at what threshold. Estimated per channel. Saturation curves are the heart of budget optimization — they answer "this channel is full, divert the next dollar elsewhere".

The Bayesian turn

Modern MMM tools (Robyn, Meridian, LightweightMMM) estimate these parameters with Bayesian MCMC instead of classical regression. The practical advantage: instead of point estimates, you get credible intervals. "TV ROI is 1.4x" becomes "TV ROI's 95% credible interval is 1.1x — 1.7x". Much healthier for business decisions.

// 04Data requirements and collection

MMM success is roughly 70% data quality. You need three kinds of data:

1. Dependent variable (KPI)

  • E-commerce: weekly net revenue or order count.
  • SaaS: weekly new MRR or paid signups.
  • Lead-based B2B: weekly SQL count.
  • Brand: weekly brand-awareness survey score, or branded-search volume as proxy.

2. Marketing spend (media variables)

  • Weekly spend per channel ($ or impressions).
  • Where possible, sub-channel: Google Ads → Search vs. Performance Max vs. YouTube.
  • Creative refreshes matter — same budget on tired creative behaves differently from new.

3. Control variables

Sales also moves for non-marketing reasons. Leave them out and the model attributes them to channels in error.

  • Seasonality: month, holidays, Black Friday, Cyber Monday, Prime Day.
  • Price / promo: weekly average discount.
  • Stock: share of SKUs out-of-stock.
  • Macro: consumer-confidence index, inflation, FX (for multi-market or import-heavy brands).
  • Competition: rival activity intensity (Google Trends as a proxy works).
  • Distribution (omnichannel): active store count, openings/closings.
// data shape Typical MMM dataset: 1 row = 1 week, columns: date, KPI, spend per channel, control variables. ~104 weeks (2 years) → roughly a 30-50 column table. Lives in Excel, BigQuery or Snowflake.

// 05Open-source tools: Robyn, Meridian, LightweightMMM

You don't write MMM from scratch. Three serious open-source options exist, all Bayesian:

ToolMaintainerLanguageStrength
RobynMetaRAutomated hyperparameter tuning, rich visualizations, most mature
MeridianGooglePythonSearch-vs-demand-gen mix, native geo-level support
LightweightMMMGooglePythonSimpler, lower data needs, easier to teach
PyMC-MarketingPyMC communityPythonFull Bayesian framework, academic flexibility

Practical guidance: R-fluent team with statistical depth → Robyn. Python ecosystem and Google-Ads-heavy portfolio → Meridian. First MMM with limited (1.5y) data → LightweightMMM.

All three are free, but you need a data scientist to operate them. "I downloaded Robyn and ran it" doesn't get you to outcome — interpreting results, choosing controls correctly, validating the model needs domain experience. Typical project shape: 1 data scientist (model) + 1 marketing analyst (interpretation) + 1 senior strategist (action).

// consulting
Talk to d-dat about an MMM build.
data → model → 2-year roadmap
Get in touch

// 0610-step setup roadmap

If you're standing up MMM for the first time, the order to follow:

MMM Setup Roadmap

  1. Lock the target KPI to a single metric — net revenue? order count? lead count? Pick one. day 0
  2. Collect 2 years of weekly data — KPI + per-channel spend + control variables. 1 week
  3. Data-quality audit — missing weeks, outliers, channel-taxonomy consistency (e.g. is "Google Ads Search" always labelled the same?). 3-5 days
  4. Add seasonality + holiday variables — country-specific calendar (Black Friday, Cyber Monday, Prime Day, Ramadan, Lunar New Year — whatever applies).
  5. Choose a tool — Robyn / Meridian / LightweightMMM. Match team's language. 1 day
  6. Train the first model — defaults. Sanity-check: "Is TV's coefficient negative? Does that match intuition?" 3-5 days
  7. Hyperparameter tuning — adstock decay and saturation parameters via grid search or Bayesian optimization. 1 week
  8. Validation: out-of-sample prediction — hold out the last 4 weeks, train on the rest, predict the held-out window, compare to actual. R² ≥ 0.8 and MAPE ≤ 15% should be the bar. 2-3 days
  9. Cross-validate with an incrementality test — run a geo-lift or holdout in one channel; compare the lift MMM predicts to the lift you measured. 4 weeks
  10. Run budget-optimization scenarios — current allocation vs. MMM-recommended. Quantify the expected lift; present to the business. 1 week

Typical timeline: 6-10 weeks. After that, quarterly refreshes (1-2 weeks) keep the model current.

// 07Interpreting the output

Three main outputs come out of a working model: channel decomposition, ROI / mROI, saturation curves. What each means in practice:

1. Channel decomposition

What share of total sales does each channel contribute? A typical e-commerce decomposition: 30% organic (baseline), 22% Google Ads, 18% Meta, 12% email, 8% TV, 6% affiliate, 4% OOH. This shows how much sales a channel produced — not how efficiently.

2. ROI and mROI

ROI is a channel's average return: $100 on Google Ads → $350 sales → ROI 3.5x. mROI is marginal return: what does the next dollar do? Read off the saturation curve. Budget decisions hinge on mROI:

  • Channel A: ROI 4.0x, but mROI 1.2x (near saturation) → don't pour more in.
  • Channel B: ROI 2.5x, but mROI 2.3x (far from saturation) → put more in.

High average ROI alone is not a buy signal — look at the marginal.

3. Saturation curves

For each channel: spend on the X-axis, sales on the Y-axis, an S-shape curve. The elbow marks where saturation begins. If your current spend is left of the elbow, you can scale; right of it, you're wasting.

// what-if The model's most useful feature is scenario simulation. "What if I split $50M like this next year?" — the model answers in minutes. Replaces year-end retrospectives with forward-looking decisions.

// 08Five common mistakes

Mistake 1: Skipping control variables

If you don't model promo weeks or stock-outs, the model attributes their effects to channels by mistake. Fix: work with the business to capture weekly price, promo, stock metrics; include them as controls.

Mistake 2: Inconsistent channel taxonomy

"Google Ads" labelled "Google" in some weeks, "Search Engine" in others. Model treats them as separate channels — coefficients corrupt. Fix: standardize taxonomy before collection; rewrite history to one convention.

Mistake 3: Ignoring adstock

Plain linear regression (i.e. λ=0). TV-style delayed-effect channels look like they have zero impact. Fix: use Robyn / Meridian's default adstock pipeline; if you write your own, transform spend through adstock first.

Mistake 4: Skipping out-of-sample validation

R² 0.95 in-sample looks great but is overfit — that's "fits the past", not "predicts the future". Fix: hold out the last 10% of data; train on the rest; predict the held-out window; compare.

Mistake 5: Set-and-forget

Model trained 3 months ago, still in use today. Market shifted, creatives changed, competition moved. Fix: mandatory quarterly refresh. Add an ad-hoc refresh whenever you see a major campaign change or market shock.

// 09FAQ

What's the difference between MMM and an incrementality test (geo-lift)?

Incrementality testing is experimental — turn off ads in one region, leave them on in another, compare sales. MMM is observational — model historical data. Best practice: MMM for budget allocation, incrementality testing to cross-validate MMM's findings.

How does MMM coexist with agentic AI?

MMM gives you the strategic budget split (quarterly decision). Agentic AI optimizes operationally within that split (daily). Example: MMM says "allocate $12M annually to Google Search". An agent then optimizes that $12M day-by-day, campaign-by-campaign. Compass and steering wheel — not substitutes.

What needs to be in place before starting MMM?

Three preconditions: (1) clean conversion tracking — without it, daily KPI feeds are inconsistent; (2) at least 18 months of weekly data; (3) business buy-in: the leadership has to be willing to act on cross-channel reallocation, otherwise the project is academic.

Is MMM a one-time project or continuous?

Continuous. First build 6-10 weeks, then quarterly refresh 1-2 weeks. That's 4 refreshes a year plus ad-hoc what-if runs. ROI compounds: post year-1 returns are typically 5-10× ongoing cost.

Does MMM measure brand effects?

Indirectly. Pure brand campaigns (TV, OOH) show up in MMM through their lift on sales — but the timeline is longer (multi-year), so MMM with 2 years of data captures the easy cases. For long-cycle brand effect measurement, brand-tracking surveys + econometric models with longer history work better than MMM alone.


This guide was prepared by d-dat, an agentic AI marketing platform. Get in touch for MMM consulting and operational agent setup; explore d-lens for performance auditing.

Quick definitions for the concepts referenced in this guide:

// next step

Allocate budget on evidence.

MMM build, conversion-tracking health, agent operations — book a free 30-minute call with d-dat to scope what makes sense for your operation.

Email us