AI coding

Two Judges and a Human: Three-Way Agreement as a Gate

Antonio Evans11 min read

A clean isometric drawing of a 2x2x2 cube of small cells on a light grid, each cell labeled A or D for agree or disagree.
Key points

Key points

  1. 1Add the human as a third rater and keep one 2x2 table per judge, then count the 2x2x2 cube in which every case lands.
  2. 2Compute Cohen's kappa for each judge against the human, because a judge-to-judge kappa of 0.7 can hide two raters who share the same blind spot.
  3. 3Gate on the share of cases where all three raters agree, and treat the "both judges agree, human dissents" cell as the failure mode worth flagging.
  4. 4Two judges and one human is a measurement panel, not a democracy: when the judges agree and the human disagrees, the human is a warning signal, not an automatic veto.

Why a second judge changes the decision

Once you know how well one judge agrees with a human, the natural next question is whether a second judge would have caught the cases the first one missed. A single judge has no reference point inside the system. It is either right or wrong, and you only find out later, when a human reviews the output. Two judges plus a human turn that binary reading into a panel: you can measure whether the judges behave alike, whether either one tracks the human, and, critically, how often the judges line up with each other against the human.

The important part is that agreement is not accuracy. Two raters can agree strongly and still both be wrong, a point made explicitly in a widely used kappa tutorial. Cohen's kappa measures whether raters apply the same decision system; it says nothing about whether that system is correct. Adding a human gives you the anchor the judges lack, but only if you read the resulting cells, not just the headlines.

This matters most with LLM judges, where correlation can be perfect while the judge is systematically too harsh or too lenient. The Judge's Verdict benchmark makes the point that agreement patterns reveal judge behavior that correlation alone hides, and that some judges are "super-consistent" in a way that may oversimplify hard cases. That is exactly the failure a three-way matrix surfaces: a judge that agrees with a peer but drifts from the human.

Building one 2x2 panel per judge

Start from your dataset of cases, each with a binary label: pass/fail, correct/incorrect, grounded/ungrounded. The rule of thumb for the LLM judge setting is binary or a few clearly named classes, not a 1 to 10 scale, because models are not calibrated to produce consistent arbitrary scores, as Evidently's judge FAQ explains. A binary choice keeps the cube small and every cell interpretable.

For each judge J in {A, B}, build a 2x2 table against the human H:

H = PassH = FailRow total
J = Passaba+b
J = Failcdc+d
Column totala+cb+dN

Here a and d are the agreement cells; b and c are the disagreement cells. Cohen's kappa is:

κ = (Pₒ − Pₑ) / (1 − Pₑ)

where Pₒ = (a + d) / N, and Pₑ uses each rater's marginal distribution. A worked example on 100 items with 40/10/15/35 in the four cells gives Pₒ = 0.75, Pₑ = 0.50, and κ = 0.50, which the article calls moderate. Work each judge's table the same way and report the two kappas side by side with their confidence intervals, not as single numbers.

That last point is not pedantry. Sample size decides whether a kappa is even meaningful: a sample size calculator write-up shows that tightening the confidence interval around kappa is expensive, with distances of 0.20, 0.05 and 0.01 needing roughly 118, 1,625 and 38,203 subjects. A meta-analysis primer recommends aiming for a confidence interval narrow enough that you do not span one of Cohen's "levels of agreement." A practical kappa guide for LLM judges is blunter: below about 10 annotations the 95% interval is wider than ±0.30 and the number is statistically meaningless.

Forming the 2x2x2 cube

The two judges and the human give eight possible cells. Each case falls into exactly one. Count them:

CellJudge AJudge BHumanWhat it means
1PassPassPassAll three agree (positive)
2FailFailFailAll three agree (negative)
3PassPassFailJudges agree, human dissents
4FailFailPassJudges agree, human dissents
5PassFailPassJudge A tracks human, B dissents
6FailPassPassJudge B tracks human, A dissents
7PassFailFailJudge B tracks human, A dissents
8FailPassFailJudge A tracks human, B dissents

Two aggregate numbers fall out immediately:

  • All-three agreement share = (cell 1 + cell 2) / N.
  • Judges-vs-human share = (cell 3 + cell 4) / N. This is the case the two judges agree with each other and disagree with the human.

The remaining four cells (5 through 8) are the "one judge tracks the human, the other misses" cases. They will not all be equal. If cell 5 dominates cell 8, judge A is closer to the human on pass cases and judge B is missing them; the reverse tells you to trust B.

A worked example makes the arithmetic concrete. Suppose N = 200 and the counts are:

CellCountShare
1 (all pass)1100.55
2 (all fail)200.10
3 (judges pass, human fail)300.15
4 (judges fail, human pass)50.025
5 (A matches, B misses)150.075
6 (B matches, A misses)100.05
7 (B matches, A misses)50.025
8 (A matches, B misses)50.025

All-three agreement is 130/200 = 0.65. The judges-together-against-human share is 35/200 = 0.175. That second number is the one to watch: nearly one case in five finds both judges lined up and the human outvoted. Even if each judge's two-way kappa against the human looks respectable (they can, because a large chunk of the data is trivial all-pass cases), the disagreement cell reveals a shared misjudgment that a judge-to-judge agreement score would have scored as success.

Reading the three-way cells

Do not average the eight cells. Each has a different operational meaning, and each points at a different fix.

All three agree (cells 1 and 2). This is your clean floor. When all three raters land the same way, the label is the most defensible. It is not proof of correctness (a human can be wrong too, and the kappa vs accuracy distinction applies to the panel like any rater), but it is the least contestable evidence you can produce. If you need a single gate number, this share is the one you should treat as your headline.

Both judges agree, human dissents (cells 3 and 4). This is the failure mode that two-way kappa cannot see. The judges are consistent with each other, so any judge-versus-judge metric rewards them. The human is the minority. Two questions decide how to act:

  • Is the human plausibly wrong? Humans make mistakes too, which is exactly why multiple human annotations are worth collecting on a subset; a single human is a sample of one.
  • Are the judges sharing a bias? The same Arize field guide notes that comparing human-human agreement to LLM-human agreement on the same examples is the right way to judge an LLM judge, and that human agreement is context, not a ceiling. If your two judges are the same model family, same prompt, or same rubric, they will share blind spots; the cell will not tell you the human is wrong, only that you have no independent second opinion.

The practical rule: a large judges-vs-human share is a prompt to inspect, not to override. Pull 20 examples from cells 3 and 4, read them, and decide whether the human or the judges are right. If the judges are right more often, the human label is the noisy piece, and you should reshape the reference (adjudicate, or collect a second human annotation). If the human is systematically right, your judges share a defect the two-way numbers hid.

One judge tracks the human, the other misses (cells 5 through 8). These separate judge quality. Compare cell 5 + cell 8 (A matches) against cell 6 + cell 7 (B matches). The judge with the larger "matches human" count is not necessarily better overall, but it is the one whose independent opinion carries more weight. Look at where the misses cluster: if judge B misses almost entirely on fail cases while A misses on pass cases, they have opposite biases and you may be able to use one to catch the other.

All three disagree is a data problem, not a model problem. A case where the two judges disagree and the human agrees with neither is a signal that the rubric or the case itself is ambiguous. The qaskills.sh rubric design guide frames this well: use disagreements to improve the criteria, and treat low agreement as a sign the rubric needs clarification, not that someone is wrong. Those cases belong in a held-out set and a written note on the decision boundary, not in the gate.

Choosing the metric: kappa, share, or both

The table below compares what each number answers. None is a substitute for the others.

MetricWhat it answersBlind spotWhen to use
Judge-to-human kappa (each judge)Does this judge apply the rubric like the human?Shared bias between judges; ignores the third raterReporting reliability; calibrating each judge
Judge-to-judge kappaDo the two judges behave the same?High agreement can mean a shared mistakeDetecting duplicated judges, not quality
All-three agreement shareHow often does the panel land unanimously?Says nothing about who is right when they splitRelease gate on the full dataset
Judges-vs-human shareHow often do both judges outvote the human?Does not tell you who is correctThe first cell a human should review
Percent agreementHow often do raters match?Ignores chance agreement, badly inflated by skewed labelsQuick sanity check only

The last row deserves emphasis. Percent agreement can look excellent while meaning very little when one class dominates. An explainer on percent agreement vs kappa notes that a model that mostly predicts the majority class gets high percent agreement without real discriminative ability, and the GEDD kappa guide gives the stark version: a judge that always says "Correct" when 80% of the data is correct gets 80% accuracy and a kappa of 0.00. The three-way cube is essentially a way to decompose percent agreement so you can see which fish was caught in the dark.

For three or more raters on the same items, Fleiss' kappa or Krippendorff's alpha are the standard alternatives when every case has roughly equal coverage or some annotations are missing. An inter-rater reliability overview lays out the choice cleanly: Cohen's kappa for two raters, Fleiss' for three or more, Krippendorff's alpha when coverage is uneven. The reason to still compute Cohen's kappa per judge against the human is that you want to know which judge is out of line, not just the panel-average. The three-way cube gives you the diagnostic; a single multi-rater coefficient gives you the headline.

A gate you can run

Here is a decision rule that turns the cube into a release gate. The numbers are illustrative starting points, not standard thresholds; you should calibrate the floors to the cost of the decision your evaluation supports.

  1. Require a minimum N. If N is below roughly 10 per class, stop and collect more cases; the confidence interval on kappa makes the rest unreadable.
  2. Compute each judge's kappa against the human and its confidence interval. If either judge's kappa is below your floor (for example, 0.60 for low-stakes automation, per the interpretation table in the LLM judge kappa guide), that judge is not fit for the gate.
  3. Compute the all-three agreement share. This is your primary gate: the share of cases where the panel lands unanimously.
  4. Compute the judges-vs-human share. If it exceeds your tolerance (say, more than 10%), the gate does not pass; route those cases to human review and log them, do not override the human.
  5. Review a random sample of the human-matches-only cells (5 through 8) to check which judge is closer to the human and whether the misses are systematic.

Here is a compact script for the cube, assuming labels of 0 (fail) and 1 (pass):

import itertools

def three_way_counts(a, b, h):
    """a, b, h are equal-length lists of 0/1 labels."""
    cells = {f"{aa}{bb}{hh}": 0 for aa, bb, hh in itertools.product([0, 1], repeat=3)}
    for aa, bb, hh in zip(a, b, h):
        cells[f"{aa}{bb}{hh}"] += 1
    n = len(a)
    return cells, n

def shares(cells, n):
    all_agree = cells["111"] + cells["000"]
    judges_vs_human = cells["110"] + cells["001"]
    return {
        "all_three_share": all_agree / n,
        "judges_vs_human_share": judges_vs_human / n,
        "A_matches_B_misses": (cells["101"] + cells["010"]) / n,
        "B_matches_A_misses": (cells["100"] + cells["011"]) / n,
    }

Two details make the script trustworthy. First, pass the labels as plain integers; string cells are fine for reporting but easy to mis-key in a rush. Second, log the exact case IDs behind cells 3 and 4. The share is a statistic; the cases are the evidence a reviewer needs. A gate without the underlying cases to show a human is a gate you cannot defend.

If you are running judges through a model API to produce these labels, storing raw judge output and the case ID side by side is enough. For teams evaluating several model families side by side, one endpoint per class of model keeps the harness small; Quanta Inference exposes text, image, audio, video and embedding models through one OpenAI-compatible key, which reduces the plumbing spent on a judge harness and leaves room for the measurement work that actually changes a decision.

Human agreement is context, not a ceiling

The most common mistake after extending to three raters is treating the human's label as final truth. The Arize field guide is explicit that human agreement should be used as context for the LLM comparison, not as a hard performance ceiling, and that the reference should be built by adjudication or a true majority vote while ties and low-consensus cases are preserved rather than painted over. A Netflix LLM-judge case study makes the same point operationally: a judge is a lifecycle, not a one-shot artifact, and monitoring with a continuous human-in-the-loop alignment process detects drift and triggers re-tuning behind a human review gate.

That has a direct consequence for the three-way matrix. Use cells 3 and 4 (judges against human) as a prompt to investigate, not an automatic verdict. Your human is a rater, not a ground truth oracle. If you have the budget, add a second human on a subset and measure human-human kappa first; that number tells you how much you can trust the human column at all. If human-human agreement is itself low, the judges are not the problem, the rubric is, and the three-way cube is telling you the task needs a sharper decision boundary before any automated gate is meaningful.

The panel logic also tells you when two judges are redundant. If both judges are the same model with the same prompt, cell 3 and cell 4 will capture their shared bias, not independent disagreement. A useful panel pairs two different judge families, or a deterministic rule and a model judge, so the "both judges agree, human dissents" cell is a genuine warning rather than two copies of the same opinion.

FAQ

FAQ

Do I need Fleiss' kappa as well as three Cohen's kappas?

Not necessarily. Three separate Cohen's kappas (judge A vs human, judge B vs human, judge A vs judge B) plus the 2x2x2 cube give you all the diagnostics. Fleiss' kappa summarizes panel agreement into one number and is appropriate when you have three or more raters with even coverage, but it does not tell you which judge is out of line. Use it as a headline alongside the cube, not instead of it.

What if the human never disagrees with the judges?

That is the happy case, but check that it is real. If the human agrees with both judges on every case, either your rubric is easy or the human is anchoring on one of the judge outputs. Collect a separate, blind human annotation on a sample and see whether the all-three agreement holds. If it does, your gate is well calibrated; if it drops, the human was not independent.

How many cases do I need before the three-way shares mean anything?

At minimum about 10 per class per cell, which means several hundred cases for a binary task once you want each of the eight cells populated. The confidence interval on kappa is the constraint: the sample size write-up shows the required N climbs steeply as you tighten the target interval. If your budget is tight, concentrate effort on a stratified sample that deliberately over-samples the disagreement cells.

Both judges agree and the human dissents. Who wins?

Neither side wins automatically. Pull the cases and read them before you decide. If the human is right more often, your judges share a defect and the prompt or model must change; if the judges are right more often, the human label is noisy and you should adjudicate with a second human. Until you have looked, route those cases to review rather than letting either side win.

Can I use two judges without a human?

You can, but you cannot distinguish shared bias from real accuracy. The kappa-vs-accuracy distinction applies: two judges who agree strongly may simply be applying the same flawed rule. Adding the human is what makes the panel a measurement instrument rather than an echo chamber. If budget forces a choice, spend it on the human column, not on a third model judge.

Sources

Sources

  1. Cohen's kappa using SPSS Statistics
  2. A Comprehensive Analysis of LLM Judge Capability ...
  3. F.A.Q on LLM judges: 7 questions we often get
  4. Enhancing AI Evaluation with Cohen's Kappa Metric
  5. Sample Size Calculations for Interobserver Agreement Studies
  6. Assessing interrater agreement in meta-analyses - what sample size ...
  7. cohens-kappa-for-llm-judges.md - sample-GEDD
  8. Cohen's Kappa: Measuring Inter-Rater Agreement
  9. How to Measure Human-LLM Judge Alignment
  10. LLM Eval Rubric Design Interrater Agreement: A Reliable ...
  11. What is the difference between percent agreement and ...
  12. Inter-Rater Reliability in R: Kappa, ICC & Agreement
  13. The Lifecycle of LLM-as-a-Judge for Large-Scale ...
About the author

About the author

Antonio Evans
Antonio Evans

Antonio Evans is the founder of Quanta Intelligence and a fractional CTO who builds HIPAA-ready AI systems for health and life-science companies. Before that he was technical co-founder of FriendsEAT for twenty years, CEO of Socialdraft, and a data engineer at IBM. Antonio lives with his dog Santino in Lisbon, Portugal.

All articles