QASenior

AI evaluation

AI evaluation measures whether a model’s outputs are good enough to ship, with a fixed set of cases, a grader for each and numbers read with their uncertainty. The page opens with sixteen things a team will want to grade — the cheapest grader that settles each, and what fools it — then covers error analysis, building the set, the ladder of graders, model judges and how to trust one, reading the numbers, and four published measurements that misled.

Before any metric
Read 100 real traces
Trust a judge by
TPR and TNR, not agreement
33 of 40 → 34 of 40
Noise: ±12 points

Sixteen things to grade — the cheapest grader that settles each, and what fools it

People come to a page about AI evaluation with a concrete question: how do I grade this? The answer is almost never “ask another model”. Below are sixteen things a team grades on the order assistant from Testing LLM products — the shop’s chat that answers “where is my order”, explains the returns policy and starts returns. For each: the cheapest grader that settles it, and what fools that grader. The prefix names the rung on the ladder further down. Later sections cite the rows by number.

#What you are checkingThe cheapest grader that settles itWhat fools it
1The reply parses and has its fieldsExact: schema validationNothing — and it says nothing about the values inside
2The intent is one of the six labelsExact: comparison with the label setLabels whose meaning drifts: “other” slowly absorbing everything
3The refund amount or the days leftCode: recompute from the tool’s result, with a toleranceFormats — “€1,299.00” against “1299” — so compare parsed numbers, not strings
4The cited article says what the reply says it saysCode: find the quoted passage in the indexDifferent spaces or quote marks — normalise both sides first
5The right tool, with the right argumentsCode: assert the callTwo valid calls in a different order — compare them as a set
6A required fact is present: “the window closes on 24 October”Code: a string or pattern match, while the phrasing is fixedThe same fact in other words — when phrasing varies, go up to row 7
7Every required fact, however it is phrasedJudge: given the fact list, yes or no for each factA fluent reply that mentions a fact’s topic without stating the fact
8Nothing in the reply that the sources do not sayJudge: given the sources, yes or no for each claimA judge that is not shown the sources grades plausibility, not faithfulness
9The reply answers the question askedJudge: binary, with the question in front of itA long reply that covers everything — judges favour length
10The tone follows the style guideJudge: binary, with the guide and two examplesPoliteness wrapped around a refusal; the judge rewards the wrapping
11Which of two prompt versions answers betterJudge: pairwise, run in both ordersOrder alone: in one study it let the weaker model win 66 of 80 comparisons
12A summary or a translation matches the approved oneReference: word-overlap metrics such as BLEU or ROUGEA correct answer in other words scores low; on open-ended text these track people poorly
13Generated code worksCode: run it against testsTests that demand more than the task asked — or that leaked into training
14Advice a specialist would call harmfulHuman first: a specialist’s rubric, then a judge calibrated against itGeneral safety filters do not know the domain: a calorie deficit is ordinary advice to most readers
15The overall experienceHuman: a person reads a weekly sampleFatigue, and criteria that shift as people read — write the rubric down again
16Whether the feature does its jobOutcome: in production, questions resolved without a second contactEverything it cannot see: a customer who gave up is not a resolved one

Read before you measure: error analysis

The usual first move is to pick metrics — helpfulness, faithfulness, a score — and wire them into a dashboard. It produces numbers about problems nobody has seen. Hamel Husain and Shreya Shankar, who have taught evaluation to thousands of engineers, put it bluntly: generic metrics are not useful in most AI applications. Start instead by reading what the system actually did.

The method comes from qualitative research and has three steps. Read at least a hundred real conversations, and for each one that went wrong, write a short note in your own words — open coding. Then group the notes into failure categories and count them — axial coding. Stop when new conversations stop producing new kinds of failure, which researchers call saturation. Only then decide how each category will be graded.

Error analysis starts with reading, not with metrics. Somebody read a hundred real conversations with the order assistant, wrote a note for each failure — 41 notes in all — and grouped them. The largest group, 13 notes, was replies that left out the condition that decides the answer, such as the date the return window closes; that needs a judge given the list of required facts. The next four groups — picking the wrong order when the customer has two open, answering questions the help centre does not cover, replying in the wrong language and inventing a refund date — turned out to be checkable by code once they had been seen. Two notes about tone go to a judge, and three one-offs get fixed and kept as test cases without a grader of their own. Four of the six real groups became code checks; a team that had started from a generic quality score would have measured none of them.
Failure groupNotesHow it is graded
Left out the condition that decides — the closing date, a final-sale item13A judge with the fact list — row 7
Picked the wrong order when the customer had two open8Code: with two open orders, the assistant must ask — row 5
Answered a question the help centre does not cover6Code: the handoff flag on those cases
Replied in English to a Ukrainian message5Code: language detection on the reply
Promised a refund date the policy does not give4Code: every date in the reply must come from a tool or the policy
Blamed the courier or the customer2A judge on tone — row 10
One-offs3No grader: fix each, and keep it as a case

Two things in that table are typical. The biggest group is not the one anybody guessed before reading, and most groups turned out to be checkable by code once somebody had looked at them closely. A team that had started from a “helpfulness” score would have measured neither the wrong order nor the reply in the wrong language.

What goes in the set, and how big it needs to be

The instinct is to build for coverage: a case per feature, spread evenly. That produces a set that scores ninety-something per cent from the first day and never moves again — so it can no longer tell you anything. A set earns its keep by being concentrated where the system is weak, and its composition should be deliberately unbalanced. Here is the order assistant’s.

PartCasesWhy it is there
The failure groups60Real conversations from error analysis, weighted by group, plus the boundary cases of each
No answer in the help centre20The right behaviour is a handoff — the category most systems fail quietly
Protected20Refusals, statutory refund wording, what customers were promised — any failure blocks a release
Adversarial10Hostile reviews and emails, prompt extraction — the security rows of the testing page
Easy canaries10Not for the score: when these fail, something structural broke and the other numbers mean nothing
Held out30The same mix, run only before a release and never tuned against

Thirty to fifty real failures is a genuine starting point; a hundred and fifty is a mature set for one feature. The held-out part matters more than its size suggests. Without it you eventually tune the prompt to the set instead of to the customers, and nothing in the numbers will tell you that it happened. And every case needs a label from someone who knows the domain — for the order assistant, the person who owns the returns policy, not the engineer who wrote the prompt.

The ladder of graders

How an answer is judged matters more than how many answers you judge. There is a clear order to try graders in, and the discipline is to climb only when the rung below genuinely cannot settle the question.

Judging an answer is a design decision, and there is a clear order to try things in. At the bottom sit the checks that cost nothing and cannot be argued with: does the output match exactly, does it parse, does it satisfy the schema, is the label one of the four allowed values. One rung up, run code on the answer — recompute the number it quotes, check the cited passage exists in the source document and actually contains the claim, confirm the tool call carried the right arguments. Above that, compare against a reference answer by similarity, which is fast and fuzzy and tells you less than it appears to. Only then reach for another model as a judge, which handles genuinely subjective questions like tone, helpfulness and whether an answer addressed what was asked — at a cost per case, with variance of its own, and needing to be calibrated against human labels before it can be believed. At the top, a person reads it: the slowest, most expensive and most trustworthy grader there is, and the one that has to define what good means before any rung below can be built. Most evaluation sets are graded far higher up this ladder than they need to be, which spends money to convert a fact into an opinion.

The second rung covers far more of a real set than teams expect. If the answer quotes a number, recompute it (row 3). If it cites a passage, find the passage (row 4). If it calls a tool, assert the arguments (row 5). Each is deterministic code that runs in milliseconds, costs nothing and produces a result nobody can argue with — which is a different kind of thing from a score.

The middle rung is the one to distrust. Word-overlap metrics such as BLEU and ROUGE compare a reply with an approved one, which suits machine translation of fixed sentences and little else. In 2016 Chia-Wei Liu and colleagues found that on dialogue replies they agree with human judgement weakly or not at all (row 12). And running code against tests (row 13) is only as good as the tests: in February 2026 OpenAI found that most of the hard problems in a widely used coding benchmark had tests that reject correct solutions — the fourth case at the end of this page.

A model as a judge, and how to trust one

A model can grade another model’s output, and for questions about meaning it is genuinely useful at a scale people cannot reach. In 2023 Lianmin Zheng and colleagues found that strong judges agreed with human preferences more than 80% of the time — about as often as people agree with each other. The same paper named the judge’s biases, and later work added more. A judge is a measuring instrument with known faults, and each fault has a known counter.

BiasWhat it doesThe counter
PositionIn a pairwise comparison the judge favours one slot. Wang and colleagues, 2023: reordering alone let Vicuna-13B beat ChatGPT on 66 of 80 questions, with ChatGPT judging.Run both orders and keep only verdicts that survive the swap (row 11)
VerbosityLonger answers win even when they add nothing (Zheng and colleagues).Binary questions about a stated criterion, not “which is better” (row 9)
Self-preferenceA model rates its own outputs higher than others of equal quality; Panickssery and colleagues, 2024, tied the strength of this to how well it recognises its own text.Measure it on labelled cases, whichever model judges — see below
PlausibilityA calm, well-formatted wrong fact passes; the judge grades what it can see.Give it the sources and the fact list it needs to be right (rows 7–8)
Middle of the scaleAsked for a score out of ten, judges settle on sevens and eights forever.Pass or fail per criterion, several criteria rather than one holistic score

Then calibrate, and calibrate the way you would test any classifier. Have the domain expert label cases with pass or fail and a one-line reason. Husain recommends about a hundred labelled examples per failure kind, warning that below sixty the uncertainty is too wide to conclude anything. Split them: a few go into the judge’s prompt as examples, about half are a development set you improve the prompt against, and the rest are a test set you look at once, at the end.

On the test set, report two numbers rather than one. The true positive rate () is the share of real failures the judge catches; the true negative rate () is the share of good answers it passes. Agreement alone hides the failure that matters, because most answers are good: a judge that passes everything agrees with the expert as often as good answers occur.

Agreement with the expert is the number most teams report for a model judge, and on its own it hides the failure that matters. The same hundred held-out cases are shown twice; the expert labelled 85 of them good and 15 failures. Judge A passes everything. It agrees with the expert 85 per cent of the time, simply because 85 per cent of answers are good, and it catches none of the fifteen failures: its true positive rate is zero, and its kappa, agreement corrected for chance, is zero too. Judge B flags twenty cases — twelve real failures and eight good answers it wrongly rejects — and misses three failures. Its agreement is 89 per cent, only four points higher, but its true positive rate is 80 per cent and its true negative rate 91, with a kappa of 0.62. The two numbers that tell the judges apart are the rates on each class, which is why they are reported instead of agreement.

Cohen’s kappa, a statistic from 1960, says the same thing in one number: agreement corrected for what chance would give. Judge A’s kappa is 0 and judge B’s is 0.62. And once TPR and TNR are known, the judge’s raw pass rate can be corrected. Judge B passes 80% of answers; knowing it fails 9% of good answers and lets 20% of bad ones through, the true pass rate works out at 85%.

The judge is also a dependency with a version and a price. Pin its model, or a provider update quietly re-scales every historical number. Keep its prompt in version control beside the code, because changing the ruler is as significant as changing what it measures, and far easier to do by accident. Re-check TPR and TNR whenever either the judge or the system under test changes much.

Reading the numbers without fooling yourself

An evaluation result is a measurement from a sample, and a measurement without its uncertainty is half a fact. In 2024 Evan Miller set out how to report evaluation results the way other sciences report experiments: a standard error beside every score, clustered errors when cases come in related groups, repeated sampling to cut noise, comparisons made question by question, and a check before the run that the set can detect the difference you care about.

An evaluation score is a measurement from a sample, and its uncertainty depends on the number of cases. The same 82 per cent pass rate is drawn here with its 95 per cent range for four set sizes. On forty cases the range runs almost twelve points either way, so a change that lifts the score to 85 per cent is one case and tells you nothing. On 120 cases the range is about seven points and the change is still inside it; on 400 it sits at the edge; only on a thousand independent cases does a three-point gain fall clearly outside the noise. Telling three points from noise at this pass rate takes about 630 independent cases. The cheaper way out is to compare the same cases before and after the change, which removes the variation between cases at no cost, and to look at which cases moved rather than at the average.
Cases in the set95% range around an 82% pass rateWhat a 3-point change means
40±11.9 pointsNothing; it is about one case
120±6.9 pointsStill inside the noise
400±3.8 pointsAt the edge
1,000±2.4 pointsA real difference, if the cases are independent

Telling a 3-point change from noise on an 82% pass rate takes about 630 independent cases. Few teams have that, and they do not need it, because two of Miller’s recommendations do most of the work. Compare two versions case by case — the same case, before and after — rather than one average against another; that removes the variation between cases and costs nothing. And when cases come in groups, such as several turns of one conversation, use clustered errors, which in his examples ran to more than three times the naive ones.

A number you can act on

  • Reported with its range, and per failure group as well as overall.
  • Each case run several times, so sampling noise is measured, not assumed away.
  • Compared case by case with a recorded baseline, protected cases first.
  • Graded by a judge whose TPR and TNR are printed next to it.

A number that is lying to you

  • One percentage from one run, where a 2-point move is indistinguishable from noise.
  • Ninety-four per cent on a set built from cases that already passed.
  • A score that only ever goes up, because the prompt is tuned to the set.
  • An agreement rate for a judge, with no TPR beside it.

Other people’s numbers: four measurements that misled

Public benchmarks and vendor figures are evaluations too, built by people under the same pressures, and they fail in the same ways. Each of these four was published, widely cited and wrong about what it seemed to measure. None of them involved fraud in the ordinary sense; each is a decision about how to build or grade a set.

MeasurementWhat was wrong with itThe rule it breaks
Epic Sepsis Model, validated externally 2021A sepsis warning used in hundreds of US hospitals, reported by its developer at 0.76–0.83 (AUC, where 0.5 is a coin toss). At Michigan Medicine, across 38,455 hospitalisations, it scored 0.63, missed two thirds of sepsis cases and alerted on 18% of all hospitalisations. Counting predictions made up to three hours after sepsis had begun raised it to 0.80 — the score was partly grading cases where the answer was already visible.The set must be the decision as it happens — no answer visible to the model, and the population it will meet
MMLU, re-annotated 2024Re-checking 5,700 questions of the most cited knowledge benchmark, Aryo Gema and colleagues estimated that 6.49% of all questions contain errors — and 57% of the Virology questions they analysed.Labels are data and need checking; a score above the label error rate is partly measuring the errors
Llama 4 on LMArena, Apr 2025The model that gave Meta a high score on the crowd-voted leaderboard was an unreleased variant “optimized for conversationality”; the released model ranked below models months older. A study of the leaderboard counted 27 private variants Meta tested there before the release, and showed how testing many and publishing the best inflates a score.Evaluate what ships; trying many variants against one set and reporting the best is tuning to the set
SWE-bench Verified, 2024–2026Built in 2024 by having 93 developers review 1,699 coding tasks and keeping 500. In February 2026 OpenAI audited 138 of the hard ones and found 59.4% with tests or descriptions that made them extremely difficult or impossible to solve, and signs that models had seen the solutions in training. It stopped reporting the benchmark.A public set leaks into training; keep a private holdout, and audit the graders as well as the cases

Where it degrades

The honest limit is that every number on this page measures agreement with somebody’s idea of good, written down at one moment. The rubric drifts as people read, the expert labels from last quarter’s policy, and the set describes the failures you have already met. An evaluation can tell you that a change did not make known things worse. It cannot tell you that the feature is good, and the sixteenth row — what customers actually did — stays the only one that answers that.

  • Generic metrics chosen before anyone read a conversation, measuring problems nobody has seen.
  • A set built from cases that already pass, which reports a high number and detects nothing.
  • A model judge on questions code could settle, buying uncertainty at a price per case.
  • A judge reported by its agreement rate, with nobody checking whether it catches any failures.
  • One holistic score out of ten, averaging away the one dimension that broke.
  • No holdout, so the prompt is tuned to the set until the set stops predicting anything.
  • A 3-point gain on forty cases from one run, announced as a result.
  • A public leaderboard position taken as evidence about your own use case.
  • An unpinned judge, which quietly re-scales every historical result.

When to use it

Use it when

  • As soon as a feature has real conversations to read — thirty real failures beat a platform.
  • With error analysis first, so each grader exists for a failure somebody saw.
  • With the lowest rung that settles each question, and a judge only where meaning is at stake.
  • With every judge tested on labelled cases and reported with its TPR and TNR.

Avoid it when

  • A model-graded score for anything a schema check, a recomputation or a lookup can settle exactly.
  • Conclusions from one average from one run, where noise and a real change look identical.
  • Choosing a model for your product from a public leaderboard alone.
  • Building an evaluation platform before the feature exists, which is process bought instead of information.

Sources and method

What this page stands on

  • 16 sources
  • 4 documented failures
  • Checked October 17, 2026

Researched with Claude. Finding and cross-checking the primary sources was done with Claude (Anthropic). Selection, writing and fact-checking: the Anatomy of IT Product editors.

Found this useful?

Share it with someone who is working on the same problem.