A Faster MMM Pipeline Doesn't Answer Whether the Numbers Are Causal
On this page
A marketing mix modeling (MMM) team needs aligned spend and outcome data before it can fit a model. The documented Fivetran-to-PyMC-Marketing workflow reuses standardized tables and loader transformations. That can reduce custom data-shaping work after the inputs exist; the loader example is not a measured end-to-end time saving.
For a budget decision, separate data preparation, model identification and evidence about the proposed action.
What does this pipeline actually do?
The pattern, as implemented in the open-source PyMC-Marketing package, has five phases:
- Connect to the ad platforms.
- Standardize the schema with dbt.
- Load the result into PyMC-Marketing.
- Run inference through a Bayesian MMM.
- 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 reshape standardized tables into model inputs. Treat the following as a fragment of the documented workflow, not a runnable end-to-end pipeline. It assumes campaign_df and orders_df already contain the required standardized columns. Configure MMM separately with a likelihood, priors, adstock and saturation components. Align date ranges and row ordering, define missing-day handling, and check outcome aggregation before fitting:
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, as described in PyMC-Marketing documentation. The loader transformations are documented in the data module, checked October 2, 2026. 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. Spend can be set in anticipation of demand, and channel spends can move together. Those patterns can leave channel attribution weakly identified and sensitive to priors. Examine them in the actual data rather than assuming every MMM has the same identification problem.
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. A well-prepared input table reduces data errors, but does not resolve confounding or establish the sales response to a budget shift. Observational identification can be credible under explicit assumptions; randomization is not the only strategy.
Where a causal check belongs in this workflow
Match the check to the proposed action. For a channel budget shift, a geo or audience incrementality experiment can vary exposure or spend and measure incremental sales, with attention to spillovers, compliance and the follow-up window. Experimental results can inform model calibration, but the calibration must match the tested channel, scale and outcome. Consult the versioned package guidance before choosing its implementation.
A message, offer or price choice task is complementary research. It estimates tradeoffs among described options; it does not estimate channel reach, auction cost, frequency or incremental sales caused by moving spend.
| Method | Question | Main limitation | Best for |
|---|---|---|---|
| Historical MMM | What channel contributions are consistent with the data and model? | Confounding, correlated spend and structural assumptions | Budget scenarios under stated assumptions |
| Channel incrementality experiment | What outcome changes under assigned spend or exposure? | Spillovers, compliance, power and generalization beyond tested scale | Testing a feasible channel intervention |
| Message or offer choice task | Which described attributes change stated choice? | Task realism and transfer to actual behavior | Screening creative or offer alternatives |
A randomized discrete choice experiment is a design; Mixed Logit and ICLV are analysis models. In a simulated task, assignment identifies the contrast inside the configured model, and the outcome is modeled stated choice. Human stated-choice responses also face hypothetical bias when interpreted as purchases. Neither result certifies the revenue effect of a channel reallocation. Any interval must specify its sampling unit and which uncertainties it covers.
What should the budget team do next?
Audit inputs for date alignment, attribution-window changes, duplicate accounts and definitions of spend and orders. Inspect sensitivity to priors and model structure. Then state the proposed intervention and outcome precisely: a channel incrementality question needs exposure or spend evidence; a creative question needs a creative comparison.
The methods and validation hub and research evidence page help assess the narrower role of modeled choice experiments. Keep that evidence separate from channel-level sales evidence when reviewing a budget scenario.