One Number Is Not A Result
Model announcements have converged on a format: a table of benchmark scores, one number per cell, bolded where the new model wins. It reads like a measurement. It usually is not one, and the reason is that a benchmark score is a sample statistic — not a property of the model.
Consider two systems, both reporting 91% across five evaluation folds. The first scored 90, 91, 91, 91, 92. The second scored 78, 85, 95, 98, 99. Identical means. Only one of them is something you would put in front of users, and the table that reported both as "91" gave you no way to tell them apart.
What the missing number is
The reported score is an average. What you need alongside it is the variance — how far individual runs fall from that average. Without it you cannot answer the only question that matters when comparing two models: is this gap larger than the noise?
Several genuinely random things go into a training or evaluation run, and each contributes spread:
- Initialisation and data order. Neural network loss surfaces are not convex, so the seed changes which minimum you land in. Reported gaps of under a point routinely sit inside seed variance.
- Sampling settings at inference. Any nonzero temperature makes the output a random variable. Evaluating once samples once.
- Evaluation set composition. A 500-question benchmark scored at 91% has a standard error of roughly 1.3 points from sampling alone, before any model-side randomness.
- Judge models, where an LLM grades outputs. Now you have two stochastic systems composed, and the judge has its own biases and its own variance.
Put those together and a 0.4-point improvement on a single run is not evidence of anything. It is frequently reported as a win anyway.
Why it persists
Not usually dishonesty. Mostly cost and format.
Running an evaluation five times costs five times as much, and at frontier scale that is a real budget line. Leaderboards accept one number per cell, so producing a spread gets you no credit and inviting scrutiny of your margin is not in your interest. And once one lab reports a single number, everyone comparing against them has to match the format.
The result is a shared convention that nobody individually chose and that quietly rewards the noisiest measurement, because whoever gets the luckiest seed posts the highest score.
What to do with a launch table
You are usually reading someone else's numbers rather than producing your own, so this is mostly a reading skill:
Treat any gap under about a point as unmeasured. Not disproved — unmeasured. Absent a spread, that is the honest reading.
Check whether the evaluation is deterministic. Greedy decoding on a fixed set removes inference variance and makes a single number much more meaningful. Temperature above zero without a run count means the number is one sample.
Ask what the sample size was. A benchmark's own size sets a floor on the standard error, and on small sets that floor is often larger than the differences being celebrated.
Distrust improvements that appear only on the headline benchmark. A real capability gain shows up across correlated tasks. One benchmark moving alone is more consistent with variance or contamination.
And if you are producing the numbers: run it at least three times, report mean and standard deviation, and say which convention you used — NumPy divides by , pandas by , and at five folds those differ by about 12%, which is the same order as the gaps people argue about. Compute it stably, too, rather than with the one-pass formula that can return a negative variance.
Reporting a spread makes your result weaker-looking and more useful. That trade is what a measurement is.