MMM Framework — Consultant Artifact v0.1.0 · 2026-06-12

Client Data Onboarding Checklist

Data inventory, MFF format and hygiene, sufficiency gates, and governance — what must be true of the data before anything is fit.

Data inventory

What must arrive before anything is modeled.

KPI series — revenue or units, covering the full modeling window.One series per outcome; weekly is the reference frequency.
Media spend by channel — every channel, full window.Prefer spend over impressions when ROI and budget-allocation readouts are wanted directly (contributions-per-dollar need dollars in the denominator); use impressions/GRPs when CPMs shifted materially, then convert with cost data.
Controls — price, distribution, promotions, and a category-demand proxy.If spend chases demand, the demand proxy is a mandatory confounder control, not optional.
Experiment history — past geo lift tests / RCTs with estimates and intervals.These become calibration anchors; even old tests narrow the right posteriors.

Format & hygiene

The Master Flat File (MFF) contract the loader validates.

Long-format MFF — eight columns: Period, Geography, Product, Campaign, Outlet, Creative, VariableName, VariableValue.All eight columns must exist; the five dimension columns may be blank for data that doesn't use them. One numeric value per row.
Dates parse — default format %Y-%m-%d; consistent frequency (W weekly / D daily / M monthly).Unparseable dates fail loading. Weekly (weeks ending Sunday) is the default and what the published benchmarks use.
Deduplicated — one row per period × dimensions × variable.Duplicate rows silently double values when pivoted.
NaN-vs-0 policy confirmed with the client.Default: missing media values fill with 0.0 (no record of spend = no spend); missing control values forward-fill. Confirm this matches reality before loading.
Currency and units consistent across the window and across channels.Mixed currencies or a mid-window unit change corrupts ROI denominators.
Sanity — no negative spend, declared variables all present.Undeclared names are ignored with a warning; missing declared names fail loading. The loader and EDA module catch most structural errors.

Sufficiency gates

Minimums below which estimates are priors wearing a model.

History length — 104+ weekly observations (2 years) preferred.Two full seasonal cycles are needed to separate seasonality from trend and from media timing; one cycle leaves them confounded.
Zero-spend share — under 50% zero-spend weeks per channel.A channel that's almost always dark carries too little signal to estimate a response curve.
Spend variation & positivity — channels sometimes go dark or near-dark, and channels do not all flight together.ROI is a do(spend = 0) counterfactual: a channel that never goes dark gives the model no observations near zero, so the answer is extrapolated from the prior. Synchronized flighting makes the split between channels unidentifiable.
Controls cover the entire series.Gaps in confounders (price, distribution, promo) become gaps in causal adjustment exactly where you need it.
Geo counts, if hierarchical — at least 2 geographies, and per-geo spend variation (CoV across geos ≥ ~0.15 per channel).The binding constraint is not the count but per-geo spend variation; channels spent uniformly across geos carry no geo-level identifying information.

Governance

Data dictionary received and reconciled against the declared variables.
Refresh cadence agreed — who delivers, how often, in what format.
PII confirmation — none needed for MMM.The model consumes aggregate spend and KPI series only; confirm no user-level data is in the delivery.
Named contact for data anomalies, with an agreed turnaround.

The gate

Onboarding ends with the EDA pre-flight (see the MMM Diagnostic Checklist): outlier screen, CoV screen, collinearity screen, demand-chasing screen, causal-role classification. Fitting starts only after this page and that pre-flight are signed.