Skip to content

A Faster MMM Pipeline Doesn't Answer Whether the Numbers Are Causal

Marketing Mix Modeling teams spend most of their time wrangling data: pulling spend, impressions, and conversions from a dozen ad platforms into one schema before a model ever sees them. A newer connector pattern removes that friction. Standardized data pipelines can hand a Bayesian MMM tool clean, wide-format tables in a few lines of code instead of weeks of custom ETL.

That's a real gain. But it answers a different question than the one a budget decision needs answered.

What does this pipeline actually do?

The pattern, as implemented in the open-source PyMC-Marketing package, has five phases:

  1. Connect to the ad platforms.
  2. Standardize the schema with dbt.
  3. Load the result into PyMC-Marketing.
  4. Run inference through a Bayesian MMM.
  5. Act on what it produces.

A dbt-based ad-reporting package harmonizes spend, impressions, clicks, and conversions from platforms like Google, Meta, LinkedIn, TikTok, and Amazon into one unified schema, and supports unioning multiple accounts or markets while preserving a lineage field back to each source. PyMC-Marketing then supplies loader functions, process_fivetran_ad_reporting and process_fivetran_shopify_unique_orders in the reference implementation, that turn those standardized tables directly into the wide, date-indexed design matrix and target series a Bayesian MMM expects:

from pymc_marketing.data.fivetran import (
    process_fivetran_ad_reporting,
    process_fivetran_shopify_unique_orders,
)

x = process_fivetran_ad_reporting(
    campaign_df,
    value_columns="spend",
    rename_date_to="date",
)
## Result: date | facebook_ads_spend | google_ads_spend | ...

y = process_fivetran_shopify_unique_orders(orders_df)
## Result: date | orders

mmm = MMM(...)
mmm.fit(X=x, y=y["orders"])

What happens once the loaders feed the model?

Once the data is loaded, the MMM itself estimates channel effects with posterior uncertainty, models carryover (adstock) and saturation, and supports budget-allocation scenarios, all standard Bayesian MMM capabilities documented in the PyMC-Marketing data module. The underlying dbt package for ad-reporting standardization is documented at fivetran/dbt_ad_reporting.

What step does this pipeline leave out?

Every stage in that chain (connect, standardize, load, infer) is about getting from raw platform exports to a fitted model faster. None of it changes what the model is fitted on: historical spend and historical outcomes, correlated in time. A Bayesian MMM targets a causal media effect, but only under assumptions the pipeline doesn't verify: no unmeasured confounding, correct adstock and saturation form, and spend that isn't set in anticipation of demand. Historical spend is typically set exactly that way, and channel spends move together, so attribution stays weakly identified and prior-driven.

That distinction matters most at the exact moment the pipeline hands off to "act." A finance or growth leader looking at a cleaner, faster MMM read is still looking at an estimate whose causal identification hasn't been verified. The pipeline doesn't supply causal identification or confirm that reallocating budget based on the model's channel attribution will produce the outcome the model implies. Acting on that read at pipeline speed doesn't reduce the risk of a wrong reallocation. It just lets a team reach the wrong number faster.

Where a causal check belongs in this workflow

The fix isn't to distrust MMM outputs wholesale. It's to treat "infer" as a hypothesis about which budget move should work, and to test that specific move before it drives spend, the same discipline PyMC-Marketing itself supports through experiment calibration, which feeds randomized incrementality results back into the model as priors on channel coefficients, addressing that identification gap directly; testing the specific move first is what supplies that calibration input.

MMM read, even after the faster pipelineCausal check on the proposed move
Built fromHistorical spend and outcomes, correlated in timeA controlled experiment on the customer-facing attributes behind the specific reallocation
Question it answersWhat does the model attribute to each channel?Will this reallocation produce the outcome the model implies?
What it establishesUncertainty around a media effect whose causal identification is unverifiedA causal effect, with a confidence interval
Where it sits in the workflowConnect, standardize, load, inferOne step earlier than "act," before budget moves

Subconscious runs controlled experiments on the customer-facing attributes behind the proposed move: given a specific reallocation the MMM suggests (shift spend from Channel A to Channel B, for example), a discrete choice experiment on the message, offer, or price driving that channel's performance estimates the causal effect of those attributes with a confidence interval, rather than reading it off historical correlation. When the decision is high-stakes enough to justify it, that same causal question can also be tested with real human participants; transportability from a simulated population to human respondents is a separate empirical question, and human stated-choice results run high relative to actual behavior (hypothetical bias).

What this means for an MMM-driven budget decision

A faster pipeline is a legitimate improvement to data plumbing, not a substitute for testing the action its output implies. Treat the model's channel attribution as a candidate hypothesis, not a verdict, and validate the specific reallocation before it moves budget, particularly for calls a finance leader will need to defend after the fact.

Subconscious's case studies cover how that validation step works in practice; a demo walks through applying it to a specific MMM-driven budget call.

Five steps: connect, standardize, fit MMM, then a branch. Going straight from model to "act on budget" is marked risky; a test-the-reallocation step sits between the model and the decision.
The pipeline speeds up every step except the one that decides whether the model's channel attribution is safe to spend against.