PROMETHEUS OS
NATIVE AI OPERATING SYSTEM
[INIT] Prometheus OS loading...
[CORE] Neural interface initializing...
[AI] LLM router connecting...
[MEM] Memory graph loading...
[AGT] Agent chains on standby...
[SEC] Security protocols active...
[NET] Provider mesh established...
[UI] Workspace rendering...
[DONE] All systems nominal.
Welcome to PROMETHEUS OS.
READY · OFFLINE · SECURE · PRIVATE
🎨 THEME ENGINE
PROMETHEUS OS · 23 THEMES
Trial version: Dark + Light themes only.
Full theme access with PROMETHEUS OS license.
Dark theme active
Experience all 23 themes in PROMETHEUS OS

Benchmarks and Evaluation

Advanced 14 min· 4 exercises

Understand what AI benchmarks and leaderboards actually measure, why scores can mislead, and how to build a small test of your own.

By the end of this lesson you will be able to
  • Explain what major benchmark families measure and how contamination and saturation distort scores.
  • Calculate standard errors and 95% confidence intervals for benchmark accuracy.
  • Apply paired comparisons and sample-size reasoning to decide whether two models really differ.
  • Compute pass@k with the unbiased estimator and pass^k for repeated-trial reliability.
  • Interpret Bradley–Terry arena ratings and design a small private evaluation set for your own task.

Before this: Probability and Statistics for AI, Model Evaluation and Metrics

Every model launch arrives with a table of benchmark scores. Those numbers are useful, but they are easy to over-read. Knowing what each kind of test measures, and how scores get distorted, helps you choose models on evidence rather than headlines.

What a benchmark is

A benchmark is a fixed set of tasks with a scoring rule, run the same way on different models so their results can be compared. Some are multiple-choice exams; some check an exact answer; some run code against hidden tests; some put an AI agent into a simulated environment and check the outcome.

An analogy: a standardised exam for students. It tells you something real and comparable, but a high score does not guarantee someone will be good at your particular job, and students can be coached to the test.

What benchmarks measure

Benchmarks roughly fall into four families. These are well-known examples, described as published by their authors:

Knowledge

  • MMLU (Massive Multitask Language Understanding, 2020): four-option multiple-choice questions across 57 subjects, from maths to law to history.

Reasoning and expert problem-solving

  • GPQA Diamond: 198 hard multiple-choice questions in biology, physics and chemistry, written to be "Google-proof". Its authors reported that domain experts scored about 65% and skilled non-experts with web access about 34%.
  • Humanity's Last Exam (2025): 2,500 questions across more than a hundred subjects, written by nearly 1,000 subject experts and organised by the Center for AI Safety and Scale AI. About a quarter are multiple-choice; the rest need an exact answer.

Coding

  • SWE-bench Verified: 500 real GitHub issues from Python projects, screened by human developers to remove unclear or unfair tasks. The model gets the code and the issue text, writes a fix, and passes only if hidden tests confirm the bug is fixed and nothing else broke.

Agentic

  • τ-bench (tau-bench): an AI agent handles simulated customer-service conversations in retail and airline settings, using tools and following a policy document while a second model plays the customer. It also measures consistency: "pass^k" is the chance the agent succeeds on all k repeated attempts. In the original 2024 paper, the strongest agent tested (built on GPT-4o) solved about 61% of retail tasks on a single attempt, but under 25% when it had to succeed on all eight attempts, a reminder that one good run is not reliability.

Contamination

Contamination happens when benchmark questions or answers end up in a model's training data, often because they are posted online. The model may then recall answers rather than solve problems, inflating its score. Defences include keeping test sets private, writing fresh questions regularly, and checking whether a model does much worse on newly written questions of the same type.

Saturation

A benchmark is saturated when top models score so close to the maximum that differences stop meaning much, and remaining errors may simply be mistakes in the test itself. The authors of Humanity's Last Exam noted that models already exceeded 90% accuracy on MMLU, which is why they built a harder test. Every successful benchmark eventually saturates, so the names in launch tables change over time.

Leaderboards and human-preference arenas

Leaderboards collect benchmark scores for many models in one place. Check who runs them, which settings were used (reasoning effort, number of attempts, tools allowed) and whether scores were measured independently or reported by the model's maker.

Human-preference arenas take a different approach. The best known began as Chatbot Arena in 2023, became LMArena, and was renamed Arena in January 2026. A visitor types a prompt, two anonymous models answer, the visitor votes for the better one, and only then are the names revealed. Many votes are combined into a ranking.

Arenas capture something exams miss: what people actually prefer. But they have known weaknesses:

  • Votes reflect style as well as substance; longer, confident, well-formatted answers can win even when they are wrong.
  • Most prompts are short, casual chats, not your work.
  • A 2025 paper, "The Leaderboard Illusion", reported that some providers privately tested many model variants before release and published only the best, and that large closed-model providers received a disproportionate share of the voting data. In April 2025 a Meta model ranked highly with a version different from the one released publicly, after which the arena updated its policies.

Why your own tests matter

No public benchmark matches your tasks, your documents and your standards. A small private test set is the most reliable guide you can get, and it cannot have leaked into anyone's training data.

Worked example: you want a model to summarise customer complaints.

  1. Collect 30 real (anonymised) complaints, including a few hard ones: long, angry, multilingual, ambiguous.
  2. Write down what a good summary must include, such as product, problem and requested action, in a short checklist.
  3. Run each candidate model on all 30, with the same prompt and settings.
  4. Score each output against the checklist; for 30 items this takes about an hour by hand.
  5. Run it three times. If a model gets 27/30 once but varies widely between runs, that matters as much as the average.

Thirty examples will not settle small differences, but they will reliably reveal a model that misses key details or fails on your hardest cases. Keep the set and rerun it whenever you consider switching models.

Going deeper

A benchmark score is an estimate

Treat each question as a trial that the model passes (ci=1c_i = 1) or fails (ci=0c_i = 0). The benchmark score is the sample mean p^=1n∑ici\hat{p} = \frac{1}{n}\sum_i c_i, an estimate of the model's true accuracy pp on questions like these. Its standard error is

SE(p^)=p^(1−p^)n,\mathrm{SE}(\hat{p}) = \sqrt{\frac{\hat{p}(1 - \hat{p})}{n}},

and an approximate 95% confidence interval is p^±1.96 SE\hat{p} \pm 1.96\, \mathrm{SE} (a normal approximation that is reasonable when np^n\hat{p} and n(1−p^)n(1-\hat{p}) are both at least about 10).

Worked example. GPQA Diamond has 198 questions. A model scoring 70% has SE=0.7×0.3/198≈0.0326\mathrm{SE} = \sqrt{0.7 \times 0.3 / 198} \approx 0.0326, so the 95% interval is about ±6.4\pm 6.4 percentage points: roughly 64% to 76%. A launch table showing 70% versus 68% on GPQA Diamond is not evidence of a difference. MMLU's test set has 14,042 questions, so at 85% the interval is about ±0.6\pm 0.6 points, much tighter, though by now its errors are dominated by saturation and label noise rather than sampling.

Compare models on the same questions

Two models answer the same items, so their errors are correlated. The right analysis is paired: for each question compute di=ciA−ciB∈{−1,0,1}d_i = c_i^A - c_i^B \in \{-1, 0, 1\} and use

dˉ=1n∑idi,SE(dˉ)=sdn,\bar{d} = \frac{1}{n}\sum_i d_i, \qquad \mathrm{SE}(\bar{d}) = \frac{s_d}{\sqrt{n}},

where sds_d is the sample standard deviation of the did_i. Questions both models get right or both get wrong contribute zero, so only the disagreements carry information, and the paired interval is usually much narrower than comparing two separate intervals. Miller (2024) gives this and related recipes for language-model evals, including clustered standard errors when questions come in groups (several questions about one passage are not independent).

How many questions do you need? To detect a true difference δ\delta between two independent accuracies near pp with 5% significance and 80% power,

n≈(z0.975+z0.8)2⋅2p(1−p)δ2=(1.96+0.84)2⋅2p(1−p)δ2.n \approx \frac{(z_{0.975} + z_{0.8})^2 \cdot 2p(1-p)}{\delta^2} = \frac{(1.96 + 0.84)^2 \cdot 2p(1-p)}{\delta^2}.

For p=0.8p = 0.8 and δ=0.03\delta = 0.03: 7.84×0.32/0.0009≈2,7907.84 \times 0.32 / 0.0009 \approx 2{,}790 questions per model. Pairing reduces this, but the lesson stands: a 30-item private set finds big failures, not 3-point differences.

pass@k and pass^k

For code, many papers sample nn solutions per problem, count the cc that pass, and report pass@k, the chance at least one of kk samples passes. Chen et al. (2021) introduced the unbiased estimator

pass@k^=1−(n−ck)(nk),\widehat{\text{pass@}k} = 1 - \frac{\binom{n - c}{k}}{\binom{n}{k}},

averaged over problems. With n=10n = 10 and c=3c = 3: pass@1 =1−7/10=0.30= 1 - 7/10 = 0.30, and pass@5 =1−(75)/(105)=1−21/252≈0.917= 1 - \binom{7}{5}/\binom{10}{5} = 1 - 21/252 \approx 0.917. The same model looks very different depending on kk, so always check which is reported. τ-bench's pass^k asks the opposite question, whether all kk attempts succeed, estimated by (ck)/(nk)\binom{c}{k} / \binom{n}{k}: with 5 successes out of 8 trials, pass^2 =10/28≈0.36= 10/28 \approx 0.36, and pass^8 is 0.

How arenas turn votes into ratings

Arena-style leaderboards fit a Bradley–Terry model, in which each model ii has a strength θi\theta_i and

P(i beats j)=11+e−(θi−θj).P(i \text{ beats } j) = \frac{1}{1 + e^{-(\theta_i - \theta_j)}} .

Strengths are fitted by logistic regression on the votes and reported on an Elo-like scale where a gap of ΔR\Delta R points means P=1/(1+10−ΔR/400)P = 1 / (1 + 10^{-\Delta R / 400}). A 100-point gap means the higher model wins about 64% of head-to-head votes; a 20-point gap, about 53%, close to a coin flip. Published arena tables include confidence intervals for this reason; overlapping intervals mean the ranks are not settled.

Checking an automatic grader

Many evaluations use a model as the judge. Before trusting one, grade a sample by hand and measure agreement beyond chance with Cohen's kappa:

κ=po−pe1−pe,\kappa = \frac{p_o - p_e}{1 - p_e},

where pop_o is the observed agreement rate and pep_e the agreement expected by chance from each grader's label frequencies. Example: on 100 outputs, a human marks 60% as pass, the judge marks 65% as pass, and they agree on 85. Then pe=0.60×0.65+0.40×0.35=0.53p_e = 0.60 \times 0.65 + 0.40 \times 0.35 = 0.53 and κ=(0.85−0.53)/(1−0.53)≈0.68\kappa = (0.85 - 0.53) / (1 - 0.53) \approx 0.68: substantial but imperfect agreement. Raw agreement of 85% sounds better than it is, because two graders that both say "pass" most of the time agree often by chance. Look at the disagreements too; judges often favour longer answers or whichever answer is shown first.

Code: intervals, paired differences and pass@k

import numpy as np
from math import comb

def accuracy_ci(correct):
    """Accuracy with a normal-approximation 95% confidence interval."""
    c = np.asarray(correct, dtype=float)
    p, se = c.mean(), c.std(ddof=1) / np.sqrt(len(c))
    return p, p - 1.96 * se, p + 1.96 * se

def paired_diff_ci(a, b):
    """95% CI for accuracy(A) - accuracy(B) on the SAME questions."""
    d = np.asarray(a, float) - np.asarray(b, float)   # each entry -1, 0 or 1
    se = d.std(ddof=1) / np.sqrt(len(d))
    return d.mean(), d.mean() - 1.96 * se, d.mean() + 1.96 * se

def pass_at_k(n, c, k):
    """Unbiased pass@k from n samples per problem, c of them correct."""
    return 1.0 if n - c < k else 1 - comb(n - c, k) / comb(n, k)

rng = np.random.default_rng(1)
skill = rng.uniform(0, 1, 198)                 # per-question difficulty
a = rng.random(198) < 0.25 + 0.6 * skill       # model A right/wrong
b = rng.random(198) < 0.22 + 0.6 * skill       # model B, slightly weaker
print("A: %.3f [%.3f, %.3f]" % accuracy_ci(a))
print("B: %.3f [%.3f, %.3f]" % accuracy_ci(b))
print("A-B: %.3f [%.3f, %.3f]" % paired_diff_ci(a, b))
print("pass@1, pass@5 for n=10, c=3:", pass_at_k(10, 3, 1),
      round(pass_at_k(10, 3, 5), 4))

In this simulation model A really is about 3 points better by construction, yet with 198 questions the paired 95% interval for the difference still includes zero. That is the normal situation on small benchmarks, and the reason to report intervals rather than single numbers.

Common pitfalls

  • Reporting point scores without intervals. On benchmarks of a few hundred items, differences of several points are often noise.
  • Comparing numbers from different settings. Prompt format, few-shot examples, reasoning effort, sampling temperature, number of attempts and tool access all change scores.
  • Mixing pass@1 and pass@k. They answer different questions; pass@k with a large k flatters a model that has no way to choose its best sample.
  • Tuning on the test set. Iterating prompts against your evaluation set overfits it; keep a held-out split.
  • Trusting an LLM judge blindly. Model graders have position and length biases; check agreement with human labels on a sample.

In practice

  • Read benchmark names, not just numbers: ask whether the test resembles your task.
  • Be sceptical of results on saturated tests, and look for independent measurements.
  • Treat arena rankings as a signal about general chat preference, not about accuracy on your work.
  • Build a small private test set from real examples and check consistency across repeated runs.

Key takeaways

  • Benchmarks are fixed tasks with scoring rules, grouped roughly into knowledge, reasoning, coding and agentic tests.
  • Contamination inflates scores when test questions leak into training data, and saturation makes top scores stop distinguishing models.
  • Human-preference arenas show what people prefer in chat, but style, prompt mix and selective testing can distort rankings.
  • Reliability matters as well as peak score: an agent that succeeds once may fail when the same task is repeated.
  • A small private test set built from your own tasks is the most trustworthy way to compare models.

Terms in this lesson

Benchmark
A fixed set of tasks and a scoring rule used to compare models consistently.
Contamination
When benchmark questions or answers appear in a model's training data, inflating its score.
Saturation
When top models score near the maximum, so the benchmark no longer separates them.
Leaderboard
A ranked table of model scores on one or more benchmarks.
Human-preference arena
A site where people vote between anonymous model answers, producing a ranking from many votes.
pass^k
The chance that a model succeeds on all k repeated attempts at the same task.
Confidence interval
A range computed from data that, under the method's assumptions, contains the true value with a stated probability such as 95%.
Paired comparison
Comparing two models question by question on the same items, which removes shared difficulty and narrows the uncertainty of the difference.
Bradley–Terry model
A statistical model in which the probability that one item beats another is a logistic function of the difference in their strengths.

Check your understanding

  1. 1.

    A model scores far better on an old, widely posted benchmark than on freshly written questions of the same type. What does that most suggest?

  2. 2.

    Why might a model rank highly in a human-preference arena yet perform poorly on your work?

  3. 3.

    In tau-bench, why does an agent's pass^8 score fall well below its pass^1 score?

  4. 4.

    On GPQA Diamond (198 questions), model A scores 72% and model B 69%. What is the most defensible conclusion?

  5. 5.

    On an arena leaderboard, model X is rated 100 points above model Y on the Elo-style scale. Roughly how often would X win a head-to-head vote?

Exercises

Work each problem before opening the solution.

  1. Exercise 1Core

    A model gets 62 of 100 questions right on your private test set. Give the 95% confidence interval for its accuracy, and say whether a competitor scoring 58/100 on the same set is clearly worse.

    Show solution

    p^=0.62\hat{p} = 0.62, SE=0.62×0.38/100≈0.0485\mathrm{SE} = \sqrt{0.62 \times 0.38 / 100} \approx 0.0485, interval 0.62±1.96×0.0485=0.62±0.0950.62 \pm 1.96 \times 0.0485 = 0.62 \pm 0.095, about 52.5% to 71.5%. The competitor's 58% is well inside it. Even a paired analysis on 100 items will rarely separate a 4-point gap, so the honest conclusion is that you cannot tell them apart on this set.

  2. Exercise 2Core

    For a coding benchmark you draw n=20n = 20 samples per problem. On one problem c=4c = 4 pass. Compute the unbiased pass@1 and pass@5, and pass^2 (all of 2 attempts succeed).

    Show solution

    pass@1 =1−(161)/(201)=1−16/20=0.20= 1 - \binom{16}{1}/\binom{20}{1} = 1 - 16/20 = 0.20. pass@5 =1−(165)/(205)=1−4368/15504≈1−0.2817=0.718= 1 - \binom{16}{5}/\binom{20}{5} = 1 - 4368/15504 \approx 1 - 0.2817 = 0.718. pass^2 =(42)/(202)=6/190≈0.032= \binom{4}{2}/\binom{20}{2} = 6/190 \approx 0.032. The same problem looks easy under pass@5 and nearly hopeless under pass^2.

  3. Exercise 3Core

    Write a paired bootstrap: given two boolean arrays of per-question correctness for models A and B, resample questions with replacement 10,000 times and return the observed difference, a 95% percentile interval, and the fraction of resamples where A is not better.

    Show solution
    import numpy as np
    
    def paired_bootstrap(a, b, n_boot=10_000, seed=0):
        a, b = np.asarray(a, float), np.asarray(b, float)
        rng = np.random.default_rng(seed)
        idx = rng.integers(0, len(a), size=(n_boot, len(a)))
        diffs = a[idx].mean(axis=1) - b[idx].mean(axis=1)
        lo, hi = np.percentile(diffs, [2.5, 97.5])
        return a.mean() - b.mean(), lo, hi, float(np.mean(diffs <= 0))
    

    The key detail is that the same resampled question indices idx are used for both models, which preserves the pairing. On the lesson's simulated data (198 questions) this gives a difference of about 0.061 with an interval of roughly −0.04 to 0.16, matching the analytic paired interval.

  4. Exercise 4Challenge

    You must decide between two models for a classification-style task where both are around 80% accurate, and a 3-point difference would justify a switch. (a) How many independent test items per model would you need for 80% power at 5% significance? (b) Why would a paired design need fewer? (c) Design a practical evaluation plan within a budget of about 600 labelled items.

    Show solution

    (a) n≈(1.96+0.84)2×2×0.8×0.2/0.032=7.84×0.32/0.0009≈2,790n \approx (1.96 + 0.84)^2 \times 2 \times 0.8 \times 0.2 / 0.03^2 = 7.84 \times 0.32 / 0.0009 \approx 2{,}790 items per model.

    (b) In a paired design only disagreements matter. If the models agree on most items, the variance of did_i is roughly the disagreement rate (say 10% of items, all discordant) rather than 2p(1−p)=0.322p(1-p) = 0.32, so the required nn shrinks in proportion: about 7.84×0.10/0.0009≈8707.84 \times 0.10 / 0.0009 \approx 870.

    (c) With 600 items: run both models on all 600 (paired); stratify the set so hard and rare cases are represented; fix prompts and settings before looking at results and keep 100 items held out for any prompt tuning; run each model 2–3 times to measure run-to-run variance; report the paired difference with a bootstrap interval; and pre-commit to a decision rule (for example, switch only if the lower bound of the interval is above 0 and costs are acceptable). Accept that 600 items may only detect differences of about 3.5 to 4 points, and weigh error severity, not just counts.

Further reading

Go further

Sources

Fact-checked and last reviewed 2026-11-05

Stay in the loop
Prometheus OS™ · Native AI OS · Built for the future © 2025 - 2026