What is the method comparison?
The method comparison shows the same channels estimated by two different marketing-mix models side by side — contribution and marginal return under each. Both fit the same weekly panel (margin as response, per-channel spend as predictors, adstock and saturation transforms); they differ in estimation machinery, and the comparison exists because agreement between two unlike methods is the cheapest robustness check an MMM can offer.
Formula
one row per channel: ridge contribution | ridge marginal return
PyMC contribution | PyMC marginal return
Worked example
Search reads €260k contribution under ridge and €240k under PyMC — an 8% gap on different machinery; treat €250k as solid. Display reads €60k under ridge but €15k under PyMC. That disagreement is the finding: display's spend history doesn't identify its effect well, and no budget decision should lean on either display number alone.
How Saldo Metrics computes it
Ridge with saturation (ridge_saturation) is the default: a deterministic
least-squares regression over adstocked, Hill-saturated weekly spend with monthly
seasonality terms, channel coefficients constrained to be non-negative, and
adstock decay picked from a small grid by fit quality. Despite the name, it applies
no ridge (L2) penalty unless the org has configured channel priors; when it has,
the priors anchor the channel split against multicollinearity. It runs weekly on
schedule and is exactly reproducible. Bayesian PyMC fits a simpler structure
by MCMC sampling: no seasonality terms, adstock decay fixed at 0.3, and channel
priors not used. It samples full posteriors but stores only their means, runs much
slower, and is not bit-reproducible. It is not part of the hosted scheduled run —
it is an opt-in for local and development runs. v_mmm_method_comparison pivots
the latest run of each method into one row per channel, and the app shows the
comparison only once a PyMC run exists, so a hosted account normally doesn't see
it.
Why it matters
Every MMM answer is a model artifact, and channels with correlated spend histories are where models quietly go wrong. Two methods with different failure modes disagreeing on a channel is the model telling you its answer there is soft — information a single method cannot give you about itself. Where only the default method has run, that check is not available and the single fit's R² is the main guide.
Common mistakes
- Picking the method whose number you prefer. The comparison is a consistency check; where the methods disagree the honest conclusion is uncertainty, not a choice.
- Reading a stale PyMC column against a fresh ridge run. The view serves each method's latest run; if their fit windows differ, part of any gap is just data vintage.
- Expecting decimal agreement. Different estimators on noisy data agreeing within 10–20% is agreement.
Where you see this in the app
Marketing → MMM, in the ridge-vs-PyMC comparison table — shown only when a PyMC run exists for the organization.