Multiple comparisons and alert fatigue
Why does a large expectation suite produce alert fatigue by arithmetic?
Multiple comparisons: alert fatigue is arithmetic
This is arithmetic, not a discipline problem. Freshlane has 200 tables × 20 columns × 3 checks = 12,000 assertions. Suppose each assertion has a false-positive rate of one in a thousand per run, and runs once a day. Expected false alarms per day = 12,000 × 0.001 = 12. Every day, forever, even if the data is perfect.
(The textbook name for the underlying effect is the multiple-comparisons problem: test enough hypotheses and some will "fail" by chance.)
Alert fatigue is therefore a designed-in property of any large expectation suite. Every response is lossy:
| Response | What you lose |
|---|---|
| Raise thresholds | recall (more misses) |
| Correct family-wise (e.g. divide the significance level by the number of tests, the Bonferroni correction) | power (smaller real defects are missed) |
| Aggregate to one verdict per dataset | locality (you no longer know which column) |
| Give paging authority only to a handful of checks | coverage where you did not give authority |
Every threshold is a classifier and inherits two error types. There is no operating point with neither false alarms nor misses. There is only a choice of which to buy. Alert fatigue and silent corruption are the same dial at opposite ends. A quality system tuned for zero noise is, by construction, tuned for low recall.
Every mature stack converges on the last option: a small set of gates with teeth, and a large set of signals without. That convergence is empirical evidence for the principle stated in Gates, quarantine, stop-the-line.
Compression: statistics turn checks into classifiers. At scale, significance measures your row count, and false alarms are arithmetic.