名前を消しても、人は特定される
匿名化とは、データから名前などを消して、誰の記録かわからなくすることです。ところが、名前を消しても、年齢と地域などの組み合わせだけで、1人に絞れることがあります。
このレッスンでは、同じ組み合わせの人が何人いるかを数えて、特定されやすい人を見つけます。
このレッスンのゴール
メモ
k-匿名性の考え方で、特定されやすい人のグループを見つけられる。
キーワード
| ことば | いみ | れい |
|---|---|---|
| 匿名化 | 名前などを消して、誰の記録かわからなくすること | |
| 準識別子 | 組み合わせると人を特定できる項目 | 年齢と地域 |
| k-匿名性 | どの組み合わせにも、同じ人が少なくともk人いること | |
| 一般化 | 値を粗くして、グループを大きくすること | 19歳を19歳から21歳に |
| 再識別 | 匿名の記録から、誰のものかを突き止めること |
学生が入力するセルは、このプレビューでは空白です。
組み合わせが1人なら、特定される
準識別子は、1つでは人を特定できなくても、組み合わせると特定できる項目です。年齢、学部、地域コードがその例です。
組み合わせが同じ人が1人だけなら、その記録は誰のものかを突き止められます。これを再識別といいます。
例: 8人を組み合わせで数える
| 学部 | 地域コード | 人数 |
|---|---|---|
| 工学 | N1 | 3人 |
| 文学 | N1 | 1人 |
| 文学 | N2 | 2人 |
| 工学 | N2 | 1人 |
| 医学 | N3 | 1人 |
学生が入力するセルは、このプレビューでは空白です。
グループの人数を数える
# [年齢, 学部, 地域コード] の記録です。名前は消してあります。
records = [[19, "工学", "N1"], [19, "工学", "N1"], [20, "工学", "N1"], [21, "文学", "N1"],
[21, "文学", "N2"], [20, "工学", "N2"], [22, "文学", "N2"], [25, "医学", "N3"]]
sizes = {}
for r in records:
key = r[1] + "/" + r[2]
if key in sizes:
sizes[key] = sizes[key] + 1
else:
sizes[key] = 1
print(sizes)
# 人数が1のグループは、いくつありますか。
k-匿名性は、いちばん小さいグループで決まる
k-匿名性は、どの組み合わせにも、同じ人が少なくともk人いる状態です。いちばん小さいグループの人数が、そのまま k です。
kが1なら、特定される人がいます。kが大きいほど、1人に絞りにくくなります。
ラボで、項目を足すとkが小さくなる
ラボの日の記録を、1人の記録に見立てます。項目を1つずつ足して、グループの数と、いちばん小さいグループの大きさ k を数えます。
各行は、項目、グループの数、k の順です。
項目を足したときのグループ
docker exec jupyter python3 -c "import csv,collections; r=list(csv.DictReader(open('hires.csv'))); [print('+'.join(c), len(g), min(g.values())) for c in (('weather',),('weekday','weather'),('month','weekday','weather')) for g in [collections.Counter(tuple(x[k] for k in c) for x in r)]]"ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
よくある間違い
注意
名前の列を消せば、匿名になると考えがちです。けれど、年齢や地域などの組み合わせで、1人に絞れることがあります。名前を消すだけでなく、組み合わせの人数を数えてください。
値を粗くして、グループを大きくする
一般化は、値を粗くして、グループを大きくすることです。年齢を「19歳」ではなく「19歳から21歳」にすると、同じ組み合わせの人が増えて、kが大きくなります。
それでも1人のグループが残るなら、その記録を外します。ただし、情報は粗くなります。守る強さと、データの細かさは引き換えです。
例: 使う項目とk
| 使う項目 | グループの数 | k |
|---|---|---|
| 年齢と学部と地域コード | 7 | 1 |
| 学部と地域コード | 5 | 1 |
| 地域コードだけ | 3 | 1 |
| 地域コードだけ(医学の1人を除く) | 2 | 3 |
学生が入力するセルは、このプレビューでは空白です。
さらに挑戦: 全員が同じ結果
課題の記録で、人数が3以上の「中1/北」を見てください。結果は、合格、不合格、合格です。
もし、あるグループの全員が不合格だったら、kが大きくても何がわかってしまいますか。一文で書きましょう。