AI-Powered Performance MarketingBudget allocation and bidding economics · Lesson 9 of 15

Budget allocation: marginal returns, not averages

Article · 8 min · 8 min lecture

Video lecture

Budget allocation: marginal returns, not averages

14 chapters · about 8 min · full transcript

Coming soon

Chapter 1 of 14

Budget allocation

  • The average-ROAS trap
  • Response curves
  • Marginal returns
  • A toy optimizer

The narrated lecture is in production

Every chapter is scripted and ready. Browse the chapters and read the full transcript now — the video will appear here when it’s published.

Chapters

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:

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

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.

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.

Check your understanding

Quick questions to lock in the lesson. They don’t count towards your certificate.

  1. Campaign A has ROAS 6, Campaign B ROAS 3. What must you know before moving budget from B to A?
  2. In a Hill-type response curve, what does the half-saturation parameter represent?
  3. A brand search campaign shows the highest ROAS. What is the best way to judge whether to keep its budget?

Put it into practice

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.

Enrol for free to save your progress

Reading is always free. Enrol to keep your place, take the final assessment and earn a verifiable certificate.