Contamination, Gaming, and Goodhart's Law

A benchmark score is trustworthy only if the model hasn't seen the answers and no one has optimized directly for the test. Both assumptions fail constantly. Training data contamination inflates scores by rewarding memorization; optimizing for a benchmark turns it from a measure into a target and destroys its meaning. This post is about the ways evaluation gets corrupted — and how to defend against them.

The previous post covered how benchmarks are designed. This one covers how they’re broken — sometimes accidentally, sometimes deliberately. The unifying principle is a law of measurement that predates AI by decades, and understanding it is the difference between numbers you can trust and numbers that are quietly lying to you.

Data contamination

Contamination is when the test data has leaked into the model’s training data. Because frontier models train on enormous web scrapes, and popular benchmarks are published on the web, the benchmark’s questions and answers are very likely somewhere in the training corpus. When that happens, a high score may reflect memorization, not capability — the model has effectively seen the exam beforehand.

Contamination is insidious because it’s usually invisible and unintentional. No one set out to cheat; the benchmark simply ended up in the crawl, along with the countless blog posts, GitHub repos, and papers that quote it. The result is scores that overstate real ability, and worse, that overstate it unevenly — a model contaminated on benchmark A but not B will look artificially strong on A, corrupting comparisons.

Detecting it is hard. Techniques exist — checking whether a model can complete a benchmark item verbatim from a partial prompt, comparing performance on the original test vs. a freshly-written equivalent, or looking for suspiciously low “perplexity” on test items — but none is definitive, and model providers rarely disclose their training data. The honest stance is to assume any well-known public benchmark is at least partly contaminated for any model trained after that benchmark was published, and to weight it accordingly.

Goodhart’s law: the deeper problem

Contamination is a special case of a more general trap, captured by Goodhart’s law: when a measure becomes a target, it ceases to be a good measure. The moment a metric is something you optimize toward rather than merely observe, you start improving the metric in ways that don’t improve the underlying thing it was meant to track.

In AI evaluation this shows up everywhere:

Goodhart’s law is not a bug to be fixed; it’s a property of optimization. The defense is not to find an ungameable metric — none exists — but to design your evaluation so gaming it is hard and detectable.

Defending against contamination and gaming

Several practices, used together, keep evaluation honest:

The mindset: treat every number as a claim to be checked

The through-line of this post is skepticism as a discipline. A benchmark score is not a fact about a model; it’s a claim produced under conditions that may or may not have been honest. Before trusting one, ask: could the model have seen this data? Was the metric optimized toward, directly or indirectly? Is this the dev set I’ve been iterating on, or a genuine held-out test? Is one metric hiding a regression in another?

This isn’t cynicism — it’s the same rigor you’d apply to any experiment. The teams that ship reliable AI are the ones that treat their own evaluations adversarially, actively hunting for the ways their numbers might be lying, rather than celebrating a score and moving on. Contamination and Goodhart’s law guarantee that some of your numbers will be misleading; the only question is whether you catch it before your users do.

Key takeaways

Further reading

Sources & References

When a measure becomes a target it ceases to be a good measure