The Auction
In one line: the auction decides who wins and what they pay, and understanding it is what turns a CTR model from a number into a system.
Ranking by expected revenue
An ad slot goes to the advertiser worth the most to the platform in expectation, not to the highest bidder.
eCPM = bid x pCTR x quality
An advertiser bidding £2 with a 1% predicted click rate is worth more per impression than one bidding £5 with a 0.1% rate, because the first will actually be clicked and the second will not. Sorting by eCPM makes that comparison automatically.
The quality term varies by platform — landing page experience, ad format, historical advertiser behaviour — and its purpose is to price externalities the click probability does not capture. An ad that gets clicked and then disappoints has a high pCTR and a bad outcome.
Second price, and why
The winner does not pay their bid. In a generalised second-price auction, they pay the minimum that would have kept them in their position — essentially the amount needed to just beat the next advertiser down.
The reason is behavioural rather than technical. Under first-price pricing, bidding your true value guarantees you capture no surplus, so every advertiser shades their bid below their value, and everyone spends effort guessing what others will bid. Bids become strategic estimates of the competition rather than statements of value.
Second-price pricing reduces that pressure substantially. Your bid mostly determines whether you win, and the price is set by the competition, so bidding close to your true value is a reasonable strategy.
The honest caveat, and it is worth stating because a strong interviewer will: the classic truthfulness result applies to a single-item second-price auction. Generalised second price over multiple ranked slots is not strictly truthful — advertisers can sometimes do better by shading — but it retains enough of the property to be far more stable than first-price, which is why it dominated for so long. Much of the industry has since moved back toward first-price with automated bid shading, which relocates the strategy from the advertiser into the platform's own bidder.
Working the price out
With eCPM ranking, the price is the bid that would have been needed to hold this position:
price_i = ( eCPM of the ad ranked below ) / ( pCTR_i x quality_i )
Read the shape rather than the algebra. You pay enough that your eCPM would have just exceeded the next ad's. And notice where your own pCTR appears: in the denominator. A higher predicted click rate means you pay less for the same position.
That is the incentive the whole design rests on. Improving your ad's relevance lowers your cost, so the advertiser's interest and the user's interest point the same way — which is unusual enough in advertising to be worth saying out loud.
Reserve prices
A floor below which the slot is not sold. Two jobs.
It protects the user. Showing a genuinely bad ad has a cost — attention, trust, the chance the user installs a blocker — and if no advertiser is worth more than that cost, showing nothing is correct. An empty slot is often better than a bad ad, and a design that always fills every slot has not priced that.
It protects revenue in thin auctions. With only one bidder, second-price pricing has nothing to price against, so the reserve becomes the price. Without it a monopoly bidder pays essentially nothing.
Setting reserves is genuinely hard: too high and slots go unfilled, too low and thin auctions leak revenue. It is normally set per-segment from historical clearing prices.
What miscalibration does here
Now the connection back to the model, and this is the argument the chapter turns on.
Suppose the model over-predicts by 2x for one advertiser's ads and is accurate for everyone else. That advertiser's eCPM is doubled, so they win auctions they should have lost. Worse, their price — with pCTR in the denominator — is halved. They win more and pay less, and the platform loses on both.
Now suppose it under-predicts for a segment. Those ads stop winning, so they stop being shown, so no new click data arrives for them, so the estimate never corrects. That is the feedback loop, in an auction, with money.
Both directions are expensive and neither shows up in AUC, because ordering within the affected segment can be perfectly fine. This is why calibration gets its own lesson.
The slot structure
One refinement that matters in practice. Multiple slots on a page do not have equal value — position one is worth several times position three, and the difference is steep.
So the auction is not one decision but an allocation across slots, and the pCTR used must be position-specific. Using a single pCTR for an ad regardless of where it lands over-values the lower positions and under-values the top one.
The standard treatment is to factor the prediction into ad quality and position effect — the same examination-hypothesis structure as position bias in ranking — so a single model prediction can be adjusted per slot rather than trained per slot.
Key takeaway
The auction ranks by bid x pCTR x quality and prices at what the next advertiser would have needed — and your own pCTR sits in the denominator of that price, so a more relevant ad costs less for the same slot. That is what aligns the three parties. It also means miscalibration is expensive in both directions: over-prediction wins auctions it should lose and pays less for them, while under-prediction silently removes a segment from the data that would have corrected it.
Next: what miscalibration costs, and how to measure it.