Marketing

When to Audit the Human Judge: Checking the Reference Standard

Antonio Evans8 min read

A split desk scene in flat editorial style: on the left, one reviewer scores a stack of printed items with a red pen; on the right, a second reviewer scores copies of the same items with a blue pen.
Key points

Key points

  1. 1Human labels are measurements produced by an instrument (the labeler plus the codebook), and that instrument needs its own quality check before you calibrate a model on it.
  2. 2Audit when the labels will set a threshold, a calibration curve or a pass/fail gate, or when a wrong label would be expensive to discover later.
  3. 3The practical method is a stratified blind re-score of a sample, then a chance-corrected statistic such as Cohen's kappa, plus a look at the confusion matrix for systematic drift.
  4. 4If agreement is low, fix the codebook or drop the label; do not calibrate on a reference you have not measured.

Decide first whether the label deserves to be a reference standard

Most model work treats the human label as ground truth. It is not. It is a reading taken by a person following a set of written instructions, and like any reading it carries error. The error has two parts: random variation between reviewers, and systematic drift where a shared misunderstanding pushes many labels the same wrong way. Only the second kind will usually hurt you badly, because it moves the whole distribution rather than adding noise around the right answer.

So the first question is not "how do I audit" but "is this label load-bearing." A label is load-bearing when something downstream will be decided by it rather than merely described by it. That covers three cases. The labels set a decision threshold (for example, the score above which a queue is escalated to a person). The labels feed a calibration curve, so the predicted probability is fitted to them. Or the labels form a pass/fail gate, such as an evaluation suite that decides whether a model ships.

If none of those apply, a cheaper spot check is usually enough. If one applies, a proper audit is the cheapest insurance you will buy. A model trained on a noisy reference does not fail loudly. It learns the reviewer's quirks, reports a healthy score against that reviewer, and then behaves differently in production where no reviewer is present. Mislabeled data undermines model performance in exactly this quiet way, which is why mislabel detection has become its own line of work (Chibane et al. on calibration and mislabeled examples).

The decision rule in one line: audit when the cost of a wrong label is discovered late and at scale, and skip only when the label is used descriptively and can be revised cheaply.

Write the label and its decision rule before you sample

You cannot measure agreement on a label that two people would define differently. Before drawing any sample, write down three things in one short document:

  1. The construct. The thing you actually care about, in one sentence, in plain language.
  2. The decision rule. The observable test that turns an item into a label. "Does this reply answer the customer's question?" is a construct. "The reply contains a direct answer to the question asked, even if it also contains caveats" is a decision rule.
  3. The edge cases. At least five worked examples from real items, with the label you expect and the reasoning.

This is the same discipline that good rubrics impose in education: clear criteria, described levels of performance, and examples so that two graders reach the same verdict (NC State rubric best practices). The education literature is useful here precisely because grading essays and grading model outputs have the same failure mode: a rubric that is clear in the author's head and ambiguous on the page.

The single most common cause of low agreement is not reviewer carelessness. It is an edge case the codebook never resolved, so each reviewer resolves it privately. Writing the decision rule first converts that hidden disagreement into something you can see and fix.

Draw a stratified sample, not a convenient one

Sampling the first two hundred rows is the fastest way to learn nothing, because early rows rarely resemble the whole set. Sample at random within strata you already know differ.

Stratify on at least three axes where they exist:

Stratum axisWhy it mattersExample split
Predicted classErrors cluster in ambiguous classesPositive, negative, borderline
Label sourceDifferent reviewers or teams may driftTeam A, Team B, outsourced pool
Input length or typeShort items get guessed, long items get skimmedUnder 20 tokens, 20 to 200, over 200
Model score bandThe threshold region is where errors biteBottom 10 percent, middle, top 10 percent

The size question has no universal answer, but a useful default is enough items per stratum that a single disagreement does not swing the statistic by more than a few points. For a class with a 20 percent prevalence, 40 to 60 sampled items per stratum will usually separate "this label is solid" from "this label is a coin flip." If the minority stratum is tiny, oversample it deliberately and record that you did.

Two rules make the sample honest. First, the second reviewer must be blind to the first score and to any model output. Second, the sampler must not be the person who produced the labels, or you will get a sample of the items the first reviewer was confident about.

Run the blind re-score and compute chance-corrected agreement

Two independent reviews of the same items produce a confusion matrix. Percent agreement is the first thing to look at and the first thing to distrust. If 90 percent of your items are labeled "fine," two reviewers who always say "fine" agree 90 percent of the time while telling you nothing.

Cohen's kappa corrects for that. It compares observed agreement against the agreement you would expect from the reviewers' own label frequencies, ranging from about -1 (active disagreement) through 0 (chance) to 1 (perfect) (McHugh, interrater reliability and the kappa statistic). The formula is (observed agreement minus expected agreement) divided by (1 minus expected agreement) (Galileo on Cohen's kappa for AI evaluation).

A worked example, using the standard 100-item two-rater layout from that same source. Suppose reviewer one labeled 50 items "pass" and reviewer two labeled 55. They agree on 40 passes and 35 fails.

                  Reviewer B: pass   Reviewer B: fail   Row total
Reviewer A: pass          40                10              50
Reviewer A: fail          15                35              50
Column total              55                45             100

Observed agreement Po = (40 + 35) / 100 = 0.75
Expected agreement Pe = (50*55 + 50*45) / 10000 = 0.50
Kappa = (0.75 - 0.50) / (1 - 0.50) = 0.50

A kappa of 0.50 is moderate. That is a warning, not a disaster: three quarters of labels agree, but the reference is not yet reliable enough to anchor a threshold on. Note the two off-diagonal cells. Fifteen items reviewer A passed were failed by B, and ten the other way. That asymmetry is where the diagnosis lives.

Computing it takes a few lines:

from sklearn.metrics import cohen_kappa_score, confusion_matrix

kappa = cohen_kappa_score(first_scores, second_scores)
print(f"kappa = {kappa:.3f}")
print(confusion_matrix(first_scores, second_scores, labels=["pass", "fail"]))

For more than two reviewers use Fleiss' kappa; for ordinal scales where a near miss is less bad than an opposite answer, use a weighted variant rather than the unweighted coefficient (numiqo on Cohen's kappa). And report a confidence interval, because a point estimate on 80 items hides how uncertain it is; the NLP annotation literature makes this a standard recommendation alongside a description of the rater design and the label distribution (James on selecting an inter-annotator agreement metric).

Read the confusion matrix for systematic drift, not just the score

Kappa gives you a number. The confusion matrix gives you the reason. After computing kappa, walk the off-diagonal cells in order of size and read ten disagreements each. They almost always fall into four patterns.

Disagreement patternWhat it looks likeWhat to do
Threshold driftOne reviewer is consistently stricterClarify and, if needed, accept that B's stricter rule is the one you want, then relabel
Rater drift over timeDisagreements cluster in later batchesRecalibrate with refresher examples, or audit per batch
Genuine ambiguityBoth labels are defensibleCollapse the class, add an "unclear" category, or mark those items as excluded
Definitional splitReviewers read the construct differentlyRewrite the codebook and redo the affected labels

The distinction matters because the remedy differs. Threshold and rater drift are fixed by retraining and recalibration, which is cheap. A definitional split means the codebook is wrong and some fraction of the labels must be redone, which is more expensive but still cheaper than discovering it after calibration.

There is a subtler point worth carrying into the design. Disagreement is not always noise to be stamped out. Some of it reflects legitimate ambiguity in the task, and collapsing it can throw away real information about where you are unsure (James on inter-annotator agreement). If two careful reviewers split evenly on a category, that category probably should be several categories or an explicit "unclear" bucket rather than a single forced choice.

Decide what to do when agreement is low

Low agreement is information, not failure. The three responses, in order of preference:

Fix the codebook and re-audit. Rewrite the decision rule using the ten disagreements you just read, add them as worked examples, retrain the reviewer, and re-sample a fresh set of items. If kappa climbs, the label is savable. This is usually the right first move because the cost is a morning of writing.

Narrow the label. If the ambiguity is concentrated, split the class or add a third "unclear" option. A three-way label with clean agreement often beats a forced binary with muddy agreement, because you can then handle "unclear" explicitly downstream instead of laundering it into a false certainty.

Drop the label. If repeated audits fail to push agreement up, retire it. It cannot set a threshold or anchor a calibration curve. Use a proxy that does agree across reviewers, such as a downstream behavioral outcome, or accept a weaker claim about the system.

A practical decision rule: set your kappa floor before you look at the result, so you are not tempted to rationalize a number you already have. A common convention in applied AI evaluation is to treat anything below the "substantial" band as a signal to fix the codebook before trusting the labels, and even that convention is contested as too lenient for high-stakes contexts (McHugh, KNIME on kappa and common pitfalls). The point is not the magic number. It is that you agreed to it in advance.

Weight your efforts by class. A label with 95 percent prevalence can tolerate moderate kappa without shifting your threshold much, while the 5 percent minority class is where every threshold decision actually lives. Kappa's weakness is that it reports one number for a whole matrix, and it is easily dominated by the majority class, a caveat the KNIME guide spells out with a worked imbalanced example in which high accuracy masked poor minority-class performance (KNIME). Compute agreement per class and treat the minority class as the real result.

Put the audit on a schedule

An audit is not a one-off. Labels drift as inputs change, as reviewers turn over and as the distribution of items shifts. The practical cadence:

TriggerAction
New reviewer joinsCalibrate on a fixed 50-item gold set before they score anything live
Codebook changeRe-audit a fresh sample within one batch
Model threshold changeRe-audit the stratum around the new threshold
Quarterly, recurringRandom sample across all strata, kappa logged per class
Drift alert or incidentAudit the affected slice before touching the model

Log the kappa and the confusion matrix alongside the model version so that a later drop in model performance can be traced to either the model or its reference. When it is the reference, that changes the fix entirely, and you will only know if you stored the audit.

When the audit is done and the reference is trusted, the next bottleneck is usually the surrounding work: running the same eval against several models, keeping results comparable and turning the output into something a business owner can act on. That is where a tool such as Quanta Inference, which puts text, image, video, audio and embedding models behind one OpenAI-compatible API key, removes some of the plumbing so the audit results can be checked across providers without rebuilding the harness each time.

FAQ

FAQ

How many items do I need in the audit sample?

Enough that one disagreement does not swing the statistic by more than a few points. In practice, 40 to 60 items per stratum usually separates a trustworthy label from a coin flip. For a rare class with 20 percent prevalence, that means deliberately oversampling minority items and recording that you did.

Can I just use percent agreement instead of kappa?

Not on its own, because percent agreement is inflated when one class dominates. Two reviewers who always say "fine" on a 90 percent "fine" dataset agree 90 percent of the time while revealing nothing. Percent agreement is still worth reporting next to kappa, since it tells readers the absolute rate of disagreement, but kappa is what corrects for chance.

What if the two reviewers disagree because the task is genuinely subjective?

Then the label may need splitting or an explicit "unclear" category. Forcing a single choice on a genuinely ambiguous item produces disagreement that looks like noise but is actually signal about the task's boundaries. Collapse or expand the codebook rather than penalizing reviewers, then re-audit.

Does a high kappa guarantee the labels are correct?

No. Kappa measures agreement, not accuracy against truth, and two reviewers can agree and both be wrong in the same way (numiqo). A shared misunderstanding shows up as high agreement. Mitigate it by auditing against an external criterion where one exists, and by having someone outside the labeling process read the codebook.

Who should be the second reviewer?

Someone who did not produce the original labels, is trained on the same codebook, and scores blind to the first score and to any model output. Using the original reviewer as the second judge measures self-consistency, not inter-rater agreement, and it will flatter the reference because the same private interpretation is applied twice.

Sources

Sources

  1. Calibration improves detection of mislabeled examples - arXiv
  2. Rubric Best Practices, Examples, and Templates
  3. Interrater reliability: the kappa statistic - PMC - NIH
  4. Enhancing AI Evaluation with Cohen's Kappa Metric
  5. Cohen's Kappa: Measuring Inter-Rater Agreement
  6. Selecting the Right Inter-annotator Agreement Metric for ...
  7. What Is Cohen's Kappa? How and When to Use It (Plus ...
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