Mid · 6 chapters
Held-out sets and eval-set overfitting
You will overfit prompts to a visible eval set within a handful of iterations; a held-out set touched rarely; not shipping a difference smaller than the run-to-run noise
A visible eval set becomes a training signal surprisingly quickly, so teams can ship regressions while their dashboard still reports improvement.
Read these first
What you will know
Keep a held-out set you do not look at while iterating
Reserve access for scheduled checks or release decisions so prompt changes cannot silently fit its examples.
Explain why iterating against a visible set is train/test leakage
Repeatedly selecting changes on the same cases turns those cases into indirect training data, even when model weights never change.
Notice when a gain on the dev set does not transfer to the held-out set
A widening dev-to-holdout gap is a practical overfitting signal, especially when the examples are small or hand-curated.
Refuse to ship a difference smaller than the run-to-run noise
Sampling, model-service variation, and evaluator randomness can make an apparent win disappear on the next repeated run.
Measure how quickly a visible eval set overfits by logging prompt variants and comparing dev-to-held-out transfer across iterations
There is no universal iteration count; the burn rate depends on set size, prompt search breadth, and how aggressively changes target failures.
Chapters
- 1
Selection leakage in prompt tuning
Keeping or discarding each prompt variant on the strength of the same labelled cases routes information from those cases into the prompt, one accept-or-reject decision at a time. No weights move and it is still leakage. This chapter shows the tuning loop as a training loop, counts the bits a score returns, simulates thirty identical variants producing four points of free gain, and separates this failure from the two kinds of contamination teams already guard against.
- 2
Held-out sets and read budgets
A held-out set is a second eval set that is independent only because of a rule about who reads it and when — nothing in the files makes it one. This chapter counts the information a single read returns, shows why an aggregate score leaks far more than it feels like it should, prices what a fortnight of daily plotting costs, and moves the rule out of people's heads and into a budgeted runner with an append-only log.
- 3
Paired comparison and the winner's curse
Two corrections sit between a two-point score difference and a real improvement: run-to-run noise from sampling and evaluator randomness, and the upward bias of taking a maximum over many noisy measurements. This chapter compares two prompts case by case rather than score against score, discounts a winner for the number of variants it beat, prices the cases a given difference would need, and separates all of that from the case where a flat number means the eval is not scoring the axis that changed.
- 4
The dev-to-holdout gap
When two sets start at the same score and one of them is consulted thirty times, the distance that opens between them is the fit component and nothing else. This chapter reads a six-week trajectory, rules out the four explanations that are not fitting, replaces a seventeen-point claim with a three-point estimate and its interval, shows why averaging the two numbers produces a quantity nothing corresponds to, and sets out which questions a burned set can still answer.
- 5
Burn rate and transfer ratio
There is no iteration count at which an eval set expires. How fast one burns is set by its size, the breadth of the search run against it, how failure-driven the edits are and how granular the scoring is — and the four factors span a factor of four across three real campaigns. This chapter shows what a point is worth on a small set, logs every variant tried, and turns the share of dev movement that reaches an independent set into an observed quantity rather than folklore.
- 6
Governing and retiring a held-out set
Governance exists here because the failure it prevents leaves no trace: no commit, no alert, no test that turns red at the moment a set stops being independent. This chapter reads a burn out of a read log, merges the retired cases into daily use, writes a manifest with size, provenance, owner, budget and retirement conditions, sizes a replacement against the smallest transfer it has to resolve rather than as a percentage of a scarce golden set, and sets out the three checks that say six months later whether any of it worked.
External resources
- LLM Evals: Everything You Need to Know (Evals FAQ)hamel.dev
Direct answers on held-out sets, judge overfitting and how much data you need.
- CapBencher: Give Your LLM Benchmark a Built-in Alarm for Testarxiv.org
A built-in alarm for overfitting, with held-out tests separating genuine gains from test-set memorization.
- What Fits (Into Few Tokens) Doesn’t Overfit: Compression and Generalization in ML Research Agentsarxiv.org
Repeated benchmark reuse, held-out evaluation and whether apparent gains generalize in ML research agents.
- Getting Evals Right for LLM Applications | Interrupt 26LangChain
Covers dataset splits and the discipline of not touching the holdout.
- LLM Evals: Common MistakesHamel Husain
Covers overfitting to a visible eval set and reading noise as improvement