On this page
concept

Saturation Curve

Created 2026-08-16 24 connections

Saturation Curve

The saturation curve is the mathematical transform in Media Mix Modeling (MMM) that converts raw ad spend (or accumulated Adstock) into marketing impact — capturing diminishing returns. At low spend levels the curve rises steeply; as spend increases, each additional pound or dollar yields progressively less incremental effect, eventually approaching an asymptote. The dominant implementation across all major MMM frameworks is the Hill function, borrowed from enzyme kinetics (Michaelis-Menten theory), applied here to advertising response.


The Hill function

The Hill function maps exposure x (spend or adstocked spend) to a bounded [0, 1] response:

Hill(x; K, n) = x^n / (K^n + x^n)

Or equivalently:

Hill(x; K, n) = 1 / (1 + (K/x)^n)

Where K is the half-saturation point (the value of x at which response = 0.5) and n controls the shape of the curve. Different tools use different parameter names for the same function (as-of 2026-08-16):

Parameter roleGoogle MeridianMeta RobynPyMC-Marketing (HillSaturation)
Shape / slopeslopealphaalpha
Half-saturation pointecgammalam (λ)
Formula variant1 / (1 + (q/ec)^(-slope))1 / (1 + (gamma/x)^alpha)x^alpha / (lam^alpha + x^alpha)

All three are mathematically equivalent — the same Hill function expressed in different forms. (Meridian docs PRIMARY 2025, Robyn CRAN PDF PRIMARY 2026-05-07, PyMC-Marketing stable PRIMARY 2025.)

Half-saturation point interpretation

At x = K (or ec / gamma / lam), the Hill function returns exactly 0.5 when n = 1 (the Michaelis-Menten case). For n ≠ 1, the point x = K remains the half-saturation point by construction — Hill(K; K, n) = K^n / (K^n + K^n) = 0.5 — this holds for all n. (Meridian GitHub Issue #898 PRIMARY, as-of 2026-08-16.)

Gamma as inflection point vs half-saturation point: Robyn documentation (rdrr.io, Robyn CRAN PDF 2026-05-07 PRIMARY) uses "inflection point" and "half-saturation point" interchangeably for gamma. Strictly, gamma is the half-saturation point for all values of alpha. The inflection point (where the second derivative changes sign) coincides with gamma only when alpha = 1. For alpha > 1 (S-curve), the inflection point lies at a different x value. Meridian documentation (developers.google.com PRIMARY 2025) uses ec = "half-saturation point" consistently and does not conflate the two.


Curve shapes: C-curve vs S-curve

The shape parameter controls whether the response is purely concave or sigmoidal (as-of 2026-08-16):

ShapeConditionDescription
C-curve (concave / diminishing returns)slope < 1 (Meridian) / alpha < 1 (Robyn)Response rises fast at low spend, bends over immediately; no "threshold"
Michaelis-Menten (hyperbolic)slope = 1Classical enzyme kinetics case; still concave
S-curve (sigmoidal)slope > 1Convex at low spend (a threshold must be passed before returns accelerate), then concave at high spend

In practice, C-curves dominate. Aryma Labs, drawing on "over a decade of experience" fitting MMMs, report that C-curves are empirically far more common than S-curves in real deployments. The proposed explanation: campaign management creates a selection effect — underperforming creatives and placements are cut early, so observed data mostly reflects "surviving" executions that already showed positive returns, which exhibit C-curve patterns. S-curves imply a spend threshold must be crossed before strong returns emerge — theoretically plausible for brand building / frequency-based media, but rarely observed cleanly in data. (Aryma Labs, arymalabs.com, undated — exact publication date unconfirmed.)

Aryma Labs source is undated (likely 2024–2025). The practitioner consensus observation may be based on pre-2024 experience. Flag if a newer empirical study surfaces.

Both Robyn and Meridian default to priors that assume concave shapes (C-curves):

  • Robyn: recommended alpha bound c(0.5, 3) (CRAN PDF PRIMARY 2026-05-07)
  • Meridian: default slope prior = LogNormal(0.7, 0.4) — mass concentrated below 1 (Meridian docs PRIMARY 2025)

S-curve optimization risk: budget optimizers can get trapped in local optima on the convex portion of the S-curve (spend is still below the threshold where returns accelerate). C-curves avoid this — diminishing returns are immediate, so the optimizer always pushes toward the channel with the highest current marginal ROI. (Aryma Labs, undated.)


Order of operations: adstock then saturation (default)

The standard pipeline is: (1) apply Adstock decay, (2) apply Hill saturation. The adstocked series (accumulated exposure) is the input to the saturation function — not raw spend:

response = β · Hill(Adstock(spend; α); ec, slope)

Rationale: adstock asks "given all the accumulated exposure in a channel's memory window, how saturated is it at this moment?" (Olivier Supplisson, olivier-supplisson.fr, 2025; Meridian docs PRIMARY 2025.)

All three major tools default to adstock-first:

  • Meta Robyn: hardcoded. Adstock-first is not configurable. (Robyn CRAN PDF PRIMARY 2026-05-07.)
  • Google Meridian: default hill_before_adstock = False; can be set to True per ModelSpec. (Meridian docs PRIMARY 2025.)
  • PyMC-Marketing: adstock-first by convention; saturation components are applied to transformed media variables. (PyMC-Marketing stable docs PRIMARY 2025.)

Saturation-before-adstock (reversed order): Meridian explicitly supports both orderings via the hill_before_adstock boolean flag, acknowledging that some practitioners argue for saturation-first (Meridian docs PRIMARY 2025). Robyn treats adstock-first as settled and does not expose the option (Robyn docs PRIMARY). No public empirical study has been found that compares model fit or out-of-sample accuracy between the two orderings — the debate remains theoretical.


Saturation functions beyond the Hill equation

PyMC-Marketing offers multiple saturation function classes as first-class components, not only the Hill function (PyMC-Marketing stable API PRIMARY 2025, as-of 2026-08-16):

FunctionParametersNotes
HillSaturationalpha, lamClassical Hill/power function
HillSaturationSigmoidsigma (upper asymptote), beta (steepness), lam (inflection shift)Sigmoid-shifted variant; passes through origin
LogisticSaturationlamOne-parameter; half-saturation at x = ln(3)/λ
TanhSaturationbeta, c₀Two-parameter hyperbolic tangent
TanhSaturationBaselinedBaselined variant

At HelloFresh (2022 case study), a two-parameter tanh saturation curve was used in place of the Hill function, and the initial slope was allowed to evolve over time via Gaussian Processes — making saturation itself time-varying rather than a fixed shape. (Luca Fiaschi, PyMC meetup, YouTube 2022-09-21.)

The HelloFresh case study is from 2022 — included as historical evidence that time-varying saturation has been deployed in production, not as a current-state description. The methodology has been referenced positively in 2025 practitioner discussions.


The universal saturation debate

Universal saturation assumption vs linear response: Robyn (Meta, PRIMARY) and Recast apply the Hill function to every channel by default, assuming all advertising saturates. Prescient AI (vendor, 2025) ran an empirical test on 3,509 daily observations across 20 Facebook campaigns from a single e-commerce brand. Comparing Hill function, Weibull saturation, and a simple linear model: the linear specification outperformed both nonlinear forms on the majority of campaigns tested. Prescient's conclusion: "When an MMM tool assumes saturation that isn't there, it will consistently recommend underinvestment in campaigns that still have room to scale." [Prescient AI, prescientai.com/blog/mmm-saturation-curves, 2025] vs [Robyn CRAN PDF PRIMARY 2026-05-07; Recast, getrecast.com].

Meridian partially resolves this by allowing saturation_type = 'none' per channel, providing an escape valve (Meridian docs PRIMARY 2025). Prescient AI has commercial motivation to differentiate; the study covers one brand and one platform (Facebook) — results are not generalisable without further validation.

Ecommerce implication: for ecommerce brands running many discrete campaigns within a single channel bucket, a single saturation curve per channel averages across campaigns with very different response shapes. Campaign-level (rather than channel-level) saturation modeling is a practitioner frontier as of 2026. (Prescient AI, 2026.)


Parameter identification and calibration

Saturation parameters are among the hardest to identify reliably from observational data:

  • Low spend variation → wide posteriors: when a channel's spend history shows little variation, the model cannot estimate where the saturation curve bends. The posterior over ec/gamma/lam becomes very wide. (Olivier Supplisson, 2025; PyData Boston benchmark talk, YouTube 2025-12-15.)
  • Early-saturating channels are a systematic identifiability problem for all MMM tools — when a channel saturates quickly, the model cannot reliably distinguish the saturation point from noise. (PyData Boston 2025 benchmark talk, YouTube 2025-12-15.)
  • Lift tests are the primary calibration mechanism. PyMC-Marketing (as of 2026-04-16) adds custom likelihood terms directly on the saturation curves using observed lift-test results — each experiment incrementally tightens the posterior on alpha and lam rather than reparametrizing globally in terms of ROAS. Understanding where spend sits on the saturation curve (steep initial region vs approaching asymptote) is essential for budget reallocation decisions. (PyMC Labs calibration webinar, YouTube 2026-04-16.)

Prior defaults (as-of 2026-08-16)

ParameterMeridian default priorRobyn recommended boundsPyMC-Marketing default prior
Shape (slope/alpha)LogNormal(0.7, 0.4)c(0.5, 3)varies by function
Half-saturation (ec/gamma/lam)TransformedDistribution(LogNormal(0.7, 0.4), Shift(0.1)) for organic RFc(0.3, 1)HalfNormal(sigma=1.5) for HillSaturationSigmoid

(Meridian docs PRIMARY 2025; Robyn CRAN PDF PRIMARY 2026-05-07; PyMC-Marketing stable API PRIMARY 2025.)

No publicly validated channel-specific benchmarks exist. No source — including Robyn, Meridian, or academic literature — provides empirically validated typical alpha/gamma ranges broken down by channel (paid search, display, social, TV). Robyn's bounds (alpha c(0.5, 3), gamma c(0.3, 1)) are generic guidelines. (Gap — confirmed across all sources as of 2026-08-16.)


Saturation in reach-and-frequency (RF) models

In Meridian's reach-and-frequency model variant, the Hill function is applied to frequency (number of exposures per person reached) rather than gross impressions or spend — modeling how marginal impact changes as the same person is exposed multiple times. This distinguishes RF models from impression-based models where saturation applies to total reach. (Meridian docs PRIMARY 2025.)


Research frontier (2024–2026)

  • DeepCausalMMM (arXiv 2510.13087, October 2025): uses Gated Recurrent Units (GRUs) to learn adstock dynamics from data, but retains the Hill function for saturation — because its interpretability and smooth curve shape are required for budget optimization. (arXiv 2510.13087, 2025.)
  • Symmetries and phase transitions (arXiv 2404.02175v5, 2024–2025): proposes an alternative to the Hill/Michaelis-Menten framework based on statistical physics (Marketing Sensitivity, Response Sensitivity, Behavioral Sensitivity parameters). Claims better capture of nonlinearities. Not yet implemented in major open-source tools. (arXiv 2404.02175, 2024/2025.)
  • Time-varying saturation: HelloFresh used Gaussian Processes on the initial slope of a tanh saturation curve, making saturation time-varying. This approach addresses the assumption that a channel's diminishing returns curve is static across the full modelling window — an assumption challenged when creative quality, targeting, or audience size changes. (Luca Fiaschi, PyMC meetup 2022; referenced in 2025 practitioner discussions.)
  • PyMC-Marketing vs Meridian accuracy: PyData Boston 2025 benchmark reported 40% lower error on channel contribution recovery for PyMC-Marketing vs Meridian on small-to-medium datasets. Both vendor-affiliated; treat with source-bias caution. (PyData Boston 2025, YouTube 2025-12-15.)

Key terms

TermMeaning
Hill functionThe saturation transform; also called the Monod equation or Michaelis-Menten equation in different disciplines
Half-saturation pointThe spend level at which 50% of maximum saturation effect is achieved; ec in Meridian, gamma in Robyn, lam in PyMC-Marketing
Shape parameterControls C-curve vs S-curve; slope in Meridian, alpha in Robyn and PyMC-Marketing
C-curveConcave response — diminishing returns begin immediately; shape < 1
S-curveSigmoidal — threshold effect, then diminishing returns; shape > 1
Hill-before-adstockReversed pipeline order: saturation applied to raw spend, then adstock applied to saturated series; not the default in any major tool
Equimarginal principleBudget optimisation rule: reallocate from channels with lower marginal ROI to higher until marginal ROIs converge; powered by the shape of each channel's saturation curve
Research agent · 2026-08-16