Skip to main content
Back to blog
Budget Optimisation
Customer Lifetime Value
PyMC-Marketing
Marketing Mix Modeling
Bayesian MMM

When Should Your Budget Optimiser Use LTV?

Marketing budget optimisation gets framed as a choice between two competing models, one for conversions and one for profit. It is really one response model and two objectives. Which objective you are entitled to use depends entirely on whether you trust your value per incremental acquisition.

Niall OultonAugust 28, 202610 min read

The fast answer: do not ask an MMM to invent the value of a customer. If lifetime value is not trustworthy, optimise the allocation at a fixed spend level and compare it with the historical allocation. If value per incremental acquisition is trustworthy, put that value inside the objective. The optimiser can then decide both where to spend and how much to spend.

One response model feeding two optimisation objectives: fixed-budget acquisitions and floating-spend profit
Same response surface, different business question.Swipe the chart to see all of it

Marketing budget optimisation often gets framed as a choice between two different models: one that maximises conversions and another that maximises profit. That is usually the wrong mental model.

The hard statistical work is estimating the response to spend. Once the MMM has learnt how incremental acquisitions change as each channel moves through adstock and saturation, the optimisation problem sits on top of that response surface.

What changes is the objective.

If finance has already set a £200k budget, the question is straightforward: what allocation gets the most acquisitions from £200k? If the business also trusts that each incremental acquisition is worth, say, £50 in discounted contribution value, the question becomes different: what allocation and total spend maximise expected contribution value after marketing cost?

Those are not rival methods. The second problem contains the first.

Start with the response model, not the objective

Write the expected incremental acquisitions over the planning horizon as:

A(s)

where s is the vector of channel spends. The model can be arbitrarily realistic: adstock, saturation, geo dimensions, channel interactions, time-varying effects and posterior uncertainty can all sit inside A(s).

For the worked example below, we deliberately use something simpler so the mechanism is visible. Each channel has a saturating response:

Ai(si) = Amax,i [1 − exp(−si / ki)]

The values are illustrative, not client data. Spend is measured in £000 and acquisitions in 000s.

Four illustrative saturating channel response curves with historical and fixed-budget optimum points marked
The optimisation layer only needs a mapping from spend to expected incremental response. Circles show the historical allocation, stars the £200k acquisition-maximising allocation.Swipe the chart to see all of it

The curves already contain the key economic fact: the next £1,000 does not generate the same number of acquisitions everywhere. As a channel saturates, its marginal response falls.

That is what the optimiser exploits.

Mode 1: no trusted LTV, so maximise acquisitions at fixed spend

Suppose total marketing spend has already been decided as B. Then the objective is:

s*B = arg max E[A(s)]  subject to  Σsi = B

plus whatever practical channel bounds and business rules apply.

This is the safest formulation when you trust the MMM response but do not trust the conversion-to-value layer. You are not pretending that a new customer is worth £80, £120 or £250. You are simply asking for the best allocation of a budget that has been set elsewhere.

The correct benchmark is the historical allocation at the same total spend. That matters because otherwise the optimiser gets credit for changing both efficiency and scale.

In our toy example the historical £200k allocation is:

ChannelHistoricalMax acquisitions at £200k
Paid search£100k£52k
Paid social£60k£64k
Affiliates£20k£27k
Online video£20k£57k
Total£200k£200k

The historical mix produces about 5.28k incremental acquisitions. Reallocation on the same response curves produces about 5.70k, an illustrative uplift of 8.0% with no extra money.

Historical versus acquisition-maximising allocation at the same two hundred thousand pound total budget
Fixed-budget optimisation is an allocation question. The spend level is an input, not an output.Swipe the chart to see all of it

At an interior optimum, the active channels are pushed towards the same marginal acquisitions per pound. If one channel could still generate materially more acquisitions from the next pound than another, shifting money towards it would improve the objective.

That is the fixed-budget condition. It says nothing about whether £200k itself is too high or too low.

Mode 2: trusted LTV, so maximise value minus spend

Now suppose the business has a defensible value V for each incremental acquisition. The objective becomes:

s*V = arg max { V · E[A(s)] − Σsi }

There is no economic reason to force Σsᵢ to equal the old budget. Spend is now a decision variable.

This is the crucial difference. If an incremental acquisition is worth more, the model should be willing to buy deeper into the response curves. If it is worth less, the model should stop earlier.

The two modes are easier to see if we define the efficient acquisition frontier:

F(B) = max E[A(s)]  subject to  Σsi = B

F(B) answers the fixed-budget question for every possible budget level. Profit optimisation is then just:

B* = arg maxB { V · F(B) − B }

So the profit problem is not a new response model. It is the same fixed-budget frontier with one additional choice: which point on the frontier is economically worth buying?

Efficient acquisition frontier showing the fixed-budget point and profit-optimal points at three LTV assumptions
At £50 of value per incremental acquisition, the profit optimum happens to sit near the £200k reference budget. At £35 it falls to about £76k. At £100 it rises to about £431k.Swipe the chart to see all of it

In this simulation:

ObjectiveTotal spendIncremental acquisitionsExpected marketing profit
Max acquisitions, fixed budget£200k5.70knot defined without value
Max profit, V = £35£76k2.76k£20k
Max profit, V = £50£195k5.60k£85k
Max profit, V = £100£431k9.00k£469k

Illustrative profit here means V × incremental acquisitions − marketing spend. In a real implementation, V should already be the appropriate net contribution value for the outcome being optimised.

The response curves did not change between those rows. Only the value assumption changed.

The stopping rule is marginal CAC = LTV

The profit objective gives a very useful first-order condition. For an active channel at an interior optimum:

V · ∂E[A]/∂si = 1

Rearranging:

marginal CACi = V

This is the practical rule to remember.

The optimiser keeps spending until the next acquisition costs as much as that acquisition is worth. That is marginal CAC, not average CAC. A channel can have an average CAC comfortably below LTV while its next pound of spend is already uneconomic. Conversely, stopping whenever average CAC reaches LTV will generally stop too early, because the earlier, cheaper acquisitions are pulling the average down.

Marginal CAC at the profit optimum tracking LTV for every active channel, drawn as nested rings on the identity line
In the toy response system, every active channel is pushed to the same economic stopping condition. Channels that cannot clear the threshold at zero spend simply stay off.Swipe the chart to see all of it

This also explains why total spend can move sharply with LTV.

Stacked profit-optimal spend by channel as lifetime value rises from twenty to two hundred pounds
Higher value per acquisition makes deeper levels of saturation economically rational. The optimiser is choosing scale as well as mix.Swipe the chart to see all of it

What counts as a trusted LTV?

This is where most of the business judgement lives.

A value estimate does not need to be known with perfect precision before it is useful. It needs to be reliable enough that the budget recommendation is stable over the plausible range. If an LTV of £45 implies £160k of spend and £55 implies £235k, that sensitivity is decision-relevant. If every plausible value between £45 and £55 produces roughly the same plan, you do not need false decimal-point precision.

The bigger risk is using the wrong value concept entirely. For profit optimisation, V should usually be discounted incremental contribution value, not headline revenue LTV. If the model outcome is a lead rather than an acquired customer, then customer LTV cannot be multiplied directly by leads unless the lead-to-customer conversion and its economics are already incorporated. If acquired customers differ in quality by channel, market or cohort, a single scalar LTV can also distort allocation.

PyMC-Marketing’s CLV tools explicitly support discounted lifetime-value calculations, and its Gamma-Gamma workflow notes that monetary value can represent profit or revenue as long as it is defined consistently. That flexibility is useful, but the optimiser still needs the value concept that matches the business objective. See the CLV utility documentation and the CLV quickstart.

A good practical test is to ask five questions before switching to floating-spend profit mode:

  • Does the value correspond to the exact outcome the MMM predicts?
  • Is it contribution value rather than top-line revenue if the stated objective is profit?
  • Are retention, fulfilment, servicing and discounting treated consistently?
  • Does customer quality vary enough by channel or segment that one scalar value is misleading?
  • Is the recommended budget reasonably stable across the credible LTV range?

If several of those answers are shaky, fixed-budget acquisition optimisation is not a second-rate fallback. It is the correctly scoped question.

The Bayesian version should propagate both uncertainties

An MMM does not really give one response curve. It gives a posterior distribution over response curves. LTV may also be uncertain.

The natural extension is therefore:

max Eθ,V[ V · A(s; θ) − Σsi ]

where θ represents MMM uncertainty and V can itself be a distribution. A more conservative business can replace expected profit with a risk-adjusted utility, for example penalising downside or optimising a lower-tail measure.

This is one place where the current PyMC-Marketing optimiser is structurally helpful. The BudgetOptimizer accepts a custom utility function, and that utility receives both posterior response samples and the candidate budgets. Its current source also makes the constraint behaviour explicit: with no custom constraints it adds a default sum(spend) = total_budget equality, while non-empty custom constraints put the caller in charge. That makes both modes natural implementations of the same optimiser.

Schematically, the profit utility is almost embarrassingly simple:

python
def expected_profit(samples, budgets, value_per_acquisition):
    expected_acquisitions = samples.mean()
    marketing_spend = budgets.sum()
    return value_per_acquisition * expected_acquisitions - marketing_spend

The important implementation change is not the formula. It is the constraint set. Fixed-budget mode uses an equality constraint. Floating-spend mode removes that equality and normally replaces it with sensible channel bounds and a total spend ceiling, so the optimiser does not extrapolate into regions the model has never learnt.

What this does not mean

Profit optimisation is only as credible as the response curves and the value layer it joins together.

It does not mean that an MMM can tell you your customer LTV. It does not make wild extrapolation beyond historical spend safe. It does not solve channel-specific customer-quality differences unless those are modelled. It does not mean every business should let an optimiser freely set the annual marketing budget. And it does not remove the need for constraints around inventory, reach, channel capacity, minimum commitments, brand floors or operating risk.

There is another subtlety. If the MMM estimates conversions that would have happened through another channel anyway, or if the conversion outcome is not truly incremental, then multiplying by LTV can make the profit objective look more precise than the causal estimate warrants. The economic layer cannot rescue a weak response model.

A simple decision rule

Use fixed-budget acquisition mode when
The spend envelope is externally set, LTV is disputed, the KPI is not directly monetisable, or the recommendation changes wildly across plausible value assumptions.
Use floating-spend profit mode when
You have a defensible value per incremental outcome, the value aligns with the MMM target, and the model is credible over the spend range the optimiser is allowed to explore.

The historical allocation should still be shown in both cases. In fixed-budget mode it is the direct benchmark. In profit mode it is a useful reference point that shows whether the model is recommending a change in mix, a change in scale, or both.

The takeaway

The question is not “should my optimiser maximise conversions or profit?” as though those require two competing models.

Build one credible response model. Then choose the objective that matches the information the business actually trusts.

  • No trusted LTV: maximise acquisitions subject to a spend constraint.
  • Trusted LTV: maximise value times acquisitions minus spend, and allow total spend to move within sensible bounds.

The second mode is simply the first mode with an economic value attached to the frontier. That is a much cleaner way to connect MMM response curves to an actual budget decision.

The numerical example in this article is synthetic. Four channels follow A(s) = Amax(1 − exp(−s / k)) with spend in £000 and acquisitions in 000s. The fixed-budget allocation is solved with SLSQP, and the floating-spend optimum uses the closed form s* = max(0, k · log(V · Amax / k)) that falls out of the first-order condition. For what happens upstream of the optimiser, see Bayesian MMM Explained.

References
PyMC-Marketing BudgetOptimizer documentation. pymc-marketing.io/…/BudgetOptimizer
PyMC-Marketing allocate_budget documentation. pymc-marketing.io/…/allocate_budget
PyMC-Marketing utility functions. pymc-marketing.io/…/mmm.utility
Current BudgetOptimizer source on main. github.com/pymc-labs/pymc-marketing
PyMC-Marketing customer lifetime value utility. pymc-marketing.io/…/customer_lifetime_value
PyMC-Marketing CLV quickstart. pymc-marketing.io/…/clv_quickstart

SIMBA uses PyMC-Marketing response models and budget optimisation to make these assumptions inspectable rather than hiding them behind a single “optimal budget” number. The most important input is not the solver, it is being explicit about what you are asking the solver to optimise. If you want to pressure-test which mode your plan should be in, book a call.

Published on August 28, 2026 by Niall Oulton

All posts