∇
Chapter 22 · Section 22.7 · 90 min

Human evaluation and arenas

An arena ranks language models by people's votes. A visitor types a prompt, two anonymous models answer it side by side, and the visitor votes for the answer they like better or calls a tie. Millions of such votes become one rating per model, and those ratings are among the most watched numbers in the field. This section is about what the votes measure, how they become ratings, how precise the ratings are, and where they mislead.

Here is a concrete case. WebDev Arena is an arena in which the prompt describes a web app and each model builds it. In October 2026 it listed Claude Opus 5.5 (max) at 1820 points from 1,887 votes and GPT-6 Astra (max) at 1800 points from 2,281 votes (Epoch AI's copy of the leaderboard, retrieved October 2026). Is the first model better? The arena's own 95% intervals were 1803 to 1837 and 1784 to 1817, and they overlap. That overlap does not settle the question, because checking whether two intervals overlap is a much stricter test than it looks (§22.2). Later in this section you will run the right test by hand.

A second case shows that the process behind a rating matters as much as the arithmetic. Singh et al. (2025) found that Meta had tested 27 private variants of its models on Chatbot Arena, the original text arena, before the Llama 4 release. Providers could test variants privately and publish only the ones they liked. Google and OpenAI had each received about a fifth of all the arena's data (an estimated 19.2% and 20.4%), while 83 open-weight models, whose weights anyone can download, together had received 29.7%. If you can try 27 variants and keep the best, how much of the published rating is the model and how much is the selection? We will put a number on it.

§22.1 treated every evaluation as an estimate of a quantity you care about. Its error has several sources, among them whether the test measures the right thing, luck in which items were drawn, and mistakes by whoever grades. §22.4 studied the grader when it is a language model. Here the graders are people, and the ratings are a statistical model fitted to their votes. We will design a human evaluation, then derive the chess rating system Elo and show that it is a form of gradient descent. Then we fit ratings to all the votes at once, with honest intervals, and turn the intervals into ranks. We correct for answer length and formatting, work out how many votes a comparison needs, and end with what arenas get wrong.

What a human preference vote measures

People are the graders of last resort. Nobody can write a unit test for "a helpful reply to a worried parent" or "a landing page that looks good", and a model judge brings the biases measured in §22.4. So we ask people. But "people prefer A" means something only once we say which people, on which prompts, asked which question.

Here is the quantity a vote estimates, in plain words first. Draw a random prompt, a random rater, and one answer from each model. Record 1 if the rater prefers model A's answer, 0.5 for a tie, and 0 if they prefer B's. Average that record over endless repetitions. The average is the population's preference for A over B. The exact quantity an evaluation targets is called its estimand.

In plain words, θAB\theta_{AB} is the share of points AA would win against BB if the arena ran forever. It belongs to a triple, the prompts, the raters, and the interface. Change any one of them and you have a different number. This is the question of construct validity from §22.1, whether a test measures what you care about, asked of human raters. An arena estimates θ\theta for many pairs of models and then summarizes them with one number per model, and that summary is where the statistics begin. An interviewer who asks "what does an arena rank measure?" wants to hear this triple named.

Rating one answer or comparing two

There are two basic formats. In an absolute (pointwise) evaluation a rater scores one response on its own. The score is either a point on a Likert scale, a numbered scale such as 1 for very poor to 7 for excellent, or a pass or fail on each yes-or-no criterion of a rubric. In a side-by-side (pairwise) evaluation the rater sees two responses to the same prompt and says which is better, or that they tie. Model judges face the same choice in §22.4, for the same reasons.

formatwhat it returnsstrengthsweaknesses
Likert scale, one responsea score per responseabsolute level, one model at a time, cheap to aggregateraters use the scale differently and drift over time, scores bunch at the top, small differences vanish
rubric of binary criteriapass or fail per criterionprecise, auditable, good for gates (did it cite the dose, did it refuse correctly)someone must write criteria that cover what matters, and it misses qualities nobody listed
side by side, with tiesa preference per pairmost sensitive to small differences, needs no shared scale, the format of RLHF datarelative only, needs a rating model to rank many systems, inherits order and style effects

Labs mostly compare models side by side. Side-by-side comparison is also the format of the preference data used in reinforcement learning from human feedback (RLHF), where a reward model, a network trained to predict which answer people prefer, learns from such pairs (§16.2). Labs use rubrics where an absolute bar is needed. HealthBench, for example, scores medical answers against criteria written by physicians (§22.4).

Designing a human evaluation that means something

A human evaluation is an experiment, and the habits of good experiments apply. This checklist extends the short one in §14.7.

  • Blind and randomized. Raters never see model names, and the left-right order is randomized for each item. People favor one position just as model judges do, and randomizing makes that effect cancel on average. The size of the side bias can then be measured as one extra term in the rating model below.
  • The right raters. Match expertise to the claim. Crowd raters can judge tone and clarity. Checking a drug dose, a proof, or a legal argument needs people who can verify it.
  • A written rubric with priorities. Say what to judge (correctness, completeness, instruction following, safety, style) and in what order, with worked examples of hard cases, so that "better" means the same thing to every rater.
  • Allow ties and "both bad". A forced choice between two equally good or two equally broken answers is a coin flip that looks like data.
  • Measure agreement first. Run a calibration round, in which all raters label the same items. Then compute their agreement with the statistics of §22.4, such as Cohen's kappa, the agreement rate corrected for agreement by chance. Rater noise also sets a ceiling on how often anything, a model judge included, can agree with one rater. That ceiling sits a little above the raters' agreement with each other, because the best possible grader matches the consensus that each rater strays from (§16.2).
  • Plan the sample size. A win rate θ\theta estimated from nn comparisons has standard error θ(1−θ)/n\sqrt{\theta(1-\theta)/n}. So 100 comparisons near a 50% win rate give a standard error of 5 points. Telling a 55% win rate from 50% with 80% power at the 5% level takes about 800 comparisons (§0.11). Later in this section we do the same calculation for ratings.
  • Pre-register the comparison. Fix the prompts, the raters, and the main metric before looking at results. Otherwise the many small choices of an analysis, the garden of forking paths of §0.11, will find a difference for you.

People are graders with biases of their own

Human votes are the reference, not the truth. Three findings about them matter to anyone who reads a leaderboard.

Style is mistaken for substance. Gudibande et al. (2023) fine-tuned small open models to imitate ChatGPT's outputs. Crowd raters judged the imitations nearly as good as ChatGPT because the style was right, and they missed that the facts were not (§14.7). Hosking et al. (2023) found that overall preference scores under-weight factuality. Raters more often judge a confident answer to be free of factual errors, so assertiveness skews their judgments. The authors also gave preliminary evidence that training on human preferences makes outputs more assertive. That is a loop in which the model learns to please the grader rather than to be right, the reward hacking of §16.5.

Crowds are noisier than experts, but not by much on everyday prompts. Chiang et al. (2024) had experts relabel a sample of Chatbot Arena battles, checking facts against outside sources. Crowd votes agreed with the experts 72% to 83% of the time. The two experts agreed with each other 79.4% and 89.8% of the time on the two model pairs studied. The authors attribute most of the 5 to 10 point gap to crowd raters making mistakes or missing factual errors.

Raters differ in what they want. Pooling everyone's preferences into one hides real disagreement about values. §16.3 showed three groups of raters, each consistent on its own, whose pooled preferences go around in a circle, A over B, B over C, and C over A. This is called Condorcet's paradox, and no single ranking fits such votes. A leaderboard is an average over a population, and it is only as meaningful as that population is close to your users.

In practice this means a human evaluation is only as good as its design. An interviewer will ask you to design one, and the answer is the checklist above with the raters matched to the claim.

Elo, the rating that updates after every game

Votes arrive one at a time, and we want a number per model that predicts who wins. Start with the simplest model of winning. Each model has one number, its strength. The chance that AA beats BB depends only on the gap between their strengths, through the S-shaped logistic curve. Equal strengths give a coin flip, and a large gap gives near certainty. This is the Bradley-Terry model (Bradley and Terry 1952, anticipated by Zermelo in 1929). §16.3 derived it from noisy utilities and used it to train reward models. With strength rir_i for model ii, measured in natural-log units,

P(i beats j)=σ(ri−rj),σ(z)=11+e−z.\mathbb{P}(i \text{ beats } j) = \sigma(r_i - r_j), \qquad \sigma(z) = \frac{1}{1 + e^{-z}}.

Chess ratings use the same curve with a different unit. A gap of 400 rating points means odds of ten to one, so the stronger player wins 10/11=91%10/11 = 91\% of games. A gap of 100 points gives 1/(1+10−0.25)=64%1/(1 + 10^{-0.25}) = 64\%. These units are called Elo points. A rating in Elo points is Ri=cElo ri+constR_i = c_{\text{Elo}}\,r_i + \text{const}, with

cElo=400ln⁡10≈173.7,c_{\text{Elo}} = \frac{400}{\ln 10} \approx 173.7,

so that σ((Ri−Rj)/cElo)=1/(1+10−(Ri−Rj)/400)\sigma\big((R_i - R_j)/c_{\text{Elo}}\big) = 1/\big(1 + 10^{-(R_i - R_j)/400}\big). In plain words, one natural-log unit of strength is 173.7 Elo points, and 400 points is a gap of ln⁡10=2.30\ln 10 = 2.30 natural-log units. What the Elo system adds to the curve is a rule for changing the ratings after each game. That rule explains both its strengths and its troubles.

In plain words, you gain points when you do better than expected and lose them when you do worse. The points you gain are exactly the points your opponent loses, so the update is zero-sum and the total of all ratings never changes. Beating a much stronger player is a big surprise and earns many points. Beating a much weaker one earns almost none.

Elo is stochastic gradient descent

Arpad Elo designed his system for chess federations without any talk of likelihoods. Yet it is exactly an algorithm you already know. Stochastic gradient descent (SGD) improves a model by looking at one example at a time and taking a small step against the gradient of that example's loss (§0.6). Take the Bradley-Terry model as the model, one game as the example, and the log loss as the loss. Then one SGD step is one Elo update.

∂ Proof, one derivative at a time

Let Δ=rA−rB\Delta = r_A - r_B and use σ(−Δ)=1−σ(Δ)\sigma(-\Delta) = 1 - \sigma(\Delta) and ddΔlog⁡σ(Δ)=1−σ(Δ)\frac{d}{d\Delta}\log\sigma(\Delta) = 1 - \sigma(\Delta) (§0.4). Then ddΔlog⁡σ(−Δ)=−σ(Δ)\frac{d}{d\Delta}\log\sigma(-\Delta) = -\sigma(\Delta), so

∂ℓ∂Δ=−[S(1−σ(Δ))−(1−S) σ(Δ)]=σ(Δ)−S.\frac{\partial\ell}{\partial\Delta} = -\Big[S\big(1 - \sigma(\Delta)\big) - (1 - S)\,\sigma(\Delta)\Big] = \sigma(\Delta) - S .

Since ∂Δ/∂rA=1\partial\Delta/\partial r_A = 1 and ∂Δ/∂rB=−1\partial\Delta/\partial r_B = -1,

∂ℓ∂rA=σ(rA−rB)−S,∂ℓ∂rB=S−σ(rA−rB).\frac{\partial\ell}{\partial r_A} = \sigma(r_A - r_B) - S, \qquad \frac{\partial\ell}{\partial r_B} = S - \sigma(r_A - r_B).

A gradient step r←r−η∇ℓr \leftarrow r - \eta\nabla\ell, evaluated at the current point, gives rA←rA+η(S−σ(rA−rB))r_A \leftarrow r_A + \eta(S - \sigma(r_A - r_B)) and rB←rB−η(S−σ(rA−rB))r_B \leftarrow r_B - \eta(S - \sigma(r_A - r_B)). Multiply both by cEloc_{\text{Elo}}. The left sides become RAR_A and RBR_B, σ(rA−rB)=σ((RA−RB)/cElo)=PAB\sigma(r_A - r_B) = \sigma\big((R_A - R_B)/c_{\text{Elo}}\big) = P_{AB}, and the step becomes cEloη(S−PAB)c_{\text{Elo}}\eta(S - P_{AB}). That is the Elo update with KElo=cEloηK_{\text{Elo}} = c_{\text{Elo}}\eta. The gradient is computed at the pre-game point, which is why both players use their ratings from before the game. The two components of the gradient sum to zero, which is the zero-sum property. ∎

The cell checks the hand example and the theorem numerically. It compares a finite-difference gradient of the loss with PAB−SP_{AB} - S.

Python · cell 1

Seeing Elo as SGD explains its behavior at once, because SGD with a fixed step size has three well-known habits.

  • The result depends on the order of the games. Each step starts from wherever the last one ended, so the same games in a different order end at different ratings.
  • It never settles. With a fixed learning rate, SGD does not converge to the minimum of the loss. It wanders around the minimum, with a spread set by the step size. To converge, the steps must shrink, slowly enough that their sum is infinite but fast enough that the sum of their squares is finite. These are the Robbins-Monro conditions, ∑tηt=∞\sum_t\eta_t = \infty and ∑tηt2<∞\sum_t\eta_t^2 \lt \infty. That is why chess federations lower KEloK_{\text{Elo}} as a player accumulates games.
  • The K-factor is a learning rate, with the usual trade-off. A large KEloK_{\text{Elo}} follows recent games closely and is noisy. A small one is precise but slow to rate a newcomer and slow to notice change.

For chess the last habit is a feature, because players improve and decline. For language models it is a defect, since a released checkpoint does not change (a hosted API can, which we come back to at the end). Let's measure the first two habits. The cell plays the same 2,000 games among four models in 200 different orders and records the final ratings.

Python · cell 2

The games are identical in every run. Yet with KElo=32K_{\text{Elo}} = 32 a model's final rating has a standard deviation of 46 to 50 points across orders, and with KElo=8K_{\text{Elo}} = 8 about 21. The true gap between the two middle models is 30 points. Averaged over orders the ratings are sensible, and the mean gaps come close to the batch fit later in the section. But any single run in one order is a coin toss among neighbors. How large is this noise in general, and does it shrink with more games? A short calculation answers both questions.

∂ Proof by a linearized autoregression

Both ratings move by ±η(St−σ(dt))\pm\eta(S_t - \sigma(d_t)), so the gap dt=rA−rBd_t = r_A - r_B moves by twice that, dt+1=dt+2η(St−σ(dt))d_{t+1} = d_t + 2\eta\big(S_t - \sigma(d_t)\big). Let et=dt−d⋆e_t = d_t - d^\star be the error. A first-order Taylor expansion gives σ(dt)≈P+v et\sigma(d_t) \approx P + v\,e_t, since σ′(d)=σ(d)(1−σ(d))\sigma'(d) = \sigma(d)(1 - \sigma(d)). Write ξt=St−P\xi_t = S_t - P. It has mean 0 and variance vv for decisive games, and it is independent of ete_t because game tt is played after the rating was formed. Then

et+1=(1−2ηv) et+2η ξt,e_{t+1} = (1 - 2\eta v)\,e_t + 2\eta\,\xi_t ,

an autoregression with coefficient 1−2ηv1 - 2\eta v. If the variance has settled at VV, taking variances of both sides gives V=(1−2ηv)2V+4η2vV = (1 - 2\eta v)^2 V + 4\eta^2 v. Solving, V(4ηv−4η2v2)=4η2vV\big(4\eta v - 4\eta^2 v^2\big) = 4\eta^2 v, so V=η/(1−ηv)V = \eta/(1 - \eta v). Nothing here depends on tt, so more games do not reduce it. Multiply by cElo2c_{\text{Elo}}^2 and use cEloη=KEloc_{\text{Elo}}\eta = K_{\text{Elo}} to get Elo units. A batch maximum-likelihood fit to nn games has variance 1/(nv)1/(nv) (derived in the next part), which equals V≈ηV \approx \eta when n=1/(ηv)n = 1/(\eta v). ∎

In plain words, Elo with a fixed K-factor forgets. Its error is set by KEloK_{\text{Elo}}, not by how much data you have. With the common default of 32 it is as precise as a fit to a couple of dozen games, even after a million. The next cell checks the formula with 400 independent runs between two equal models.

Python · cell 3

Simulation and formula agree within a couple of points at every KEloK_{\text{Elo}}. LMSYS, the academic group that launched Chatbot Arena in 2023, saw exactly this variability. They first stabilized Elo by averaging it over 1,000 random orderings of the games. In December 2023 they switched to a batch fit of the Bradley-Terry model, for two reasons (LMSYS 2023). The full history of games is available, so no online algorithm is needed. And most models are static, so their strength should not drift. The widget shows both behaviors side by side. On the left is Elo game by game for one order of the games, and Play replays the same games in a new order. On the right, for each model, the dots are where 100 other orders end, the black bar is the batch Bradley-Terry fit with its 95% interval, and the diamond is the true rating.

Why does online Elo depend on the order of games when Bradley-Terry does not?
Four models, true ratings 30, 30, and 60 points apart, play the same random games in different orders.
Loading interactive figure…

An interviewer who asks about Elo wants the three-line derivation and its consequences. The K-factor is a learning rate, the order of games matters, and the noise never goes away.

Core

Online Elo, and why order matters

Implement elo(games, n_models, K=32, init=1500.0). Each entry of games is a tuple (i, j, s), where s is the game score of model i against model j, 1 for a win, 0.5 for a tie, and 0 for a loss. Start every model at init. Apply the Elo update from the definition box one game at a time, in the order given, with the base-10, 400-point expected score. Return the final ratings as a float array of length n_models.

Tests, hints, verified solutions, and AI help, with Pro at $7.99 a month.

Bradley-Terry is a logistic regression

The batch alternative fits all the games at once. §16.3 did this for a table of win counts. For arenas it is more useful to write the same model as a logistic regression with one row per battle. Then intervals, ties, and extra explanatory variables all come with little extra work. Recall that logistic regression predicts a probability as the sigmoid of a weighted sum of features (§0.4).

Here is one battle as a row. Take three models, numbered 0, 1, and 2. Model 2 is shown on the left, model 0 on the right, and the left one wins. The row's features are (−1,0,+1)(-1, 0, +1), with +1+1 for the left model, −1-1 for the right model, and 0 for the model not in the battle. The label is 1. With strengths r=(r0,r1,r2)\mathbf{r} = (r_0, r_1, r_2), the weighted sum is r2−r0r_2 - r_0, the gap between the two players, and its sigmoid is the Bradley-Terry win probability.

In plain words, it is a logistic regression with one feature per model and no intercept. A model's feature is +1+1 when it sits on the left, −1-1 when it sits on the right, and 0 otherwise. Add an intercept and you are estimating a bonus for the left side. That bonus is the position bias bposb_{\text{pos}}, the extra log-odds of winning from the first slot, which §22.4 measured for model judges.

Why the constraint? Every design vector sums to zero, so xt⊤(r+a1)=xt⊤r\mathbf{x}_t^\top(\mathbf{r} + a\mathbf{1}) = \mathbf{x}_t^\top\mathbf{r} for any constant aa. The likelihood cannot tell r\mathbf{r} from r+a1\mathbf{r} + a\mathbf{1}, and fixing one rating removes that freedom. Two more conditions decide whether a finite best fit exists. First, the comparison graph, with models as nodes and an edge for every pair that has met, must be connected. Otherwise each connected piece floats freely. Second, no group of models may have won every game against all the others, or their ratings run off to infinity. This is the "never lost" case of §16.3, which Ford (1957) made exact. Counting ties as half wins helps here, because a tie gives each side a little of both.

The gradient and the matrix of second derivatives follow from the sigmoid's derivative (§0.4), applied battle by battle,

∇ℓ(r)=∑t(St−Pt) xt,∇2ℓ(r)=−∑tPt(1−Pt) xtxt⊤=−I(r).\nabla\ell(\mathbf{r}) = \sum_t (S_t - P_t)\,\mathbf{x}_t, \qquad \nabla^2\ell(\mathbf{r}) = -\sum_t P_t(1 - P_t)\,\mathbf{x}_t\mathbf{x}_t^\top = -\mathbf{I}(\mathbf{r}).

The matrix I(r)\mathbf{I}(\mathbf{r}) is the Fisher information, which measures how sharply the log-likelihood curves around its peak. It is positive semidefinite, so the log-likelihood is concave and has no false peaks. Newton's method climbs it by fitting a quadratic at the current point and jumping to that quadratic's peak, the step r←r+I−1∇ℓ\mathbf{r} \leftarrow \mathbf{r} + \mathbf{I}^{-1}\nabla\ell on the coordinates left free by the constraint. Started from zero, it typically converges in a handful of steps, as in the length-controlled fit of §16.6.

How precise is a rating

The Fisher information also gives the standard errors. In large samples the maximum-likelihood estimate is close to normal with covariance I−1\mathbf{I}^{-1} on the free coordinates. These are the model-based standard errors, correct when the model is true. The simplest case shows the scale of the numbers, and it is the one formula worth memorizing from this section.

∂ Proof from the Fisher information

Fix rB=0r_B = 0, so the only free parameter is d=rAd = r_A. Put AA on the left in every battle. A battle with AA on the right has xt=−1\mathbf{x}_t = -1 and StS_t replaced by 1−St1 - S_t, which gives the same contribution. Then xt=1\mathbf{x}_t = 1 and every term of the Fisher information equals PAB(1−PAB)P_{AB}(1 - P_{AB}), so I=nPAB(1−PAB)\mathbf{I} = n P_{AB}(1 - P_{AB}) and Var⁡(d^)≈1/(nPAB(1−PAB))\operatorname{Var}(\hat d) \approx 1/\big(nP_{AB}(1 - P_{AB})\big). Multiply the standard error by cEloc_{\text{Elo}} for Elo units. At PAB=12P_{AB} = \tfrac12, PAB(1−PAB)=14P_{AB}(1 - P_{AB}) = \tfrac14 and the standard error is 2cElo/n=347.4/n2c_{\text{Elo}}/\sqrt n = 347.4/\sqrt n. The delta method, which propagates a small error through a smooth function by multiplying by its derivative, gives the same answer. Here d^=logit⁡(P^AB)\hat d = \operatorname{logit}(\hat P_{AB}), where logit⁡(P)=log⁡(P/(1−P))\operatorname{logit}(P) = \log\big(P/(1-P)\big) is the inverse of the sigmoid. Also Var⁡(P^AB)=PAB(1−PAB)/n\operatorname{Var}(\hat P_{AB}) = P_{AB}(1 - P_{AB})/n and ddPlogit⁡(P)=1/(P(1−P))\frac{d}{dP}\operatorname{logit}(P) = 1/\big(P(1-P)\big). ∎

Precision grows only as the square root of the votes, so halving the error bar takes four times as many votes. Two vote counts make that concrete.

A rating measured against many opponents behaves about the same, as long as the opponents are near its own strength and their ratings are well measured. Interviewers often ask for this formula, and "347 over root n Elo points" is the answer to give.

Intervals that survive a wrong model

The model-based standard errors are right if the Bradley-Terry model is true. It never exactly is. Preferences can be intransitive (A beats B, B beats C, and C beats A). They can depend on the prompt, and raters disagree. A tie is not really half a win. What does the fit estimate then, and how wide should its interval be?

The answer has two parts. The fit still converges to something, namely the ratings that best predict the votes on average. And its uncertainty can be measured from the data rather than from the model, by looking at how much each battle's contribution to the gradient actually scatters. The estimator that does this is called the sandwich, because the measured scatter sits between two copies of the inverse Fisher information.

In plain words, the outer pieces, I−1\mathbf{I}^{-1}, say how fast the likelihood curves. The middle measures how much the per-battle gradients gt\mathbf{g}_t actually scatter. If the data scatter more than the model predicts, the interval widens. If they scatter less, as with ties, it narrows. The usual alternative is a bootstrap over battles, which refits the model on many resamples of the battles drawn with replacement and takes the spread of the refits as the standard error (§0.11). Chiang et al. (2024) compared the two in simulations and found them often identical to the eye. The sandwich intervals were wider in small samples but more stable, and narrower in large samples, so the authors chose to deploy them.

The first line of the theorem hides the most important fact about arena ratings. When the model is wrong, the target r∘\mathbf{r}^\circ depends on which pairs were played and how often. The match schedule becomes part of the definition of a rating. That is why Chiang et al. reweight the battles. Let AtA_t be the pair shown in battle tt and P(At)P(A_t) the probability that the arena's sampler chose it. Weighting each battle by 1/P(At)1/P(A_t) is called inverse-probability weighting. It makes the target the fit to a uniform schedule over pairs, whatever the adaptive sampler did. The next two cells fit Bradley-Terry by Newton's method with three kinds of standard error, and then show the dependence on the schedule with a deliberately intransitive example.

Python · cell 4

The fit recovers the true ratings to within one and a half standard errors each. The model-based and sandwich standard errors agree at about 14 Elo points, since here the data really are Bradley-Terry. The bootstrap gives 12 to 14, close enough given that 100 resamples estimate a standard error only to within several percent. Compare that 14 with the spread of nearly 50 points that online Elo showed on the same games, from the order of the games alone.

Now the intransitive case. Three models beat each other in a cycle, each winning 70% of its games against the next, like rock, paper, scissors. The cell computes the target r∘\mathbf{r}^\circ exactly, by Newton's method on the expected log loss, under two schedules.

Python · cell 5

With every pair played equally often, the three models tie, the only answer one number per model can give to a cycle. Play A against B 80% of the time and A ends up 119 points above B, with nothing about any model changed. A real arena is never this extreme. But its preferences are not perfectly transitive either, models enter and leave at different times, and the sampler favors some pairs. A rating is a property of the models and the schedule together. An interviewer who asks why two arenas with the same models disagree is looking for this point.

Now we can settle the opening question with the right test. It asks whether the gap is large compared with the standard error of the gap, not whether two intervals overlap.

Interview

Bradley-Terry ratings with honest intervals

Implement bt_fit(battles, n_models, ref=0, iters=30). The input battles is an array of shape (T, 3). Each row is (i, j, y), with model i on the left, model j on the right, and y equal to 1 if i won, 0.5 for a tie, and 0 if j won. Fit the Bradley-Terry logistic regression by Newton's method, with model ref fixed at 0 and ties entering as half wins. Return (elo, se_model, se_sandwich), three arrays of length n_models in Elo units. The ratings are elo = 1000 + (400 / ln 10) * r. The array se_model comes from the inverse Fisher information and se_sandwich from the sandwich formula. Both standard errors are 0 for the reference model. You may assume a finite maximum exists.

Tests, hints, verified solutions, and AI help, with Pro at $7.99 a month.

Ties count as half a win

Arenas let raters press "tie" or "both are bad". The simplest treatment, the one LMSYS adopted in 2023, counts a tie as half a win for each side, St=12S_t = \tfrac12, in the same likelihood. That is not a true likelihood, since StS_t is no longer a yes-or-no outcome. But the equations that define the fit, ∑t(St−Pt)xt=0\sum_t (S_t - P_t)\mathbf{x}_t = 0, still make sense. They say that each model's points equal its expected points, and the sandwich gives valid intervals for the result. A fit of this kind, which keeps the estimating equations of a likelihood without the likelihood itself, is called a quasi-likelihood.

What do the half-win ratings mean? Suppose a pair ties with probability τ\tau. When the game is decisive, AA wins with probability qq. Then AA's expected points are τ2+(1−τ)q\tfrac\tau2 + (1 - \tau)q, and the half-win rating gap is the logit (log odds) of that. For small gaps, logit⁡(12+ϵ)≈4ϵ\operatorname{logit}(\tfrac12 + \epsilon) \approx 4\epsilon and τ2+(1−τ)q−12=(1−τ)(q−12)\tfrac\tau2 + (1-\tau)q - \tfrac12 = (1 - \tau)(q - \tfrac12), so

d^half≈(1−τ) logit⁡(q).\hat d_{\text{half}} \approx (1 - \tau)\,\operatorname{logit}(q).

In plain words, ties pull half-win ratings toward each other by the factor 1−τ1 - \tau. A pool with 30% ties shows gaps about 30% smaller than the decisive games alone would. A tie between evenly matched models also says nothing about which is better, so for the decisive gap only the (1−τ)n(1 - \tau)n decisive votes count. The cell checks the shrinkage and the effect of ties on the two kinds of standard error. It uses 20,000 games between two models at a decisive gap of 0.5 natural-log units, with 30% ties.

Python · cell 6

The half-win gap is 0.343 against 0.496 from decisive games alone, and 0.7×0.496=0.3470.7 \times 0.496 = 0.347, as the approximation says. The sandwich standard error is smaller than the model-based one by almost exactly 1−τ\sqrt{1 - \tau}. The reason is that a half point has no variance. A fit that skips the sandwich therefore overstates its own uncertainty when ties are common.

A model that gives ties their own probability

This part is optional on a first read. Instead of treating a tie as half a win, a three-outcome model can give ties their own probability. It keeps the scale of decisive games and adds one parameter for how often ties happen.

For example, with ν=0.8\nu = 0.8 two equal models tie 0.8/2.8=29%0.8/2.8 = 29\% of the time and each wins 36%. The other classical choice is a threshold model, in which a difference in quality below some threshold reads as a tie (Rao and Kupper 1967). Davidson's model has a property that explains why the half-win shortcut works as well as it does.

∂ Proof from the score equation

For one pair the log-likelihood is Wijri+Wjirj+Nijtie(log⁡ν+12(ri+rj))−nijlog⁡DijW_{ij}r_i + W_{ji}r_j + N^{\text{tie}}_{ij}\big(\log\nu + \tfrac12(r_i + r_j)\big) - n_{ij}\log D_{ij}. Differentiate with respect to rir_i. The first three terms give Wij+12NijtieW_{ij} + \tfrac12 N^{\text{tie}}_{ij}. For the last, ∂Dij/∂ri=eri+12ν e(ri+rj)/2\partial D_{ij}/\partial r_i = e^{r_i} + \tfrac12\nu\,e^{(r_i + r_j)/2}, so −nij ∂log⁡Dij/∂ri=−nij(P(i wins)+12P(tie))-n_{ij}\,\partial\log D_{ij}/\partial r_i = -n_{ij}\big(\mathbb{P}(i \text{ wins}) + \tfrac12\mathbb{P}(\text{tie})\big). Summing over jj and setting the derivative to zero gives the identity. For half-win Bradley-Terry the same derivative is ∑j(Wij+12Nijtie−nijσ(ri−rj))\sum_j\big(W_{ij} + \tfrac12N^{\text{tie}}_{ij} - n_{ij}\sigma(r_i - r_j)\big), the same observed points matched to a different expected-points function. ∎

Research

Ties with Davidson's model

Implement two functions. davidson_probs(ri, rj, nu) returns the triple (win, tie, loss) of probabilities for model i against model j under Davidson's model. davidson_fit(W, Tm) returns the maximum-likelihood fit. Here W[i, j] counts the wins of i over j, and Tm[i, j] = Tm[j, i] counts their ties. Counts may be fractional, as when they are expected counts. Return (r, nu), with r the natural-log strengths and r[0] = 0. Optimize over (r1,…,rm−1,log⁡ν)(r_1, \dots, r_{m-1}, \log\nu) with scipy.optimize.minimize, so that ν\nu stays positive.

Tests, hints, verified solutions, and AI help, with Pro at $7.99 a month.

Ranks come from intervals

A leaderboard shows ranks, and ranks are where readers look first. A rank depends on all the ratings at once, so its uncertainty is not one model's interval. Chiang et al. (2024) report a cautious rank built from intervals. Model jj is surely above model ii when jj's whole interval lies above ii's. A model's best possible rank is one plus the number of models surely above it. Its worst is the number of models minus the number surely below it.

A tiny example first. Three models have intervals A [1790,1830][1790, 1830], B [1780,1810][1780, 1810], and C [1700,1760][1700, 1760]. No interval lies wholly above A's or B's, so both have best rank 1. C lies wholly below both, so A and B have worst rank 3−1=23 - 1 = 2. Both A and B lie wholly above C, so C has rank 3 to 3. A and B share first place.

The guarantee needs simultaneous intervals, a set of intervals that all hold at once with probability 95%. Separate 95% intervals do not, because on average one in twenty of them misses. Chiang et al. build the simultaneous set from the large-sample normal law of r^\hat{\mathbf{r}}. That law says the estimate lies, with probability 95%, inside an ellipsoid around the truth. The ellipsoid's size comes from the chi-squared distribution, the distribution of a sum of squared independent standard normals. Each model's interval is the ellipsoid's shadow on that model's axis.

∂ Proof by Cauchy-Schwarz

(r^−r)⊤Σ−1(r^−r)(\hat{\mathbf{r}} - \mathbf{r})^\top\boldsymbol{\Sigma}^{-1}(\hat{\mathbf{r}} - \mathbf{r}) is a sum of m−1m - 1 squared independent standard normals after the change of variables u=Σ−1/2(r^−r)\mathbf{u} = \boldsymbol{\Sigma}^{-1/2}(\hat{\mathbf{r}} - \mathbf{r}), so it is χm−12\chi^2_{m-1}, and C\mathcal{C} has coverage 1−α1 - \alpha. For the projection, write a⊤(r−r^)=(Σ1/2a)⊤Σ−1/2(r−r^)\mathbf{a}^\top(\mathbf{r} - \hat{\mathbf{r}}) = (\boldsymbol{\Sigma}^{1/2}\mathbf{a})^\top\boldsymbol{\Sigma}^{-1/2}(\mathbf{r} - \hat{\mathbf{r}}). By Cauchy-Schwarz its absolute value is at most ∥Σ1/2a∥ ∥Σ−1/2(r−r^)∥≤a⊤Σa q\lVert\boldsymbol{\Sigma}^{1/2}\mathbf{a}\rVert\,\lVert\boldsymbol{\Sigma}^{-1/2}(\mathbf{r} - \hat{\mathbf{r}})\rVert \le \sqrt{\mathbf{a}^\top\boldsymbol{\Sigma}\mathbf{a}}\,\sqrt q on C\mathcal{C}, with equality at r=r^+q Σa/a⊤Σa\mathbf{r} = \hat{\mathbf{r}} + \sqrt{q}\,\boldsymbol{\Sigma}\mathbf{a}/\sqrt{\mathbf{a}^\top\boldsymbol{\Sigma}\mathbf{a}}, which lies on the boundary of C\mathcal{C}. Every value in between is reached on the segment joining the two extremes, since C\mathcal{C} is convex. ∎

In plain words, being honest about many models at once costs width, and the cost grows with the number of models. Taking a=ei−ej\mathbf{a} = \mathbf{e}_i - \mathbf{e}_j in the theorem gives simultaneous intervals for every pairwise gap too. Those are tighter than comparing two separate intervals, because they account for the correlation between the two ratings. The cell applies the rank rule to the top eight of WebDev Arena in October 2026, with the arena's own reported intervals.

Python · cell 7

Three models share rank 1. Claude Sonnet 5.5 (xhigh) sits 34 points below the leader and is still not surely below it. Its upper end, 1804.5, clears the leader's lower end, 1803.4, by one point. Claude Opus 5 (max), with 12,087 votes, has the tightest interval, about ±7.5\pm 7.5, and the standard errors track 347/votes347/\sqrt{\text{votes}} closely throughout. That match also shows that these are separate intervals, 1.96 standard errors wide, not simultaneous ones. Simultaneous intervals for eight models would be wider by the factor χ0.95,72/1.96=1.91\sqrt{\chi^2_{0.95,7}}/1.96 = 1.91, which would widen every rank range. When an interviewer asks whether the top model is "really" first, the answer is a rank range, not a yes or no.

Warm-up

Rank intervals

Implement rank_intervals(lo, hi), where lo and hi are arrays of interval endpoints, one pair per model. Return two integer arrays, best and worst, the best and worst ranks the intervals allow by the rule in the definition box. Ranks start at 1. The tests for "surely above" and "surely below" use strict inequalities, so two intervals that touch do not separate their models.

Tests, hints, verified solutions, and AI help, with Pro at $7.99 a month.

Style control rates models at equal style

People prefer longer, better-formatted answers, sometimes because those answers are better and sometimes regardless. An arena rating mixes both effects. In August 2024 LMSYS added style control, which puts measures of style into the regression as extra variables so that each model is rated at equal style (LMSYS 2024). It is the same move as the length-controlled win rate of §16.6, which fits a judge's verdicts on the length difference and reads off the win rate at equal length, extended to a whole leaderboard.

Each style feature compares the two answers relative to their size. If the left answer has 500 tokens and the right 520, the length feature is (500−520)/(500+520)=−0.02(500 - 520)/(500 + 520) = -0.02, nearly equal. If they have 20 and 40 tokens, it is (20−40)/60=−0.33(20 - 40)/60 = -0.33, a real difference.

In plain words, each style feature gets its own coefficient, and the models are rated on whatever the style does not explain. In LMSYS's fit with both length and markdown controlled, the length coefficient was 0.249 and the three markdown coefficients 0.019 to 0.031, in the regression's units. Length dominated. The ranks moved. GPT-4o-mini fell from 6th to 11th overall, Grok-2-mini from 6th to 18th, and Claude 3 Opus rose from 16th to 10th. These ranks are on the arena's interval-based scale, where several models share a rank. The cell plants the situation in a simulation with six models. One of them is mid-pack in substance but writes about twice as much.

Python · cell 8

The verbose model tops the raw leaderboard at 221, above the genuinely best model at 177, while its substance is worth 52. Style control puts it back at 49 and recovers the length coefficient (0.78 against a planted 0.8). It also removes a smaller inflation of the other models' gaps, which came from better models in this simulation also writing a little more. Here the extra length was worthless by construction, so removing its effect is right. In real data the same regression cannot tell worthless length from a derivation that makes an answer better, as the pitfall explains.

Interview

Style control

Implement bt_style_fit(battles, Z, n_models, ref=0, iters=30). The rows of battles are (i, j, y) as in Exercise 22.7b, that is, the left model, the right model, and the left model's score. Z has shape (T, s) and holds the style differences of each battle, left minus right, already normalized. Fit σ(xt⊤r+zt⊤wstyle)\sigma(\mathbf{x}_t^\top\mathbf{r} + \mathbf{z}_t^\top\mathbf{w}_{\text{style}}) jointly by Newton's method with r[ref] = 0. Return (elo, w_style), with elo = 1000 + (400 / ln 10) * r and w_style of length s in the regression's own units.

Tests, hints, verified solutions, and AI help, with Pro at $7.99 a month.

How many votes a comparison needs

Arena maintainers decide where the next votes go, and model developers decide how long to wait before trusting a rating. Both are sample-size questions, and the head-to-head standard error answers them. §0.11 answered the same questions for accuracies. There, the sample size for a test came from asking that the true difference sit a set number of standard errors from zero. Here the standard error is 1/nv1/\sqrt{nv} in natural units, with v=PAB(1−PAB)v = P_{AB}(1 - P_{AB}). The power of a test is the chance that it detects a gap that is really there.

∂ Proof of each line

(1) The interval is d^±1.96SE⁡\hat d \pm 1.96\operatorname{SE}, so in Elo units its half-width is 1.96 cElo/nv1.96\,c_{\text{Elo}}/\sqrt{nv}. Set it equal to hh and solve for nn. (2) The test rejects when ∣d^∣/SE⁡>z1−α/2|\hat d|/\operatorname{SE} \gt z_{1-\alpha/2}. Ignoring rejection in the wrong direction, as in §0.11, power is Φ(dnv−z1−α/2)\Phi(d\sqrt{nv} - z_{1-\alpha/2}), where Φ\Phi is the standard normal cumulative distribution function. Setting it to 1−β1 - \beta gives dnv=z1−α/2+z1−βd\sqrt{nv} = z_{1-\alpha/2} + z_{1-\beta}. (3) Under Davidson's model, divide each weight by e(rA+rB)/2e^{(r_A + r_B)/2}, so a win, a tie, and a loss have weights ed/2e^{d/2}, ν\nu, and e−d/2e^{-d/2}. With D=ed/2+ν+e−d/2D = e^{d/2} + \nu + e^{-d/2}, the log-probability of a tie is log⁡ν−log⁡D\log\nu - \log D, whose derivative in dd is −(ed/2−e−d/2)/(2D)-(e^{d/2} - e^{-d/2})/(2D), zero at d=0d = 0. So near even strength a tie carries no information about dd. Each decisive game carries 14\tfrac14, the same as a Bradley-Terry game, and the information from nn games is (1−τ)nv(1 - \tau)nv. (4) Each model's rating is measured against opponents of known rating, so by the head-to-head theorem Var⁡(r^A)=Var⁡(r^B)=1/(nv)\operatorname{Var}(\hat r_A) = \operatorname{Var}(\hat r_B) = 1/(nv), independently, and the variance of their difference is the sum, 2/(nv)2/(nv). Setting 2/(nv)=1/(Nv)2/(nv) = 1/(Nv) gives n=2Nn = 2N per model. ∎

In plain words, precision costs the square of what it buys, ties waste votes, and comparing two models through third parties costs four times as many votes as letting them meet. That last fact is why an arena's sampler does well to put close competitors against each other. The cell computes the headline numbers. Then it prices private testing with the selection result of §22.1. Publishing the best of kk equally good tries overstates their common score, in expectation, by the expected maximum of kk standard normals times one try's standard error.

Python · cell 9

The last lines of the cell are the arithmetic of private testing, the question from the opening.

Singh et al. (2025) ran simulations of this kind. They showed that submitting many variants and keeping the best lets a family of weaker models outrank a stronger one that submits once.

The widget puts these formulas in your hands. Two models a set Elo gap apart collect votes, either all against a pool of well-measured opponents or all head to head. The upper plot shows how often the better model ranks first and how often a test at the 5% level finds the gap. Below it, five models spaced by the same gap form a leaderboard, and Collect votes runs a fresh arena so you can watch the intervals shrink. Head to head, the five play a round robin, each splitting its votes evenly over the other four.

How many votes does it take to separate two models?
Two models a fixed Elo gap apart collect votes. Below, five models spaced by that gap form a leaderboard, with A truly best.
Loading interactive figure…

An interviewer will often hand you two ratings and a vote count and ask whether the gap is real, or how many more votes it needs. The answer is these formulas, with the fourfold cost of indirect comparison and the 1/(1−τ)1/(1 - \tau) cost of ties.

Core

How many votes?

Implement two planning functions for direct head-to-head games. votes_for_halfwidth(h_elo, p=0.5, z=1.96) returns the number of games needed for a confidence interval of half-width h_elo Elo points on the gap, when the win probability is p. votes_to_detect(gap_elo, alpha=0.05, power=0.8) returns the number of games a two-sided level-alpha test needs to detect a true gap of gap_elo Elo with the given power. Evaluate PAB(1−PAB)P_{AB}(1 - P_{AB}) at the gap's own win probability. Both functions return Python integers, rounded up.

Tests, hints, verified solutions, and AI help, with Pro at $7.99 a month.

Where arenas mislead

Everything so far treats the arena as a well-behaved statistical experiment. It is also a public scoreboard with commercial stakes. Goodhart's law says that a measure pursued as a target stops measuring well, and §22.1 showed how it acts on any shared test that everyone optimizes. It acts on arenas too. The critiques fall into three groups, what is measured, who controls the data, and who votes.

What is measured. The estimand is the preference of the arena's users on the arena's prompts through the arena's interface. Chiang et al. (2024) found the prompts diverse, with over 100 languages in the first 240,000 votes and 77% of them in English. But they are what people choose to type into a free comparison site, which is neither your product's traffic nor expert work. One number per model also averages over very different tasks. Category leaderboards (coding, hard prompts) help. Prompt-to-Leaderboard (Frick et al. 2025) goes further. It trains a language model that reads a prompt and outputs a Bradley-Terry rating for every model on that prompt, so a ranking can be specific to a task. And style is part of the estimand unless it is controlled, with a control that is only observational.

Who controls the data. Singh et al. (2025) documented the imbalances behind this section's opening. Undisclosed private testing let a few providers test many variants and retract the scores they did not like. That inflates published ratings by the best-of-27 arithmetic above. Proprietary models were sampled more often and retired less often, so 61.4% of all data went to proprietary providers. Of 243 public models, 205 had been silently deprecated (their sampling rate cut to nearly zero without notice), against 47 officially listed as deprecated. Removing models changes the pool of opponents that later ratings are measured against, which matters when preferences are not perfectly transitive (the schedule cell above).

Access to arena data is itself a training advantage. Arena-Hard is a benchmark drawn from the arena's prompts. In Singh et al.'s controlled experiment, raising the share of arena data in fine-tuning from 0% to 70% raised the win rate on Arena-Hard from 23.5% to 49.9%, a 112% relative gain, with limited benefit on other tasks. And hosted models are not static. Once LMSYS separated the two API versions of GPT-4, they found GPT-4-0314 at 1201 and GPT-4-0613 at 1152 (LMSYS 2023).

Who votes. Votes can be rigged. Min et al. (2025) showed that because every vote moves the joint fit, an attacker can raise a target model's rank by voting in battles that do not involve it. In replays on about 1.7 million historical votes, a few hundred rigged votes moved rankings. Huang et al. (2025) showed that an attacker can tell which model wrote a response with over 95% accuracy. In a simulated arena, about a thousand such votes could move a model's ranking. The arena already had bot protection, detection of malicious users, and rate limits. Working with the authors, it began adding reCAPTCHA and login. Chiang et al. had already built a test that flags IP addresses whose votes are improbable under the fitted model.

None of this makes arenas useless. They measure something real that benchmarks miss, the taste of a large population on open-ended prompts. The project has grown into a family of arenas (text, WebDev, vision, text-to-image, video, search, and agents), run today as Arena at arena.ai. But a rating needs its interval, its category, its style setting, and its sampling history before it means anything. Here is what careful labs and arena maintainers do.

  • Report intervals and shared ranks, never a bare ordering, and use simultaneous intervals when claiming a rank.
  • Fit a batch model with sandwich or bootstrap intervals and inverse-probability weights for the sampler, not online Elo.
  • Publish the raw and the style-controlled leaderboards, and the categories.
  • Disclose private testing, cap the variants per provider, publish all results of tested models, and retire models by a stated rule.
  • Pin model versions, and rate a hosted model separately when its API changes.
  • Defend against rigging with authentication, rate limits, and anomaly detection.
  • For high-stakes claims, run your own blinded expert evaluation on your own prompts, with a rubric and an agreement check. Use automatic stand-ins such as Arena-Hard-Auto, in which a model judge compares answers on hard arena prompts (§22.4), only after checking that they rank systems the way the human evaluation they replace does.

The table compares the rating methods of this section.

methodwhat it isstrengthsweaknesses
online EloSGD, one step per gametrivial to compute, tracks changeorder dependent, noise floor set by KEloK_{\text{Elo}}, no interval
Elo averaged over shufflesonline Elo over many random ordersstable meansintervals come out too wide (LMSYS 2023), still a heuristic
Bradley-Terry MLEbatch logistic regressionorder free, Fisher, sandwich, or bootstrap intervals, extendableassumes static models, the target depends on the schedule when misspecified
BT with style covariatesadds zt⊤wstyle\mathbf{z}_t^\top\mathbf{w}_{\text{style}}separates style from substanceobservational, confounded by real quality
Davidson or Rao-Kupperthree-outcome likelihoodmodels ties properly, decisive scaleone more parameter, assumes a tie structure
Glicko, TrueSkillBayesian online ratings with uncertaintysequential, an uncertainty per playerdesigned for players whose skill drifts, priors matter
per-prompt BT (P2L)a model that outputs ratings per prompttask-specific rankings, routingneeds much data, harder to audit

The style-controlled fit in PyTorch

Here is the same style-controlled fit with automatic differentiation. The model-based standard errors come from the exact matrix of second derivatives, which autograd computes. This is the shape of a production fit, except that real pipelines also add the inverse-probability weights and the sandwich.

🔥 In PyTorchfor a machine with PyTorch

Read more

Watch next

🎬 The Elo Rating System for Chess and Beyond · singingbananaA clear seven-minute account of the expected score and the Elo update, a good warm-up before this section's view of Elo as SGD.
🎬 Hao Zhang - Chatbot Arena (UCSD / LMSys) · Sasha RushOne of the arena's creators explains how battles are collected and how they become a leaderboard, from a talk at Cornell Tech.
🎬 Chatbot Arena: An Open Crowdsourced Platform for Human Feedback on LLMs - Wei-Lin Chiang · The Linux FoundationThe first author of the Chatbot Arena paper covers the interface, the rating system, and what the crowd data show.
🎬 New Research: LMArena is "rigged" · Machine Learning Street TalkDiscusses The Leaderboard Illusion, with private testing, retraction, unequal sampling, and training on arena data, the critiques in this section's last part.