---
title: "Budget allocation: marginal returns, not averages"
description: "The average-ROAS trap Suppose Campaign A reports a ROAS of 6 and Campaign B a ROAS of 3. The instinct is to move money from B to A. But average ROAS…"
url: https://optimizeall.com/learn/ai-performance-marketing/budget-allocation-marginal-returns
updated: 2026-10-05
---

AI-Powered Performance Marketing · Budget allocation and bidding economics · lesson 9 of 15 · 8 min

# Budget allocation: marginal returns, not averages

## The average-ROAS trap

Suppose Campaign A reports a ROAS of 6 and Campaign B a ROAS of 3. The instinct is to move money from B to A. But average ROAS tells you what the *past* spend returned on average. Budget decisions depend on what the *next* unit of spend will return — the **marginal return**. Campaign A may already be saturated (every extra dollar buys less), while B may still have room to grow.

Almost all advertising follows **diminishing returns**: the first dollars reach the most responsive people; later dollars reach less responsive people at higher prices. The shape is a **response curve**.

## Response curves in plain terms

A common model (used in marketing mix models such as Meridian and Robyn) is a saturating curve, for example the Hill function:

```text
response(spend) = max_response × spend^s / (spend^s + half_saturation^s)
```

- `max_response` — the ceiling the channel can deliver.
- `half_saturation` — the spend level at which you get half of the ceiling.
- `s` — the shape (how sharply returns bend).

Marginal return is the slope of the curve at your current spend. **Allocate budget so marginal returns are roughly equal across channels**, subject to minimums (brand presence, learning thresholds) and maximums (inventory limits).

## Where response curves come from

1. **Marketing mix models** (Module 5) estimate curves per channel from historical variation.
2. **Budget experiments** — deliberately change spend in a campaign or region and observe the change in outcomes.
3. **Platform simulators** — Google Ads performance planner and budget/bid simulators give the platform's forecast (useful but self-reported).

## Practical allocation rules

- **Protect learning**: automated campaigns need a minimum volume of conversions; spreading budget thinly across many campaigns is often worse than concentrating it.
- **Move gradually**: large sudden budget changes can reset or disrupt learning. Many practitioners change budgets in steps (for example, no more than 20–30% at a time — a common rule of thumb, not a platform rule).
- **Use portfolio or shared budgets** where campaigns share goals, letting the platform shift spend daily.
- **Separate prospecting and brand**: brand search is cheap and high-ROAS but often low-incremental; judge it on incrementality.
- **Plan for seasonality**: Ramadan, Eid, White Friday/Black Friday, back-to-school, summer in the Gulf, Diwali/Eid in Pakistan-diaspora markets — shift budget ahead of demand; Google Ads offers seasonality adjustments for Smart Bidding on short, predictable events.

## Worked example: an Islamabad edtech company

An online tutoring company spends across Google Search, PMax, Meta and YouTube. Average ROAS (on first-month revenue) was highest on brand search. A simple spend test — cutting brand search by half in two cities for three weeks — showed almost no drop in enrollments, because students came via organic brand results. Meanwhile, a +30% budget step on Meta prospecting in one region lifted enrollments noticeably. The team moved money from brand search to prospecting and set a marginal-return review every month.

## Hands-on: equalizing marginal returns with a toy model

```python
import numpy as np
from scipy.optimize import minimize

# Illustrative curve parameters per channel (estimate yours from MMM or tests)
channels = {
    "search":  {"max": 900_000, "half": 150_000, "s": 1.2},
    "meta":    {"max": 700_000, "half": 120_000, "s": 1.0},
    "youtube": {"max": 400_000, "half": 100_000, "s": 1.5},
}
TOTAL = 300_000  # monthly budget, same currency as response values

def response(x, p):
    return p["max"] * x**p["s"] / (x**p["s"] + p["half"]**p["s"])

def neg_total(xs):
    return -sum(response(max(x, 1e-6), p) for x, p in zip(xs, channels.values()))

x0 = [TOTAL / len(channels)] * len(channels)
cons = [{"type": "eq", "fun": lambda xs: sum(xs) - TOTAL}]
bounds = [(20_000, TOTAL)] * len(channels)  # minimum per channel
res = minimize(neg_total, x0, bounds=bounds, constraints=cons)
for name, x in zip(channels, res.x):
    print(f"{name:8s} spend={x:,.0f}")
print("expected response:", round(-res.fun))
```

The output is only as good as the curves. Treat it as a way to reason about trade-offs, then validate the recommended shift with a test before committing the whole budget.

## Pitfalls

- Reallocating on average ROAS.
- Trusting platform forecasts without any external validation.
- Changing budgets and bids and creative at the same time.
- Ignoring non-linear effects such as awareness channels that make search cheaper later (halo effects).

## How to measure success

Total contribution profit (or new customers) at the same total spend, before and after reallocation, ideally measured with a holdout or geo split. A good allocation process is repeatable: curves updated quarterly, experiments monthly, decisions logged.

## Video lecture: Budget allocation: marginal returns, not averages

Lecture coming soon · 14 chapters · about 8 minutes. Read the full transcript below.

1. Budget allocation
2. Why it matters
3. Average vs marginal
4. Response curves
5. The principle
6. Simple example (illustrative)
7. Where curves come from
8. Example: Islamabad edtech (illustrative)
9. Practical rules
10. Toy optimizer
11. Mistakes + try this now
12. Quick self-check
13. Watch me do it: reallocation (illustrative)
14. Recap and next step

## Lecture transcript

### Budget allocation

Here's a mistake that costs businesses real money every month. A campaign shows a return on ad spend of six, another shows three, and someone moves budget from the three to the six. It sounds obvious. It's often wrong. In this lecture you'll learn why average returns mislead, what response curves and marginal returns are, how to find your curves, and a toy optimizer you can run to reason about budget trade-offs.

### Why it matters

Why does this matter? Because budget allocation is usually the biggest lever in a marketing plan, and most teams pull it with the wrong measurement. Here's an analogy. Imagine watering plants. The first cup of water makes a thirsty plant perk up dramatically. The tenth cup on the same plant does almost nothing, and might even drown it. Meanwhile the plant in the corner is still dry. Average return tells you the first plant loves water. Marginal return tells you where the next cup should go. That's the whole lesson in one picture.

### Average vs marginal

Average ROAS tells you what all your past spend returned, on average. But a budget decision is about the next dollar, or the next thousand rupees, or the next thousand dirhams. What will that return? That's the marginal return. And because nearly all advertising has diminishing returns, the next unit of spend on a big campaign may return far less than its average suggests. The first money reaches the most responsive people. Later money reaches people who are less interested and more expensive to reach.

### Response curves

That rising-then-flattening shape is a response curve. Marketing mix models, like Google's Meridian and Meta's Robyn, often use a saturating curve such as the Hill function. It has three knobs. The maximum response a channel can ever deliver. The half-saturation point, the spend at which you get half of that maximum. And a shape parameter for how sharply it bends. The slope of the curve at your current spend is your marginal return.

### The principle

The allocation principle is elegant. Move money until the marginal return is roughly equal across channels. If search's next dollar returns less than Meta's next dollar, shift some budget to Meta, and keep going until they're about even. In practice you add constraints: minimum spend so automated campaigns can still learn, maximums where inventory runs out, and brand presence you want regardless.

### Simple example (illustrative)

Let's run a simple worked example with numbers. Channel A: spending ten thousand a month returned thirty thousand. Spending twelve thousand returned thirty-two thousand. So the extra two thousand earned only two thousand: a marginal return of one to one. Channel B: spending five thousand returned ten thousand. Spending seven thousand returned fifteen thousand. The extra two thousand earned five thousand: a marginal return of two and a half. Channel A has the higher average, three to one versus two to one, but the next two thousand clearly belongs in Channel B. These numbers are illustrative, but the logic is exactly what you'll use.

### Where curves come from

Where do curves come from? Three places. Marketing mix models, which estimate them from historical variation in spend and sales. Spend experiments, where you deliberately change budget in a campaign or region and watch outcomes. And platform tools like Google's performance planner, which are useful, but remember they're the platform's own forecast. The best approach combines all three, with experiments used to check the models.

### Example: Islamabad edtech (illustrative)

Here's an illustrative example. An Islamabad tutoring company saw its highest ROAS on brand search. So they tested it: they halved brand search in two cities for three weeks. Enrollments barely moved, because students found them through organic results anyway. Meanwhile, a thirty percent budget step on Meta prospecting in one region lifted enrollments noticeably. They moved money from brand to prospecting and now review marginal returns every month.

### Practical rules

A few practical rules. Move budgets gradually. A common rule of thumb is steps of twenty to thirty percent, because big jumps can disrupt learning. That's practitioner wisdom, not a platform rule. Use shared or portfolio budgets where campaigns share a goal. Plan ahead for seasonality like Ramadan, Eid, White Friday or back-to-school, and on Google you can use seasonality adjustments for short, predictable events. And don't change budget, bids and creative in the same week.

### Toy optimizer

The lesson includes a small Python optimizer. You enter illustrative curve parameters for each channel, a total budget and a minimum per channel, and it finds the split that maximizes total response. Treat the output as a thinking tool. It's only as good as the curves you feed it, so validate any big shift with a test before moving the whole budget.

### Mistakes + try this now

Common allocation mistakes. Moving money based on average ROAS. Trusting a platform's forecast as if it were independent. Cutting awareness channels because their direct ROAS looks low, then watching search costs rise months later. And making huge overnight budget jumps. Try this now: pick one campaign and look at its performance over the last three months at different spend levels. Sketch a rough curve: spend on the horizontal axis, results on the vertical. Is it still rising steeply, or flattening? That sketch is your first response curve.

### Quick self-check

Quick self-check. You have an extra fifty thousand to spend this month. Search is limited by budget and its last increase brought a strong jump in sales. Meta's last increase brought almost nothing extra. Where does the money go first? Pause. The answer: search, because the evidence says its marginal return is higher right now. But notice the phrase right now. Curves move with seasonality, creative and competition, so you'll re-check next month rather than locking the decision in. That habit, allocate on the latest marginal evidence and re-check, is the entire discipline.

### Watch me do it: reallocation (illustrative)

Watch me do it. Let's reallocate an illustrative UK skincare brand's monthly budget of one hundred thousand pounds. First, the evidence: the last three budget steps on each channel. Google Search went from thirty to thirty-five thousand and added about four thousand in margin, a marginal return near zero point eight. Meta went from forty to forty-five and added about seven and a half thousand, around one point five. YouTube went from ten to fifteen and added three thousand, about zero point six, but we know from a past geo test that its effect lags. Second, I plug rough curves into the optimizer from the lesson. It suggests moving ten thousand from Search to Meta. Third, constraints: Search can't drop below the level that keeps brand terms covered, and YouTube keeps a minimum because of the lagged effect. Adjusted recommendation: move six thousand from Search to Meta, in two steps of three thousand over two weeks. Fourth, the check: a clear success metric, total contribution margin at the same total spend, reviewed in four weeks. The optimizer gave a direction. Judgment set the size and pace.

### Recap and next step

Recap. Allocate on marginal returns, not averages. Diminishing returns are the norm, and response curves describe them. Equalize marginal returns within sensible limits, source curves from models and experiments, and move gradually. Your next step: sketch what you believe the response curves look like for your two biggest channels, and design one budget experiment that would prove you right or wrong.

## Key takeaways

- Allocate on marginal return — the value of the next unit of spend — not on average ROAS.
- Advertising has diminishing returns; response curves describe them.
- Aim to equalize marginal returns across channels within learning minimums and inventory limits.
- Get curves from MMM, spend experiments and (cautiously) platform simulators.
- Move budgets gradually and validate reallocations with tests.

## Try it

Pick your two largest channels. Sketch what you believe their response curves look like and write one budget experiment that would tell you if you are right.

- [Previous: Creative testing at scale: design, read-outs and fatigue](https://optimizeall.com/learn/ai-performance-marketing/creative-testing-at-scale)
- [Next: Attribution reality: what each number can and cannot tell you](https://optimizeall.com/learn/ai-performance-marketing/attribution-reality)
- [All lessons of AI-Powered Performance Marketing](https://optimizeall.com/learn/ai-performance-marketing)
