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 the pipeline actually does

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"])

From loaders to a fitted 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.

The step this pipeline doesn't include

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 can quantify uncertainty around that correlation with real rigor. It cannot, by itself, establish that a given channel's spend caused the conversions it's correlated with.

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 a correlational estimate. 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, applied one step earlier in the decision.

MMM read, even after the faster pipelineCausal check on the proposed move
Built fromHistorical spend and outcomes, correlated in timeA controlled experiment on 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 correlation, with real rigorA 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 proposed budget action itself: given a specific reallocation the MMM suggests (shift spend from Channel A to Channel B, for example), a discrete choice experiment estimates the causal effect of that action 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 move from a simulated study to testing with real human participants without changing what's being measured, only who's answering.

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.