Worked example: Suppose you're spot-checking a batch of vehicle bounding boxes against a small gold-standard subset. One box overlaps its reference box in 70 square units, and together they span 100 square units of combined area. IoU = 70 / 100 = 0.70. A tighter, near-identical pair might overlap in 95 of 100 combined units — IoU = 0.95.
There's no universal "good" IoU threshold — it depends entirely on what the downstream model can tolerate. A shelf-monitoring model counting products on a retail shelf can absorb a fair amount of positional slop. A lane-detection model for an autonomous vehicle cannot; a few pixels of drift at the boundary is a real defect, not rounding error.
Dice coefficient (for pixel-level segmentation)
For segmentation masks, the Dice coefficient is a close cousin of IoU, weighting the overlap slightly differently, and shows up often in medical and fine-grained segmentation work where boundary precision carries more weight than it does for a coarse bounding box. Segmentation quality is usually reported as mean IoU across classes, since a mask can be excellent on large, easy classes and poor on small or visually ambiguous ones — averaging across classes without breaking that out can hide exactly the gap you need to see.
Keypoints and landmarks: distance, not overlap
A single point has no area, so IoU doesn't apply. Instead, check the distance between the annotated point and its true location — normalized against a reference measurement in the same image (an object's width, a body segment's length) rather than raw pixels, since raw pixel distances aren't comparable across images shot at different scales or resolutions.
Check 4: For text and NER tasks, use precision, recall, and F1 — not raw accuracy
Text-span annotation (NER, entity extraction, sentiment spans) fails in more specific ways than "right or wrong." A span can be:
- Correct — right boundaries, right label
- A false positive — a span was labeled where nothing should have been
- A false negative — an entity was missed entirely
- Partially correct — right label, boundary slightly off (e.g., "New York City" tagged as a location, but only "York City" was captured)
This is why raw accuracy is a poor fit here — it doesn't distinguish "we missed things" from "we labeled things that don't exist" from "we got the label right but the boundary wrong." Precision (of what we labeled, how much was right), recall (of what should have been labeled, how much did we catch), and F1 (their harmonic mean) separate those failure modes out.
Example: An annotator working through customer support transcripts is asked to tag every mention of a product name. Across 200 transcripts, the gold-standard set has 340 true product mentions. The annotator's output includes 310 tagged spans, of which 290 match a true mention. Precision = 290/310 ≈ 0.94. Recall = 290/340 ≈ 0.85. The gap between those two numbers tells you something specific: the annotator is being careful about what they tag (high precision) but missing a meaningful chunk of real mentions (lower recall) — probably variant product names or abbreviations the guideline didn't cover. That's an actionable, specific finding — "flat accuracy" would have buried it.
Check 5: Look at completeness, not just correctness of what's there
A dataset can score well on every metric above and still be quietly incomplete — objects that were never annotated at all, images skipped, entities missed wholesale. Completeness checks are less glamorous than kappa or IoU, but they catch a different failure mode: not "is the label wrong," but "is there a label at all."
Practical ways to check this without re-annotating everything:
- Compare object counts per image against a reference distribution (a shelf-monitoring dataset where most images should have 10–30 products but some report zero is a signal, not a coincidence).
- Sample images with unusually few or zero annotations and manually check whether that's genuine or a miss.
- For text, check the ratio of tagged spans to document length across the dataset — outliers are worth a manual look.
Check 6: Disagreement is data — don't average it away
If you ran double annotation on any subset and found disagreements, don't just compute a summary statistic and move on. Look at where annotators diverged and why. Disagreement usually falls into a small number of recognizable patterns:
- A genuinely ambiguous case the guideline didn't anticipate
- One annotator missing an edge-case rule that the other applied correctly
- A borderline judgment call where both interpretations are defensible
Each of these calls for a different fix. The first means the guideline needs an update. The second means one annotator needs retraining or a clarifying note. The third might mean the ontology itself needs revising, or it means you accept a certain rate of judgment-call variance as inherent to the task. Routing disagreements to a defined adjudication step — a senior reviewer or the guideline's author making the final call — turns this from a vague "quality problem" into a specific, fixable list.
Check 7: Categorize errors instead of computing a single error rate
If you're doing a manual audit pass, resist the urge to log a flat "X% error rate" and stop there. A flat rate hides whether errors cluster around one class, one geometry type, or one guideline ambiguity. Break errors into categories as you go:
- Wrong class / wrong label
- Boundary or localization issue (right object, badly placed region)
- Missed object / false negative
- Spurious label / false positive
- Guideline misinterpretation (systematic, not random)
A 4% error rate that's evenly spread across random items is a very different problem — and a much smaller one — than a 4% error rate where three-quarters of it comes from annotators misreading one specific guideline rule. The second case means a five-minute guideline clarification fixes most of it; the first means you have a harder, more diffuse quality problem.
Check 8: If it's a production dataset, don't treat this as a one-time audit
A pilot batch passing every check above doesn't guarantee the same quality holds at 50,000 items across a full production run. Guidelines drift as interpretations shift gradually across a team working for weeks; edge cases that were rare in the pilot become common at scale. Ongoing spot-sampling against a gold-standard set — not just a check at the start and a check at the end — is the difference between catching drift early and discovering it in a model failure months later.
Putting it together: a minimal audit checklist
For any labeled dataset you receive, before you trust it:
- Identify the task type and pick the metric family that actually fits it (see the table above).
- Check whether a gold-standard reference subset exists — build a small one if not.
- If overlap annotation exists, compute agreement with the right chance-corrected statistic (Cohen's Kappa for two raters, Fleiss' for more, Krippendorff's Alpha for mixed/incomplete data).
- For spatial annotations, compute IoU or Dice against a reference subset, not just class-label agreement.
- For text/NER, compute precision, recall, and F1 separately — don't collapse them into one number.
- Sample for completeness, not just correctness.
- Pull actual disagreement cases and categorize them, rather than only reporting a summary statistic.
- If it's an ongoing production run, repeat all of the above periodically, not once.
None of these checks are exotic. They're standard statistical and computer-vision tools that have existed for decades. The reason they don't get applied consistently is mostly workflow — teams don't have a defined pipeline for building gold-standard samples, running double annotation on a meaningful slice, or categorizing errors instead of just counting them.
Some annotation teams build this kind of layered checking into how the data gets produced in the first place, rather than leaving it entirely to whoever receives the dataset downstream. Precise BPO Solution, for instance, structures production annotation work around staged review — gold-standard comparison, independent QA passes, and disagreement adjudication — specifically because a single accuracy figure at delivery time doesn't tell a client which of these failure modes was actually checked for. For a broader breakdown of how these checks map to different annotation types, this rundown of data annotation quality standards goes deeper into the metric-selection logic across bounding boxes, segmentation, and categorical labeling.
Whether you're building that process yourself or evaluating a vendor's, the underlying discipline is the same: don't ask "how accurate is this dataset." Ask "which specific properties were checked, against what reference, and how."
A closing note on what these metrics can't tell you
Every metric in this article has a blind spot. Kappa says nothing about spatial accuracy. IoU says nothing about whether the class label is right. Precision and recall assume your gold standard itself is correct, which isn't always true — inconsistent ground truth will register as annotator error even when the annotator's interpretation was reasonable. None of these numbers, alone or combined, "certifies" a dataset as good.
What they do is something more useful and more modest: each one answers one narrow, specific question about one specific failure mode. Run enough of the right ones, and you get a genuinely well-supported picture of where a dataset is solid and where it isn't — which is a much more actionable outcome than a single number that quietly averages every failure mode into meaninglessness.

Top comments (0)