In brief: Saturation curves show when extra spend stops producing proportional returns — the point of diminishing returns for each channel. In Simba, these are estimated automatically per channel and displayed on the response curves tab.
Every marketing channel hits a point of diminishing returns. The first thousand dollars you spend on paid search generates more conversions per dollar than the hundred-thousandth dollar. Saturation curves model this relationship mathematically, and they are one of the most important components of any Marketing Mix Model.
Diminishing returns is a fundamental economic principle: as you increase investment in a single input while holding everything else constant, each additional unit of investment produces a smaller incremental gain than the previous one.
In marketing, this happens because:
Ignoring diminishing returns leads to dramatically wrong conclusions. A linear model would suggest that doubling your TV spend doubles your TV-driven revenue. In reality, the incremental gain from doubling spend is almost always much less than double.
Simba uses the hyperbolic tangent (tanh) saturation function to model diminishing returns. The function takes the adstocked spend for a channel and maps it to a value between 0 and 1, representing the fraction of maximum possible effect.
The exact formula implemented in Simba is:
effective_spend = tanh( x / (scalar x alpha) )
Where:
The product scalar x alpha acts as the effective half-saturation point — the spend level at which the tanh function reaches approximately 0.76 (tanh(1) = 0.76). Smaller values of this product mean the channel saturates faster; larger values mean it can absorb more spend before flattening.
Left: varying alpha with a fixed scalar shows how the shape parameter controls curvature. Center: varying scalar shifts the curve along the spend axis. Right: the tanh curve versus a linear assumption — the shaded area represents overstated effect from ignoring diminishing returns.
The implementation includes two safeguards for numerical stability:
These are implementation details that do not affect the mathematical interpretation of the curve.
Unlike simpler formulations that use a single “scale” parameter, Simba’s tanh function uses two distinct parameters that serve complementary roles.
The scalar parameter anchors the saturation curve to the scale of your data. During model fitting, it is set to the maximum observed value for each channel. This means:
The scalar is not estimated by the model — it is fixed from your data. In the UI, the “Saturation” column in the prior table displays this value, and you can adjust it if you have reason to believe the channel’s potential range extends beyond the historical maximum (for example, if you plan to significantly increase spend).
The alpha parameter controls the curvature of the saturation function. It determines how quickly the channel transitions from the efficient (steep) region to the saturated (flat) region:
Alpha is estimated by the model using a Gamma prior:
A wider alpha_sd gives the model more freedom to learn the saturation shape from data. A narrow alpha_sd constrains the model to stay close to the prior mean of 1.7.
Simba visualizes the fitted saturation curve for each channel, showing the relationship between spend and modeled effect.
Left: the saturation curve with three spend zones highlighted. Right: the marginal return curve (the derivative of the saturation function) shows the incremental effect of each additional dollar.
The initial steep portion of the curve represents the range where your spend is most efficient. Each additional dollar generates a large incremental effect. If your current spend for a channel falls in this region, there may be opportunity to increase investment profitably.
The middle portion of the curve is where diminishing returns begin to take hold. Spend is still productive but less efficient than at lower levels. Many well-optimized channels operate in this zone.
When the curve flattens, additional spend produces very little incremental effect. If a channel’s current spend falls in this region, the model is suggesting that the budget would generate more return if reallocated to a less-saturated channel.
The marginal return curve — the derivative of the saturation function — shows the incremental effect of one additional dollar at each spend level. This is directly used by Simba’s optimizer: it allocates budget such that the marginal return per dollar is equalized across all channels, maximizing total incremental outcome for a given budget.
Different channels saturate at different rates because they have different audience sizes, frequency dynamics, and competitive environments.
Illustrative saturation profiles for four channel types. Brand search saturates quickly (small scalar, low alpha) while TV has a long runway before diminishing returns (large scalar, high alpha).
Typical patterns:
Simba estimates the saturation parameters from your data, with alpha_sd controlling how much freedom the model has to deviate from the prior mean of 1.7. If you have domain knowledge about a channel’s saturation behavior, you can adjust the scalar and alpha_sd in the prior table. See Priors and Distributions.
A critical aspect of Simba’s model is the order of operations. For each media channel, the transformation pipeline is:
Left: raw weekly spend shows concentrated bursts. Center: after geometric adstock (decay=0.6), spend is smoothed across weeks. Right: after tanh saturation, the peaks are compressed — high-spend weeks produce less incremental effect per dollar than low-spend weeks.
This ordering matters because adstock smooths out spend spikes before saturation is applied. A heavy spend week is partially spread over subsequent weeks, which moderates the apparent diminishing returns. If saturation were applied first, the heavy spend week would be aggressively capped, and the subsequent carryover would be much smaller.
When setting up a model in Simba, you configure saturation as part of the channel prior specification.
Simba’s smart priors automatically calculate saturation parameters for each channel:
scale x 0.25.If you have strong domain knowledge about a channel’s saturation behavior, you can adjust:
| UI Field | Parameter | Effect |
|---|---|---|
| Saturation | scalar | Shifts the curve along the spend axis. Increase if you expect to scale spend well beyond historical levels. |
| Diminishing Return / alpha_sd | alpha_sd | Controls how much the model can deviate from the alpha mean of 1.7. Wider values give the model more freedom. |
An important detail of smart prior calculation: channel coefficient priors are pre-adjusted for expected saturation. Specifically, the coefficient mean is divided by tanh(avg_spend / (max_spend x scale)). This means the coefficient reflects the linear-equivalent effect at historical spend levels, so the posterior coefficient is interpretable as the effect per unit of saturated media.
Saturation curves are the single most important input to budget optimization. Without them, an optimizer would simply recommend putting all budget into the channel with the highest average ROAS — which ignores the fact that ROAS declines as spend increases.
Simba’s optimizer evaluates the full response curve (adstock + saturation + coefficient) across all posterior samples to account for parameter uncertainty. It can:
The optimizer uses the exact same tanh function and posterior parameter samples as the fitted model, so the response curves used for optimization are fully consistent with the model’s estimates.
tanh(x / (scalar x alpha)), where scalar anchors to data scale and alpha controls curvature.See this in action: Start your free 28-day trial — no credit card required.