Live demo

Two eval runs. One of them is lying to you.

Same 40 cases, two model versions. The scoreboard shows a five point drop. Every number below is computed in your browser from the actual per-case outcomes — a paired permutation test and a bootstrap interval, not a t-test on two means.

The 40-case evaln = 40Cannot distinguish from noise
v1.4 (current)
77.5%
pass rate
v1.5 (candidate)
72.5%
pass rate
Scoreboard reads
-5.0 pts
what the dashboard shows
Truth injected
-3.0 pts
ground truth in this data
Paired permutation test + bootstrap interval
95% interval
-12.5 pts → 0.0 pts
covers zero — no difference is not ruled out
p-value
0.4899
5,000 sign-flip permutations
Smallest visible effect
14.3 pts
at n=40, 80% power

The null here is sign-flipping each case’s difference, which is the correct null for paired data: if the two versions were equivalent, whether any individual case got better or worse is a coin flip.

A team reading only the scoreboard files a bug, bisects the prompt, and burns a day. The test says the two versions are not distinguishable on this evidence. The eval is not wrong — it is underpowered, which is a different and fixable problem.

The same regression, resolved

There really was a three point regression

Identical injected effect, identical generator, 600 cases instead of 40. The effect was always there. The first eval simply could not see it — and overstated it while failing to confirm it, which is what small samples do.

The 600-case evaln = 600Real regression
v1.4 (current)
80.3%
pass rate
v1.5 (candidate)
77.3%
pass rate
Scoreboard reads
-3.0 pts
what the dashboard shows
Truth injected
-3.0 pts
ground truth in this data
Paired permutation test + bootstrap interval
95% interval
-5.2 pts → -0.8 pts
excludes zero
p-value
0.0060
5,000 sign-flip permutations
Smallest visible effect
3.5 pts
at n=600, 80% power

The null here is sign-flipping each case’s difference, which is the correct null for paired data: if the two versions were equivalent, whether any individual case got better or worse is a coin flip.

The calculator

What can your eval set actually see?

Run this before you trust a number, not after you have already shipped a fix for a difference that was never there.

Smallest detectable effect
13.2 pts
at n=40, α=0.05, 80% power
Power for a
9.3%
3.0 pts regression
Cases needed
773
to see 3.0 pts reliably
Your eval cannot see the regression you say you care about. A 3.0 pts change would clear significance only 9.3% of the time — so most real regressions of that size pass silently, and most of what you do flag at this size is noise. You need about 773 cases.
Detectable effect against eval sizethe curve is 1/√n — doubling cases buys you 30%, not 50%
7 pts13 pts20 pts26 ptsthe regression you care aboutn = 4010 cases1,000 cases

The part nobody measures

How much of your eval movement is the judge?

Score the same 180 model outputs three times with the same judge. Nothing about the outputs changed between passes, so every bit of spread within a row is the judge disagreeing with itself. That is measurement error, and it sets a hard floor on what your eval can resolve no matter how many cases you add.

Judge noise share
43.4%
of total eval variance
Model variance
0.0222
real quality differences
Judge variance
0.0170
same output, different score
Effective n
102
your 180 cases behave like this many

A 180-case eval scored by this judge carries about as much information as 102 cases scored perfectly. The fix is not always more cases — averaging several judge passes per case, or tightening the rubric until it stops disagreeing with itself, buys back the same resolution far more cheaply. You cannot make that trade without measuring the split first.