Budget Pacing Is a Control Loop
October 6, 2026
The problem, in one sentence: spend a daily budget fully and evenly without overdrawing or front-loading, without knowing next hour’s supply. It sounds like bookkeeping. It is where a DSP most plainly becomes a control-theory and online-optimization problem, and the papers written by the companies doing it at scale (Alibaba, Yahoo, LinkedIn, Google, the theoretical group around Balseiro–Mirrokni) are unusually good — enough that I think pacing is the single best domain to learn online convex optimization from. This entry is the whole thread: the dual view, the four update laws in their historical order, the loop architectures, stability practice, and what “good” even means.
Two ways to see the same object
The LP view (with foresight). If you knew every upcoming auction’s value
and cost, pacing is a packing program: maximize delivered value subject to
spend ≤ B (plus soft CPA/ROS constraints). Its dual has one multiplier λ per
constrained resource, and optimality condition is one line: buy item i iff
vᵢ ≥ λ·costᵢ — reduced value again, identical Lagrangian to the ORB bid
derivation. So: pacing is an online solver for the dual λ.
The demand-curve view (with a controller). Hold λ roughly constant and
cumulative spend is a monotone function S(λ); hitting budget is root-finding
on S(λ) = B with noisy, delayed observations of S. LinkedIn’s production
pacer (KDD 2014) is exactly this — an LP re-solved per period for a pacing
rate, plus online correction tracking realized spend against it.
What elevates it from root-finding to control: the map λ→spend has unknown, drifting gain (competition reprices underneath you), dead time (conversion-limited campaigns label hours late — a delay-biased error term feeds the integrator), and multiplicative response (win-rate curves steepen with bid, so spend moves roughly exponentially with log-bid — the response the exponential actuators below are built to invert; the old “prices are log-normal” story behind this claim is only true of heavily pooled data, and fails per-segment in direct tests). The literature’s answers are textbook control — proportional, integral, anti-windup, gain scheduling — plus, in the last five years, regret proofs.
The update laws, oldest to newest
1. Throttling (the spend governor). The oldest device, shipped at
exchanges before pacing had a name, formalized in Yuanlong Chen’s Practical
Guide to Budget Pacing Algorithms (2025; arXiv:2503.06942) as Algorithm 1:
target α(t) = (t/T)·B, and a
participation probability nudged multiplicatively:
behind target: p(t) = min{ p(t−1)·(1+λₜ), 1 }
ahead of target: p(t) = max{ p(t−1)·(1−λₜ), 0 }
A pure proportional controller on the gate. You randomly drop eligible auctions. Its weakness is exactly its simplicity: the gate is value-blind — it discards a $100 conversion’s auction as cheerfully as the next one’s, so bid-based control dominates whenever value ranking is trustworthy. But note the guide’s own confession that bid-based pacing “should not be interpreted as a complete replacement of throttling”: changing bids has an unpredictable spend response, so the industry keeps a value-blind emergency brake whose response it can predict. That is a remarkable engineering value: prefer a controller whose plant you understand over one whose plant is smarter, when you need determinism.
2. PID on the bid. The BigTree DSP system (Zhang et al., WSDM 2016 — a
Chinese mobile DSP, not Taobao; controls published every 90 minutes online,
2-hour rounds offline on replayed iPinYou logs):
adjust the bid multiplicatively — b'(t) = b(t)·exp(φ(t)), the exponential
actuator guaranteeing positivity and matching spend’s exponential response —
with φ from a PID on the eCPC error and explicit φ-bounds (anti-windup: clamp
the integral at limits so a feedback outage can’t leave the line committed to
an insane bid). The reading I love is the failure-forensics one: the
derivative term is the dangerous one on advertising data (it amplifies the
noise in a sparsely-labeled error signal), and the integral is the one that
blows up under delayed feedback — conversions keep arriving after the
controller already reacted to their absence, so without anti-windup it drives
a line into overdelivery chasing ghosts.
3. Waterlevel — the degenerate PID that runs adtech. Kp = Kd = 0:
φ(t+1) = φ(t) + γ·(xᵣ − x(t)), an integrator-only law in log-bid space.
Zero steady-state error, slower response to shocks, and — the empirical
finding of the BigTree deployment — more robust than full PID in the real plant
where the feedback signal is noisy and delayed. The reason generalizes:
P-terms leave steady-state offset, D-terms amplify noise, and an ad-system
sensor is noisy and delayed; so the minimal law is the robust one. LinkedIn’s
pacing-rate recurrence (2014) is the same equation wearing a different
variable name. And the proof that this is not a hack: the waterlevel law is
provably a fast root-finder for the period-optimal bid even under hidden,
dynamic cost functions (Hajiaghayi & Springer 2022), and — this is the line
that made me write this essay — the integral controller in log-λ space is
mirror descent with a linear reference function (Balseiro et al.’s field
guide states it; the dual-descent papers imply it). Every decade of adtech
reinvented the same integrator and each time it turned out to be a special
case of last decade’s abstraction.
4. Multiplicative dual descent — the canonical form. Keep λ per constrained
resource; act greedily on reduced value ṽᵢ = vᵢ − λ·cᵢ; update
λₜ₊₁ = λₜ·exp(η·(cᵢ − B/T)) / Z (multiplicative / mirror descent)
or λₜ₊₁ = [λₜ + η·(cᵢ − B/T)]₊ (subgradient; same scheme, other reference)
Balseiro, Lu & Mirrokni (“The Best of Many Worlds,” Oper. Res. 2023) unify
both — including dual multiplicative-weights — as one mirror-descent family,
and hand you the guarantees for free: Õ(√T) regret under stochastic supply
(order-optimal); constant competitive ratio under arbitrary adversarial
supply; Õ(√T) under ergodic/seasonal models; and no early depletion — λ
rises before the budget runs out, provably (Prop. 2), which is the
single sentence pacing engineers read a paper for. Per-request O(1), fits the
hot path, needs no LP re-solve — the theoretical account of why everyone
migrated from period-LP to per-request updates. The survey’s verdict:
“Lagrangian dual algorithms are the work-horse algorithms of budget pacing.”
The thing all these loops converge to, when every buyer runs one: a pacing equilibrium. In first-price markets, the FPPE (Conitzer et al.) is the componentwise-maximal budget-feasible multiplier vector — every paced bidder has then spent its budget exactly; existence and uniqueness by a one-line closure argument (max of two feasible vectors is feasible), Pareto-dominance, and seller-revenue-maximality for free. The multiplicative-shading heuristics practitioners distrust are the equilibrium play, and the waterlevel/dual-descent dynamics converge there under repeated interaction (Balseiro, Kim, Mahdian, Mirrokni, OR 2021). Then the punchline from complexity theory: computing a pacing equilibrium in general second-price settings is PPAD-hard (Chen, Kroer & Kumar, Math. OR 2023; the PPAD lineage running back to the Daskalakis–Goldberg–Papadimitriou inapproxurability tradition). Which is the reason adtech is a control industry rather than a solver industry: the fixed point is intractable, the feedback loop is O(1) per auction, and the latest results (Gaitonde et al., ITCS 2023) show you don’t even need convergence to get good regret and welfare. The loop not settling is not a bug state; it is the operating state.
Multiple constraints, and the one architecture mistake
A real line-item carries budget AND a ROS/CPA target AND frequency caps AND maybe a min-delivery floor. Historically platform loops (budget) and advertiser tools (ROS) evolved separately; the field guide (Balseiro, Bhawalkar, Feng, Lu, Mirrokni, Sivan & Wang, KDD 2023) compares the ways to compose and the comparison is the practical payload of the whole paper:
| Architecture | Mechanism | Guarantee |
|---|---|---|
| Sequential | ROS loop shaves the bid; budget loop throttles the result | Ω(T) constraint violation — linear in horizon |
| Min-pacing | parallel loops; bid = min(α_B, α_ROS)·v |
same sublinear violation/regret order as fully coupled |
| Coupled duals | one program, duals updated jointly | best; needs shared state |
Min-composition is essentially free; serial cascade is the trap. The mechanism of failure is worth internalizing because it recurs across every control system: the ROS loop already shaved the bid, so the budget loop — observing artificially low spend — concludes it has room and over-participates until the ROS violation explodes. One controller hallucinates headroom created by the other. (The same pathology shows up between shading and pacing — aggressive shading reads as budget slack, λ drifts up, the shade is silently undone — so “don’t cascade, min-compose” is a law about shared actuators, not about adtech.) The offline ladder in Yang et al. (KDD 2019) prices these architectures — value ratio: naive post-hoc clamping to hold a CPC KPI 0.362, feedback-control variants 0.549–0.709, two independent PIDs treating each other’s coupling as noise 0.892, coupled PIDs with a decoupling cross-feed 0.928. The numbers are theirs and single-site (Taobao), but the ordering is the same physics as the theory column: satisfying the soft constraint is cheap; satisfying it by clipping is what destroys value. Constraints belong in the bid function, as duals, never in a post-hoc clamp. The field guide’s other doctrine: treat budget as hard and ROS as soft — a hard stop outside the loop (auction-exclusion when spend hits B), because a soft constraint may be violated a little with guarantees while a blown budget is a financial event. Frequency caps and min-delivery floors slot into the same frame as further duals — Chen’s guide works through campaign-group budgets and minimum-delivery constraints with the same machinery.
The closed loop, drawn with its stability notes
target r(t) +─────────────────────────────────────────────+
(forecast supply, │ │
equalized ref) e ──►(Σ)──► PID / waterlevel / φ ──► bid = │
▲ dual-descent (λ) e^φ·(w₀v │
│ − Σⱼ │
spend S(t) (ms) ◄────────── auctions ◄──────────── wⱼcⱼ)─┤
conversions (hours, delayed) ◄────────────────────────────┘
plant: S ≈ exp(φ) on log-ish w(b); dS/dφ drifts with market
Stability practice, synthesizing the three sources that read like engineering manuals with theorems inside:
- Two loops, two bandwidths. Spend feedback is minutes-fast; conversion feedback is hours-slow. Run λ_budget with a short-horizon high-gain law; ROS with a long-horizon patient one. De-bias delayed labels before the error enters the loop (the delayed-feedback model’s soft labels, applied to the controller’s error term) or the CPA loop sits permanently under-delivered, chasing phantom negatives.
- Gain scheduling. The same Δφ moves spend ten times differently at
different points of the win-rate curve (it’s concave; ORB’s own figures —
and the landscape’s quantiles hand you
dS/dφfor free). A controller with fixed η oscillates in thick markets and crawls in thin ones; adapt η from the plant estimate. - Anti-windup + saturation (clamp φ and the integral state; reset on clamp) — nonnegotiable under conversion lag.
- Hard budget stop outside the loop, throttles and λ inside.
- Day-boundary coordination. The classic overspend incident in every account that documents one: clock skew between controller and bidders across the UTC midnight reset. Budgets don’t reset atomically; they coordinate, and coordination is the failure surface.
- MPC where forecast quality earns it: fit a monotone bid→spend model (isotonic/PAVA, by construction, so the inversion is well-posed), solve “what bid spends the remainder optimally over the forecast window,” re-solve each tick — which is what LinkedIn’s plan-then-correct pattern and Chen’s practitioner guide actually look like as code, and where modern adtech control meets its aerospace cousin. A caution attached to the literature: Yang et al.’s KDD 2019 multivariable controller labels its decoupling module “model predictive,” but it is a fixed-gain 2×2 compensator on two PID outputs — no horizon, no re-solve. Two different machines share the acronym; only one of them is MPC.
What “good” means
The metrics the papers optimize, in ascending order of ambition:
spend attainment S(T)/B plus the tail of underspent lines (LinkedIn’s
explicit objective: spend ≤ B, maximize attainment); constraint violation
on ROS/CPA — sublinear for min-pacing, linear-as-failure for naive
composition; regret against the offline-optimal allocation with foreknowledge
(Õ(√T) achievable and lower-bounded — the knapsack-bandit line:
Badanidiyuru/Keskinocak/Tang; Immorlica et al. in the JACM); and, market-level,
liquid welfare / equilibrium efficiency when a thousand pacing agents
interact. And I’d add the engineering metric the papers circle without naming:
determinism of the money — a pacing system is good when, on the day a
downstream service dies, you can predict exactly what it will do, in dollars,
in advance.
The synthesis claim I’d defend to a skeptic: pacing is where the DSP ceases to be a prediction system that spends money and becomes a control system whose sensor happens to be a market — and once you see the budget line as a plant with drifting gain and dead time, half the adtech literature reads as application notes for a 60-year-old discipline, which is either deflating or liberating depending on your taste. (Chen’s book cites Camacho & Bordons’ MPC textbook and Smirnov, Lu & Lee’s Online Ad Campaign Tuning with PID Control side by side. This is the level of the game.)
References
- Chen, Y. (2025). “A Practical Guide to Budget Pacing Algorithms in Digital Advertising.” arXiv:2503.06942
- Zhang, W., Rong, Y., Wang, J., Zhu, T. & Wang, X. (2016). “Feedback Control of Real-Time Display Advertising.” WSDM. doi:10.1145/2835776.2835843, arXiv:1603.01055
- Agarwal, A. et al. (2014). “Budget Pacing for Targeted Online Advertisements at LinkedIn.” KDD. doi:10.1145/2623330.2623366
- Balseiro, S., Lu, H. & Mirrokni, V. (2023). “The Best of Many Worlds: Dual Mirror Descent for Online Allocation Problems.” Operations Research 71(1):101–119. doi:10.1287/opre.2021.2242, arXiv:2011.10124
- Balseiro, S., Bhawalkar, K., Feng, Z., Lu, H., Mirrokni, V., Sivan, B. & Wang, S. (2023). “A Field Guide for Pacing Budget and ROS Constraints.” KDD. arXiv:2302.08530
- Conitzer, V., Kroer, C., Sodomka, E. & Stier-Moses, N. (2019/2022). “Pacing Equilibrium in First-Price Auction Markets.” EC 2019, doi:10.1145/3328526.3329600; “Multiplicative Pacing Equilibria in Auction Markets,” Management Science 70(2). doi:10.1287/mnsc.2022.4310, arXiv:1811.07166
- Balseiro, S., Kim, B., Mahdian, M. & Mirrokni, V. (2021). “Budget-Management Strategies in Repeated Auctions.” Operations Research 69(3):859–876. doi:10.1287/opre.2020.2073 (+ WWW 2018, doi:10.1145/3038912.3052682)
- Hajiaghayi, M. & Springer, R. (2022). “Analysis of a Learning Based Algorithm for Budget Pacing.” arXiv:2205.13330
- Chen, X., Kroer, C. & Kumar, R. (2021). “The Complexity of Pacing for Second-Price Auctions.” Math. OR. arXiv:2103.13969
- Aggarwal, G. et al. (2024). “Autobidding and Auctions in Online Advertising: A Survey.” arXiv:2408.07685
- Yang, X., Li, Y., Wang, H., Wu, D., Tan, Q., Xu, J. & Gai, K. (2019). “Bid Optimization by Multivariable Control in Display Advertising.” KDD. doi:10.1145/3292500.3330681
- He, Y., Chen, X., Wu, D., Pan, J., Tan, Q., Yu, C., Xu, J. & Zhu, X. (2021). “A Unified Solution to Constrained Bidding in Online Display Advertising.” KDD. doi:10.1145/3447548.3467199
- Chapelle, O. (2014). “Modeling Delayed Feedback in Display Advertising.” KDD. doi:10.1145/2623330.2623634
- Lang, K., Moseley, B. & Vassilvitskii, S. (2012). “Handling Forecast Errors While Bidding for Display Advertising.” WWW. doi:10.1145/2187836.2187887
- Zhang, W., Yuan, S. & Wang, J. (2014). “Optimal Real-Time Bidding for Display Advertising.” KDD. doi:10.1145/2623330.2623633
- Ghosh, A. et al. (2019). “Scalable Bid Landscape Forecasting in Real-Time Bidding.” ECML-PKDD. arXiv:2001.06587