Sampling: cheapest exactly where it is weakest
Why is sampling weakest exactly where defects are costliest?
The arithmetic is unforgiving. To see a defect of prevalence p at least once with confidence 1 − β, you need roughly
- the share of rows with the defect
- chance of seeing it zero times (confidence 1 − β)
Data table
| Prevalence p | series | Rows to sample |
|---|---|---|
| 0 | 95% confidence | 30M |
| 0 | 95% confidence | 25.2M |
| 0 | 95% confidence | 21.2M |
| 0 | 95% confidence | 17.8M |
| 0 | 95% confidence | 15M |
| 0 | 95% confidence | 12.6M |
| 0 | 95% confidence | 10.6M |
| 0 | 95% confidence | 8.94M |
| 0 | 95% confidence | 7.52M |
| 0 | 95% confidence | 6.33M |
| 0 | 95% confidence | 5.33M |
| 0 | 95% confidence | 4.48M |
| 0 | 95% confidence | 3.77M |
| 0 | 95% confidence | 3.17M |
| 0 | 95% confidence | 2.67M |
| 0 | 95% confidence | 2.25M |
| 0 | 95% confidence | 1.89M |
| 0 | 95% confidence | 1.59M |
| 0 | 95% confidence | 1.34M |
| 0 | 95% confidence | 1.13M |
| 0 | 95% confidence | 947K |
| 0 | 95% confidence | 797K |
| 0 | 95% confidence | 671K |
| 0 | 95% confidence | 564K |
| 0 | 95% confidence | 475K |
| 0 | 95% confidence | 399K |
| 0 | 95% confidence | 336K |
| 0 | 95% confidence | 283K |
| 0 | 95% confidence | 238K |
| 0 | 95% confidence | 200K |
| 0 | 95% confidence | 168K |
| 0 | 95% confidence | 142K |
| 0 | 95% confidence | 119K |
| 0 | 95% confidence | 100K |
| 0 | 95% confidence | 84.4K |
| 0 | 95% confidence | 71K |
| 0 | 95% confidence | 59.8K |
| 0 | 95% confidence | 50.3K |
| 0 | 95% confidence | 42.3K |
| 0 | 95% confidence | 35.6K |
| 0 | 95% confidence | 30K |
| 0 | 95% confidence | 25.2K |
| 0 | 95% confidence | 21.2K |
| 0 | 95% confidence | 17.8K |
| 0 | 95% confidence | 15K |
| 0 | 95% confidence | 12.6K |
| 0 | 95% confidence | 10.6K |
| 0 | 95% confidence | 8.94K |
| 0 | 95% confidence | 7.52K |
| 0 | 95% confidence | 6.33K |
| 0.001 | 95% confidence | 5.33K |
| 0.001 | 95% confidence | 4.48K |
| 0.001 | 95% confidence | 3.77K |
| 0.001 | 95% confidence | 3.17K |
| 0.001 | 95% confidence | 2.67K |
| 0.001 | 95% confidence | 2.25K |
| 0.002 | 95% confidence | 1.89K |
| 0.002 | 95% confidence | 1.59K |
| 0.002 | 95% confidence | 1.34K |
| 0.003 | 95% confidence | 1.13K |
| 0.003 | 95% confidence | 947 |
| 0.004 | 95% confidence | 797 |
| 0.004 | 95% confidence | 671 |
| 0.005 | 95% confidence | 564 |
| 0.006 | 95% confidence | 475 |
| 0.008 | 95% confidence | 399 |
| 0.009 | 95% confidence | 336 |
| 0.011 | 95% confidence | 283 |
| 0.013 | 95% confidence | 238 |
| 0.015 | 95% confidence | 200 |
| 0.018 | 95% confidence | 168 |
| 0.021 | 95% confidence | 142 |
| 0.025 | 95% confidence | 119 |
| 0.03 | 95% confidence | 100 |
| 0.036 | 95% confidence | 84.4 |
| 0.042 | 95% confidence | 71 |
| 0.05 | 95% confidence | 59.8 |
| 0.06 | 95% confidence | 50.3 |
| 0.071 | 95% confidence | 42.3 |
| 0.084 | 95% confidence | 35.6 |
| 0.1 | 95% confidence | 30 |
| 0 | 99% confidence | 46.1M |
| 0 | 99% confidence | 38.7M |
| 0 | 99% confidence | 32.6M |
| 0 | 99% confidence | 27.4M |
| 0 | 99% confidence | 23.1M |
| 0 | 99% confidence | 19.4M |
| 0 | 99% confidence | 16.3M |
| 0 | 99% confidence | 13.7M |
| 0 | 99% confidence | 11.6M |
| 0 | 99% confidence | 9.73M |
| 0 | 99% confidence | 8.19M |
| 0 | 99% confidence | 6.89M |
| 0 | 99% confidence | 5.8M |
| 0 | 99% confidence | 4.88M |
| 0 | 99% confidence | 4.1M |
| 0 | 99% confidence | 3.45M |
| 0 | 99% confidence | 2.91M |
| 0 | 99% confidence | 2.44M |
| 0 | 99% confidence | 2.06M |
| 0 | 99% confidence | 1.73M |
| 0 | 99% confidence | 1.46M |
| 0 | 99% confidence | 1.23M |
| 0 | 99% confidence | 1.03M |
| 0 | 99% confidence | 867K |
| 0 | 99% confidence | 730K |
| 0 | 99% confidence | 614K |
| 0 | 99% confidence | 517K |
| 0 | 99% confidence | 435K |
| 0 | 99% confidence | 366K |
| 0 | 99% confidence | 308K |
| 0 | 99% confidence | 259K |
| 0 | 99% confidence | 218K |
| 0 | 99% confidence | 183K |
| 0 | 99% confidence | 154K |
| 0 | 99% confidence | 130K |
| 0 | 99% confidence | 109K |
| 0 | 99% confidence | 91.9K |
| 0 | 99% confidence | 77.3K |
| 0 | 99% confidence | 65K |
| 0 | 99% confidence | 54.7K |
| 0 | 99% confidence | 46.1K |
| 0 | 99% confidence | 38.7K |
| 0 | 99% confidence | 32.6K |
| 0 | 99% confidence | 27.4K |
| 0 | 99% confidence | 23.1K |
| 0 | 99% confidence | 19.4K |
| 0 | 99% confidence | 16.3K |
| 0 | 99% confidence | 13.7K |
| 0 | 99% confidence | 11.6K |
| 0 | 99% confidence | 9.73K |
| 0.001 | 99% confidence | 8.19K |
| 0.001 | 99% confidence | 6.89K |
| 0.001 | 99% confidence | 5.8K |
| 0.001 | 99% confidence | 4.88K |
| 0.001 | 99% confidence | 4.1K |
| 0.001 | 99% confidence | 3.45K |
| 0.002 | 99% confidence | 2.91K |
| 0.002 | 99% confidence | 2.44K |
| 0.002 | 99% confidence | 2.06K |
| 0.003 | 99% confidence | 1.73K |
| 0.003 | 99% confidence | 1.46K |
| 0.004 | 99% confidence | 1.23K |
| 0.004 | 99% confidence | 1.03K |
| 0.005 | 99% confidence | 867 |
| 0.006 | 99% confidence | 730 |
| 0.008 | 99% confidence | 614 |
| 0.009 | 99% confidence | 517 |
| 0.011 | 99% confidence | 435 |
| 0.013 | 99% confidence | 366 |
| 0.015 | 99% confidence | 308 |
| 0.018 | 99% confidence | 259 |
| 0.021 | 99% confidence | 218 |
| 0.025 | 99% confidence | 183 |
| 0.03 | 99% confidence | 154 |
| 0.036 | 99% confidence | 130 |
| 0.042 | 99% confidence | 109 |
| 0.05 | 99% confidence | 91.9 |
| 0.06 | 99% confidence | 77.3 |
| 0.071 | 99% confidence | 65 |
| 0.084 | 99% confidence | 54.7 |
| 0.1 | 99% confidence | 46.1 |
Verifying a sampled row means checking it against the world, not against another table: the invoice behind a payment, the shelf price behind a price row, a person who confirms an address. It is the only proxy in this mechanism that touches what "right" refers to, which is why it costs the most per row. Read the formula backwards and a clean sample makes a claim: if n verified rows show no defect, the defect rate is below about 3 ÷ n, with 95% confidence. Three hundred clean rows say "under 1%". They say nothing about 10⁻⁴.
Now add the usual relation between prevalence and severity: the expensive defects are the rare ones. Systemic breakage is caught by anything, even a glance. The single mispriced trade, the one account with a wrong identifier, the few rows in the wrong currency: these cost money, and they are exactly the defects that uniform sampling will not find at any budget you would approve.
Two escapes
- Stratify. Split the data along whatever dimension defects correlate with (source, region, code path, date) and sample each stratum. A rare global defect becomes a common local one inside the affected stratum.
- Sample by value, not by row. Where the stakes are money, verify enough rows to cover a target fraction of the total exposure. Value distributions are usually heavy-tailed (a few very large items hold most of the total), so a few hundred rows can cover most of the money. This is monetary-unit sampling, borrowed from financial audit practice. It is the right default whenever the consequence of a defect scales with a value in the row. Uniform row sampling is the right default only when every row is equally important, which is rarely the case.
Illustration. Among 800 million payment rows, suppose the largest 2,000 rows hold 55% of the money. Checking those 2,000 rows (0.00025% of the rows) covers 55% of the exposure. A uniform sample of 2,000 rows would cover about 0.00025% of it.
Compression: sampling finds defects at a rate of about 1 in n, and severity usually grows as 1 over prevalence, so sample by exposure, not by row.