Privacy — What Aggregation Cannot Hide
P15.fairness-privacy.03 · Audience: guest, it-ml, language-pro · Prerequisites: Where Bias Enters
In the mid-1990s a state insurance commission released hospital records for research, carefully "anonymised" — names and addresses stripped out, leaving only medical details plus a few innocuous-looking fields: date of birth, sex, ZIP code. A graduate student bought the public voter roll for the state capital, which carried those same three fields alongside every voter's name, and joined the two. One record matched the sitting governor. She mailed him his own health records. Nobody had broken in; nobody had cracked a code. The "anonymous" data had never been anonymous — it only looked that way until someone lined it up against a second list everyone could buy.
That is the failure this module exists to prevent: the confident belief that deleting the obvious identifiers makes data safe to share. It does not. Privacy is normative — a person has a right not to be picked out of a crowd they were promised they had blended into — and it is also technical, because whether they blend in depends on arithmetic about how many others share their details. We build the attack that unmasked the governor on a four-row example you can check by hand, then the two defences — k-anonymity and small-cell suppression — and the trap that catches people who apply the defences carelessly.
Personally identifiable information (PII) is any data that points at a specific person. The obvious kind — name, national ID, email, phone — we call direct identifiers, and stripping them out feels like anonymising. The dangerous kind is the quasi-identifier: a field that identifies nobody on its own, but that, combined with a few others, narrows the crowd to one person. ZIP code alone is thousands of people; date of birth alone is a slice of the calendar; sex alone is half of everyone. All three together can be unique.
ⓘ Concept: Identity leaks through combinations, not just columns
Why it matters — The whole difficulty of privacy is that identifying power is not a property of single fields you can point at and delete — it is a property of combinations. Famously, ZIP code plus date of birth plus sex uniquely identifies a large fraction of a national population, yet no one of the three would ever be flagged as sensitive on its own. This is why 'we removed the names' is not a privacy guarantee: the quasi-identifiers you left behind, each individually harmless, can recombine into a fingerprint. Protecting privacy means reasoning about what your remaining fields reveal jointly, against whatever other data an attacker can obtain.
🗣️ From a linguist's perspective: A description precise enough to name one person
Ask the mentor about this module
Ask a question about this content. The mentor explains and grounds its answer in what you are studying; asking is recorded as a learning signal, not a grade.
🎓 Practice ladder
4 graded rungs · ~38 minNow attack and defend the data yourself. Each rung is a three-panel workspace: instructions on the left, a code editor in the middle, output and test results on the right. Run checks the visible tests; Submit grades against hidden tables. The explorer rung re-identifies the anonymous rows by the linkage join; the practitioner rungs compute k-anonymity and apply small-cell suppression with its complementary-suppression trap; the senior rung designs a release that meets a k target while holding its key ratios within tolerance.
Rung 1 — Re-identify the anonymous row (explorer)
Loading exercise…
Rung 2 — k-anonymity counter
Loading exercise…
Rung 3 — Small-cell suppression
Loading exercise…
Rung 4 — Design the release (senior)
Loading exercise…
Try it yourself
A scratch console for this page's ideas — ungraded, nothing you run here is recorded.
Scratch console
A scratch console with the scientific stack (pandas, numpy, scikit-learn). Runs on the server — no network, resource-limited and measured.
Output appears here.
Where next?
Later in Fairness & Privacy