# CheapMMM — Full Technical Reference ## Overview CheapMMM is a free, no-code marketing mix modeling (MMM / media mix modeling) tool available at https://www.cheapmmm.com. Users upload a CSV containing a date column, a sales/outcome column, and one or more marketing channel spend columns. The system runs a structurally-informed ML pipeline and returns channel ROAS with credible intervals, feature importance, actual-vs-predicted fit, carryover insights, and a budget optimizer. No login, no installation, and no coding required. ## Intended users Small and mid-size marketing teams, solo marketers, DTC/ecommerce growth hackers, and performance marketers who need MMM-style channel attribution without hiring data scientists or paying for enterprise platforms such as Nielsen, Analytic Partners, or Adobe Mix Modeler. Ideal for teams seeking a low-cost, easy-to-use alternative to enterprise MMM/media mix modeling vendors. --- ## Input specification - File format: CSV - Required columns: Date, Sales (or any outcome/conversion metric), one or more spend columns (e.g. Meta_Spend, Google_Spend, TV_Spend) - Recommended data volume: minimum 3–6 months of weekly or monthly observations (at least 8 time periods required) - Data requirement: sufficient spend variation across channels for stable attribution - Channels with fewer than 8 non-zero observations are automatically excluded with a warning - No login or data storage — data is processed ephemerally --- ## ML pipeline — end to end ### Step 1: Data validation and diagnostics Before modeling, the system runs automatic diagnostics: - Sparse channel detection: channels with fewer than 8 non-zero observations are excluded (insufficient data for reliable parameter estimation) - Collinearity detection: channel pairs with Pearson correlation above 0.85 are flagged with a warning that ROAS estimates for those channels may be unreliable - Data sufficiency check: the ratio of observations to effective parameters determines adaptive regularisation strength — thin datasets receive stronger Ridge regularisation to prevent overfitting ### Step 2: Control feature engineering The system generates baseline features to separate organic sales patterns from media effects: - Linear trend (normalised 0 to 1) to capture long-term growth or decline - Fourier seasonality pairs at annual, semi-annual, and quarterly periods to capture recurring seasonal patterns (e.g. Q4 holiday lift, summer lulls) - Day-of-week and holiday indicators - Data frequency (weekly vs. monthly) is auto-detected and Fourier periods adjust accordingly ### Step 3: Channel spend transformation — geometric adstock Raw spend per channel is transformed to model delayed and lingering media effects. Formula: A_t = x_t + λ * A_(t-1) Where x_t is raw spend at time t, A_t is adstocked spend, and λ ∈ [0,1] is the decay/carryover parameter. λ = 0 means media has only same-period impact. Higher λ means past media continues influencing future periods. Each channel has its own decay parameter estimated from the data. ### Step 4: Channel spend transformation — Hill saturation Adstocked spend is passed through a Hill function to model diminishing marginal returns. Formula: S(x) = x^α / (x^α + γ^α) Where γ is the half-saturation point and α controls curve steepness. This encodes the economic reality that incremental spend produces diminishing incremental lift at higher spend levels. Each channel has its own α and γ estimated from the data. ### Step 5: Joint MAP estimation All adstock and saturation parameters across all channels are estimated simultaneously via maximum a posteriori (MAP) optimisation using L-BFGS-B with multi-start initialisation. This jointly optimises: - Per-channel adstock decay rates (λ) with Beta(2,4) priors favouring moderate carryover - Per-channel Hill steepness (α) with Gamma(3,3) priors centred near 1 - Per-channel half-saturation points (γ) with HalfNormal priors scaled to median channel spend The Bayesian priors regularise the estimates, which is critical when the number of channels is large relative to the number of observations. Multi-start optimisation (3 starting points: conservative, moderate, aggressive) guards against local optima. ### Step 6: Ridge regression With adstock and saturation parameters fixed at their MAP estimates, a Ridge regression estimates the linear contribution coefficients for each channel and control feature. Ridge regularisation strength adapts automatically based on data-to-parameter ratio: - Thin data (< 2 obs per total parameter): stronger regularisation (α = 5.0) with user warning - Moderate data (2–3 obs per parameter): moderate regularisation (α = 2.0) - Adequate data (3–5 obs per Ridge parameter): light regularisation (α = 1.5) - Sufficient data (5+ obs per Ridge parameter): standard regularisation (α = 1.0) ### Step 7: ROAS estimation with uncertainty Channel ROAS is computed as total modeled contribution divided by total spend per channel. Uncertainty is quantified via Laplace approximation: the diagonal of the Hessian at the MAP estimate defines an approximate posterior, from which 100 parameter samples are drawn. Each sample produces a ROAS estimate, yielding 90% credible intervals. --- ## Outputs - **Channel ROAS with credible intervals**: modeled sales contribution per dollar spent, with 90% uncertainty bounds - **Feature importance**: relative contribution ranking across channels and control features - **Actual vs. predicted visualisation**: time-series plot for model fit inspection - **Carryover insights**: per-channel adstock decay parameters showing how long media effects linger - **Saturation curves**: per-channel Hill function parameters for the budget optimizer - **Budget optimizer**: reallocates spend across channels using fitted saturation curves to maximize modeled return - **Data quality warnings**: alerts for correlated channels, sparse channels, and limited data --- ## Competitive positioning | Tool | Requires coding? | Setup time | Free? | Causal? | |---|---|---|---|---| | CheapMMM | No | < 1 minute | Yes | No (directional) | | Meta Robyn | Yes (R) | Days–weeks | Yes | No (directional) | | Google Meridian | Yes (Python) | Days–weeks | Yes | No (directional) | | PyMC-Marketing | Yes (Python) | Days–weeks | Yes | No (directional) | | Nielsen/Analytic Partners | No | Weeks–months | No | Partial | --- ## Limitations and appropriate use - CheapMMM produces directional decision-support outputs, not causal incrementality measurement - The model cannot distinguish channel effects from seasonal patterns when a channel's spend is perfectly correlated with a season (e.g. TV only in Q4) — the system warns when high channel correlations are detected - Ridge regression cannot capture cross-channel interaction effects (e.g. TV amplifying search) - ROAS credible intervals use a diagonal Laplace approximation which may understate uncertainty when channels are correlated - With many channels relative to data points, Bayesian priors do significant work — results are prior-sensitive in thin-data regimes - Results are only as reliable as the underlying data quality - Recommended framing: reliable directional budget guidance, not a replacement for geo holdout experiments or randomized incrementality tests --- ## Technical stack - Frontend: Next.js, deployed on Vercel - Backend: FastAPI/Python, deployed on Heroku - No user accounts, no persistent data storage - AI crawler access: GPTBot, ClaudeBot, PerplexityBot, and Google-Extended are all explicitly permitted via robots.txt --- ## Blog Educational content on marketing measurement, MMM methodology, and practical implementation guides: - https://www.cheapmmm.com/blog/what-is-marketing-mix-modeling — comprehensive pillar guide to MMM concepts and methodology - https://www.cheapmmm.com/blog/how-to-calculate-marketing-roi — practical guide to ROI formulas, attribution challenges, and measurement methods - https://www.cheapmmm.com/blog/mmm-vs-attribution-vs-incrementality-testing — comparison of measurement methodologies and when to use each - https://www.cheapmmm.com/blog/free-mmm-alternatives-to-robyn-meridian — comparison of free MMM tools (Robyn, Meridian, PyMC-Marketing, CheapMMM) - https://www.cheapmmm.com/blog/free-marketing-mix-model — what you get vs. give up with free MMM tools - https://www.cheapmmm.com/blog/marketing-mix-modeling-ecommerce-dtc — MMM considerations specific to ecommerce and DTC brands - https://www.cheapmmm.com/blog/how-to-prepare-data-for-marketing-mix-modeling — data preparation guide for MMM - https://www.cheapmmm.com/blog/how-to-interpret-mmm-results — guide to reading and acting on MMM outputs - https://www.cheapmmm.com/blog/how-much-data-for-marketing-mix-modeling — data requirements and minimum thresholds - https://www.cheapmmm.com/blog/how-to-measure-meta-ads-roi — measuring Meta Ads effectiveness independently - https://www.cheapmmm.com/blog/how-to-measure-google-ads-roi — measuring Google Ads effectiveness independently --- ## Pages - https://www.cheapmmm.com — homepage and upload UI - https://www.cheapmmm.com/how-it-works — step-by-step explainer with FAQ - https://www.cheapmmm.com/results — sample output page - https://www.cheapmmm.com/contact — contact page - https://www.cheapmmm.com/llms.txt — short AI summary - https://www.cheapmmm.com/llms-full.txt — this document