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 checking | The cheapest grader that settles it | What fools it |
|---|---|---|---|
| 1 | The reply parses and has its fields | Exact: schema validation | Nothing — and it says nothing about the values inside |
| 2 | The intent is one of the six labels | Exact: comparison with the label set | Labels whose meaning drifts: “other” slowly absorbing everything |
| 3 | The refund amount or the days left | Code: recompute from the tool’s result, with a tolerance | Formats — “€1,299.00” against “1299” — so compare parsed numbers, not strings |
| 4 | The cited article says what the reply says it says | Code: find the quoted passage in the index | Different spaces or quote marks — normalise both sides first |
| 5 | The right tool, with the right arguments | Code: assert the call | Two valid calls in a different order — compare them as a set |
| 6 | A required fact is present: “the window closes on 24 October” | Code: a string or pattern match, while the phrasing is fixed | The same fact in other words — when phrasing varies, go up to row 7 |
| 7 | Every required fact, however it is phrased | Judge: given the fact list, yes or no for each fact | A fluent reply that mentions a fact’s topic without stating the fact |
| 8 | Nothing in the reply that the sources do not say | Judge: given the sources, yes or no for each claim | A judge that is not shown the sources grades plausibility, not faithfulness |
| 9 | The reply answers the question asked | Judge: binary, with the question in front of it | A long reply that covers everything — judges favour length |
| 10 | The tone follows the style guide | Judge: binary, with the guide and two examples | Politeness wrapped around a refusal; the judge rewards the wrapping |
| 11 | Which of two prompt versions answers better | Judge: pairwise, run in both orders | Order alone: in one study it let the weaker model win 66 of 80 comparisons |
| 12 | A summary or a translation matches the approved one | Reference: word-overlap metrics such as BLEU or ROUGE | A correct answer in other words scores low; on open-ended text these track people poorly |
| 13 | Generated code works | Code: run it against tests | Tests that demand more than the task asked — or that leaked into training |
| 14 | Advice a specialist would call harmful | Human first: a specialist’s rubric, then a judge calibrated against it | General safety filters do not know the domain: a calorie deficit is ordinary advice to most readers |
| 15 | The overall experience | Human: a person reads a weekly sample | Fatigue, and criteria that shift as people read — write the rubric down again |
| 16 | Whether the feature does its job | Outcome: in production, questions resolved without a second contact | Everything 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 hallucinationconfident invented outputA model stating something invented with the same fluency it states something true. It is not a bug to be patched out: the model predicts plausible text, and plausible is not the same as correct — which is why anything checkable gets checked.Full article →All terms 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.
| Failure group | Notes | How it is graded |
|---|---|---|
| Left out the condition that decides — the closing date, a final-sale item | 13 | A judge with the fact list — row 7 |
| Picked the wrong order when the customer had two open | 8 | Code: with two open orders, the assistant must ask — row 5 |
| Answered a question the help centre does not cover | 6 | Code: the handoff flag on those cases |
| Replied in English to a Ukrainian message | 5 | Code: language detection on the reply |
| Promised a refund date the policy does not give | 4 | Code: every date in the reply must come from a tool or the policy |
| Blamed the courier or the customer | 2 | A judge on tone — row 10 |
| One-offs | 3 | No 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.
| Part | Cases | Why it is there |
|---|---|---|
| The failure groups | 60 | Real conversations from error analysis, weighted by group, plus the boundary cases of each |
| No answer in the help centre | 20 | The right behaviour is a handoff — the category most systems fail quietly |
| Protected | 20 | Refusals, statutory refund wording, what customers were promised — any failure blocks a release |
| Adversarial | 10 | Hostile reviews and emails, prompt extraction — the security rows of the testing page |
| Easy canaries | 10 | Not for the score: when these fail, something structural broke and the other numbers mean nothing |
| Held out | 30 | The 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.
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.
| Bias | What it does | The counter |
|---|---|---|
| Position | In 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) |
| Verbosity | Longer answers win even when they add nothing (Zheng and colleagues). | Binary questions about a stated criterion, not “which is better” (row 9) |
| Self-preference | A 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 |
| Plausibility | A 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 scale | Asked 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 (TPRtrue positive rate — share of real failures caughtThe share of real positives a test, a classifier or a model judge actually catches — the same quantity as recall. A TPR of 80% means one real failure in five gets through; read it beside the TNR, because a judge that flags nothing has a perfect TNR and a TPR of zero.All terms) is the share of real failures the judge catches; the true negative rate (TNRtrue negative rate — share of good cases passedThe share of real negatives — good answers, healthy cases — that a test, a classifier or a model judge correctly lets pass. A TNR of 91% means about one good case in eleven is flagged by mistake; a high TNR on its own says nothing, since passing everything scores 100%.All terms) 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.
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.
| Cases in the set | 95% range around an 82% pass rate | What a 3-point change means |
|---|---|---|
| 40 | ±11.9 points | Nothing; it is about one case |
| 120 | ±6.9 points | Still inside the noise |
| 400 | ±3.8 points | At the edge |
| 1,000 | ±2.4 points | A 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.
| Measurement | What was wrong with it | The rule it breaks |
|---|---|---|
| Epic Sepsis Model, validated externally 2021 | A 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 2024 | Re-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 2025 | The 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–2026 | Built 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
The four measurements
the cases in “Other people’s numbers: four measurements that misled”- ResearchAndrew Wong et al. — External Validation of a Widely Implemented Proprietary Sepsis Prediction Model in Hospitalized Patients (opens in a new tab)JAMA Internal Medicine · Aug 2021
- ResearchAryo Pradipta Gema et al. — Are We Done with MMLU? (opens in a new tab)arXiv · Jun 2024
- ArticleMeta’s vanilla Maverick AI model ranks below rivals on a popular chat benchmark (opens in a new tab)TechCrunch · Apr 11, 2025
- ResearchShivalika Singh et al. — The Leaderboard Illusion (opens in a new tab)arXiv · Apr 2025
- PostmortemIntroducing SWE-bench Verified (opens in a new tab)OpenAI · Aug 13, 2024
- PostmortemWhy we no longer evaluate SWE-bench Verified (opens in a new tab)OpenAI · Feb 23, 2026
Research
judges and their biases, criteria drift, the statistics of a score, and agreement- ResearchLianmin Zheng et al. — Judging LLM-as-a-Judge with MT-Bench and Chatbot Arena (opens in a new tab)arXiv · Jun 2023
- ResearchPeiyi Wang et al. — Large Language Models are not Fair Evaluators (opens in a new tab)arXiv · May 2023
- ResearchArjun Panickssery, Samuel R. Bowman, Shi Feng — LLM Evaluators Recognize and Favor Their Own Generations (opens in a new tab)arXiv · Apr 2024
- ResearchShreya Shankar et al. — Who Validates the Validators? Aligning LLM-Assisted Evaluation of LLM Outputs with Human Preferences (opens in a new tab)arXiv · Apr 2024
- ResearchEvan Miller — Adding Error Bars to Evals: A Statistical Approach to Language Model Evaluations (opens in a new tab)arXiv · Nov 2024
- ResearchChia-Wei Liu et al. — How NOT To Evaluate Your Dialogue System: An Empirical Study of Unsupervised Evaluation Metrics for Dialogue Response Generation (opens in a new tab)arXiv · Mar 2016
- ResearchJacob Cohen — A Coefficient of Agreement for Nominal Scales (opens in a new tab)Educational and Psychological Measurement · Apr 1960
Practices and where the terms come from
error analysis, binary judges and how to calibrate them- GuideHamel Husain, Shreya Shankar — AI Evals: Everything You Need to Know (opens in a new tab)hamel.dev · Sep 18, 2026
- GuideHamel Husain — Using LLM-as-a-Judge For Evaluation: A Complete Guide (opens in a new tab)hamel.dev · Oct 29, 2024
- GuideHamel Husain — Your AI Product Needs Evals (opens in a new tab)hamel.dev · Mar 29, 2024
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.