C.W.K.
Stream
Lesson 07 of 07 · published

Benchmark Limitations and Custom Benchmarks

~18 min · benchmarks, limitations, custom

Level 0Guesser
0 XP0/55 lessons0/10 achievements
0/150 XP to next level150 XP to go0% complete

Why public benchmarks are not enough

Every public benchmark has the same fatal flaw for product evaluation: it is public. That means models are evaluated on (and often trained on) the same questions you want to use to compare them. Three structural problems follow:

  1. Contamination — model has seen test items in training.
  2. Goodhart — once a benchmark is known, model labs optimize for it specifically.
  3. Distribution mismatch — your product's input distribution looks nothing like the benchmark's.

Why custom benchmarks always win in production

The benchmark that matters for your product is your product's own eval suite. Public benchmarks help you screen out obviously weak models; custom benchmarks discriminate between the survivors.

How to build a defensible custom benchmark

  1. Sample real production traffic (with privacy controls).
  2. Stratify across the dimensions that matter (intent, language, length, difficulty).
  3. Curate 500-1000 cases with reference answers or rubric grading.
  4. Hold out 100-200 cases that NEVER touch any model fine-tuning.
  5. Version it like code; refresh it quarterly.
Principle: Public benchmarks tell you which models are in the running. Custom benchmarks tell you which one to ship.

The future-proofing argument

When the next model lands ("Claude X.Y", "GPT-N+1"), your custom benchmark is the only artifact that lets you decide whether to switch. Without it, every model upgrade is a leap of faith. With it, the upgrade is a numerical decision: ran our suite, beat our baseline, ship.

Code

Custom benchmark structure·json
{
  "benchmark": "acme-product-v3",
  "version": "2026-q2",
  "description": "500 cases sampled from production logs, stratified by intent and language",
  "strata": {
    "intent": ["qa", "navigation", "transactional", "exploratory"],
    "language": ["en", "es", "fr", "ja"],
    "difficulty": ["easy", "medium", "hard"]
  },
  "holdout_count": 100,
  "refresh_cadence": "quarterly",
  "contamination_policy": "no case ever appears in any fine-tuning corpus"
}
Detecting public-benchmark contamination·python
# A simple test: paraphrase a benchmark question and ask the model both versions.
# If it answers the original near-perfectly but the paraphrase poorly,
# memorization is the likely explanation.
import difflib

def paraphrase_test(model, original_q, paraphrased_q, expected):
    a1 = model.complete(original_q)
    a2 = model.complete(paraphrased_q)
    return {
        "original_correct": expected in a1.lower(),
        "paraphrase_correct": expected in a2.lower(),
        "answer_similarity": difflib.SequenceMatcher(None, a1, a2).ratio(),
    }

External links

Exercise

Build a 100-case custom benchmark for your product, stratified across at least three dimensions. Run your current and one alternative model. Compare custom-benchmark scores to MMLU scores for the same models. The disagreement is the value of having your own data.

Progress

Progress is local-only — sign in to sync across devices.
Spotted a bug or have feedback on this page?Report an Issue

Comments 0

🔔 Reply notifications (sign in)
Sign inPlease sign in to comment.

No comments yet — be the first.