Google Meridian in Production: 8 Lessons from Real-World MMM

Albert Betancur
Albert BetancurSenior Data Engineer, dLD Tech10 August 2026

This post is the follow-up to Marketing Mix Modelling with Google Meridian: What It Is and Why It Matters. If you are already familiar with what MMM does and why it belongs in your marketing stack, read on. What follows is a record of eight hard-won lessons from running Meridian in production on real campaigns and real KPIs, along with the practical challenges you need to plan for before your first model run.


Key Lessons Learned

Lesson 1: Data Frequency Must Match KPI Measurement Frequency

This was the most painful lesson. We initially tried to run a brand health (consideration) model at weekly granularity because our spend data was weekly. The problem: brand consideration is measured by a monthly survey. The same value repeats for every week within a month.

When a KPI has zero within-month variation, the likelihood function provides zero gradient to the NUTS sampler. The chains cannot mix because there is nothing to differentiate good parameter values from bad ones within each month. All four chains converge to a single point, R-hat statistics blow up to 10^15, and effective sample size collapses to single digits.

The fix: Aggregate to monthly observations. This reduced our dataset from 170 weekly rows to 39 monthly rows, but the model converged immediately on the first run at the correct frequency.

Rule of thumb: Match your data frequency to the frequency at which your KPI actually varies. If your KPI is a monthly survey, run a monthly model.

Lesson 2: The Observation-to-Parameter Ratio Is a Hard Constraint

Bayesian models can technically be fit on any amount of data, but the obs/param ratio determines whether the data can actually update the priors or whether posteriors simply reflect what you assumed before running the model.

We identified this as the root cause of several failed runs:

ConfigurationObsFree ParamsRatioResult
8 channels, no controls, 3 knots39361.1xR-hat 10^15, posterior = prior
4 channels, no controls, 3 knots39162.4xConverged, R²=0.48
4 channels, 2 controls, AKS39241.6xConverged, R²=0.91

Adding channels is not free. Every additional channel adds at least three free parameters (ROI, saturation, and adstock). On a 39-row dataset, you run out of degrees of freedom quickly.

Practical guidance: Aim for obs/param > 2x for reliable convergence. Below 1.5x, be prepared for identification problems. Prioritise channels with strong prior evidence or enough active spend periods to be identifiable.

Lesson 3: Default Prior Scales Are Calibrated for Normalised Spend

Meridian's default saturation prior (ec_m) assumes spend data has been normalised to a 0–1 or similar unit scale. If you pass spend in raw monetary units (e.g., thousands of dollars), the default ec_m = 0.8 means the model believes the channel reaches half its maximum effect at $800 of spend, which for most channels is a fraction of actual weekly investment.

The consequence is a flat, saturated response curve that looks like a step function: the model believes the channel is already fully saturated at any observable spend level, so it cannot distinguish high-spend weeks from low-spend weeks. The scenario planner then shows absurd predictions.

The fix: Set ec_m priors explicitly, anchored to the P75 of each channel's active-week spend. This gives the saturation curve a reasonable centre point around observed data. We set these as TruncatedNormal(loc=P75, scale=0.5×P75) for each channel.

Lesson 4: Adstock Parameters Encode Frequency-Specific Business Logic

Adstock (alpha_m) represents how much of a channel's effect carries over to the next time period. At weekly frequency, TV might have a carry-over of 0.6 to 0.8 (strong week-to-week persistence). At monthly frequency, that same channel has a much smaller carry-over (perhaps 0.45 to 0.55) because a month is a much longer gap.

We initially carried weekly alpha priors forward into our monthly model without adjustment. This overstated carryover and distorted the model's understanding of how long brand effects persist.

Rule: Always re-derive adstock priors when changing data frequency. Weekly alpha is not interchangeable with monthly alpha.

Lesson 5: A Flexible Baseline Is Essential for Control Variable Validity

In an early run with only three manually-specified baseline knots, we observed a competitor activity control variable with a positive coefficient (higher competitor spend, higher brand consideration) with a credible interval that excluded zero. This contradicted the expected direction entirely.

The diagnosis: with a rigid baseline, the model was using the competitor variable to absorb unexplained trend variation. The control was fitting trend, not competitor effects.

The fix: Enabling Adaptive Knot Selection (AKS) gave the baseline spline nine knots, enough flexibility to capture underlying trends independently. After this change, the competitor variable's credible interval crossed zero, reflecting genuine uncertainty rather than a spurious correlation.

Principle: Control variables should only be added alongside a flexible enough baseline to separate trend from causal effects.

Lesson 6: R-hat Is Not a Guarantee of Identification

R-hat below 1.01 confirms chains mixed, but it does not confirm the posterior is informative. In our structural non-identification runs, R-hat was exactly 1.0 across all parameters because all four chains converged to the same degenerate solution: the prior. Chains that all return the prior are perfectly "converged" from an R-hat perspective.

To diagnose structural non-identification, check whether the posterior matches the prior to three decimal places. If it does, the data is providing no information regardless of what R-hat says.

Lesson 7: Incrementality Data Is the Only Reliable ROI Anchor

MMM ROI estimates are sensitive to the prior. Without external calibration (geo-based incrementality tests, holdout experiments), the model will return ROI estimates that are plausible but not independently verified. Two very different priors can produce meaningfully different ROI posteriors while both achieving good R² and MAPE.

For channels where you have incrementality test results, use them to calibrate the ROI prior. For channels where you do not, be honest with stakeholders that the ROI estimate reflects the model's prior beliefs updated by observational patterns, not a causal experiment.

Lesson 8: The Optimiser Reveals Diminishing Returns Explicitly

One of the most commercially valuable outputs of a well-fit MMM is the spend optimisation. Because each channel has a saturation curve, the optimiser can show precisely where additional investment stops generating proportional returns.

In our experience, shifting budgets according to the model's recommendations typically involves redistributing significant spend from saturated channels to under-invested ones. The aggregate effect is the same KPI outcome for less total spend, or a higher KPI outcome for the same spend. This is a direct business case for MMM: the optimiser makes diminishing returns visible and actionable.


Challenges to Plan For

Computational Infrastructure

Meridian runs on GPU for production-scale models. A four-chain run with 2,000 kept samples takes 2–5 minutes on a single GPU. On CPU, the same run can take 60–90 minutes. Plan for cloud GPU infrastructure (we use Google Cloud Run with GPU) and budget for the compute cost.

Data Pipeline Complexity

MMM requires clean, complete, consistently-structured time series data across all channels and all control variables. Missing weeks, broken GCS uploads, unit inconsistencies, or column name mismatches will cause model failures. Building and maintaining the data pipeline is often more work than configuring the model itself.

Stakeholder Management Around Uncertainty

Clients and business stakeholders are accustomed to point estimates from digital dashboards. Credible intervals (especially wide ones) require explanation. "We are 90% confident TV contributed between 8% and 34% of conversions" is statistically honest but can be uncomfortable for decision-makers who want a single number.

Invest in educating stakeholders on why uncertainty quantification is a feature, not a limitation. A model that admits what it does not know is more trustworthy than one that pretends to precision it has not earned.

Prior Elicitation Takes Time and Domain Knowledge

Setting priors correctly requires understanding the business context: how long does brand recall persist for a TV campaign? At what spend level does paid search start to saturate in this specific market? These are not questions a data scientist can answer alone. They require collaboration with media planners, channel specialists, and sometimes industry benchmarks.

Allocate time for prior elicitation before the first model run, not after.


Conclusion

Google Meridian makes production-grade Bayesian MMM accessible to in-house analytics teams. The framework is sound, the diagnostics are comprehensive, and the optimisation outputs are genuinely useful for marketing budget decisions.

But MMM is not a plug-and-play tool. Getting reliable, business-actionable results requires careful attention to data frequency, parameter dimensionality, prior calibration, and baseline flexibility. The teams that get the most value from MMM are the ones that treat model building as an iterative process, each run generating diagnostic information that informs the next one, rather than expecting a single run to produce a final answer.

The reward for that investment is a measurement framework that is privacy-safe, captures long-term brand effects, quantifies uncertainty honestly, and turns the marketing budget into a strategically optimised asset.


This post is based on practical experience running Google Meridian 1.7.1 in production. Model configurations, run parameters, and diagnostic thresholds referenced throughout reflect real deployment decisions rather than hypothetical examples.

Frequently Asked Questions

My Google Meridian R-hat is 1.0 across all parameters. Does that mean the model converged correctly?

Not necessarily. R-hat below 1.01 confirms that your MCMC chains mixed, but it does not confirm the posterior is informative. When a model is structurally non-identified, all four chains can converge to the same degenerate solution: the prior. Chains returning the prior are perfectly converged from an R-hat perspective. To detect this, compare your posterior means and variances to your prior distributions. If they match to three decimal places, the data is providing no information to update the model regardless of what R-hat reports.

How many media channels can I realistically include in a Google Meridian model?

The practical limit depends on your dataset size. Each additional channel adds at least three free parameters (ROI coefficient, saturation, and adstock). Aim for an observation-to-parameter ratio above 2x for reliable convergence. On a 39-observation monthly dataset, that limits you to roughly four or five channels before identification problems emerge. Prioritise channels with strong prior evidence or enough active spend periods to be identifiable, and consider excluding channels with sparse spend histories.

Why does my Meridian saturation curve appear flat even at low spend levels?

This is almost always caused by default saturation priors (ec_m) that assume normalised spend data. If your spend is in raw monetary units, the model interprets any observable spend level as fully saturated, producing a flat step-function response curve. The fix is to set ec_m priors explicitly, anchored to the 75th percentile of each channel's active-week spend, so the saturation curve has a reasonable centre point within your observed data range.

Why did my Meridian model fail to converge even though my spend data is complete?

The most common cause is a mismatch between spend data frequency and KPI measurement frequency. If your KPI is measured monthly (a brand health survey, for example) but your spend data is weekly, the same KPI value repeats across every week within a month. This gives the NUTS sampler zero gradient to work with: there is nothing to differentiate good parameter values from bad ones within each month. Aggregate all data to the frequency at which your KPI actually varies. If your KPI is monthly, run a monthly model.

Can I trust MMM ROI estimates if I have not run any incrementality experiments?

With caution. MMM ROI estimates are sensitive to the prior distribution you set. Without external calibration from geo holdout tests or other experiments, two meaningfully different priors can produce different ROI posteriors while both achieving good model fit. For channels where you have experiment results, use them to anchor the ROI prior. For channels where you do not, be transparent with stakeholders that the estimate reflects observational patterns updated from a prior assumption, not a causal measurement.