クリーム色の背景、色付き表示、高コントラスト、大きな文字のほうが読みやすいですか?配色と文字を選ぶと、すべてのページに一度で反映されます。

無料レッスン

k-匿名性で個人を守る

このレッスンのあとで: k-匿名性の考え方で、特定されやすい人のグループを見つけられる。

55分のレッスンコマンド1件JupyterLab データサイエンスラボ:pandas、Matplotlib、scikit-learn をブラウザーで

名前を消しても、人は特定される

匿名化とは、データから名前などを消して、誰の記録かわからなくすることです。ところが、名前を消しても、年齢と地域などの組み合わせだけで、1人に絞れることがあります。

このレッスンでは、同じ組み合わせの人が何人いるかを数えて、特定されやすい人を見つけます。

このレッスンのゴール

メモ

k-匿名性の考え方で、特定されやすい人のグループを見つけられる。

キーワード

ことばいみれい
匿名化名前などを消して、誰の記録かわからなくすること
準識別子組み合わせると人を特定できる項目年齢と地域
k-匿名性どの組み合わせにも、同じ人が少なくともk人いること
一般化値を粗くして、グループを大きくすること19歳を19歳から21歳に
再識別匿名の記録から、誰のものかを突き止めること

学生が入力するセルは、このプレビューでは空白です。

組み合わせが1人なら、特定される

準識別子は、1つでは人を特定できなくても、組み合わせると特定できる項目です。年齢、学部、地域コードがその例です。

組み合わせが同じ人が1人だけなら、その記録は誰のものかを突き止められます。これを再識別といいます。

例: 8人を組み合わせで数える

学部地域コード人数
工学N13人
文学N11人
文学N22人
工学N21人
医学N31人

学生が入力するセルは、このプレビューでは空白です。

グループの人数を数える

コード: python
# [年齢, 学部, 地域コード] の記録です。名前は消してあります。
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
年齢と学部と地域コード71
学部と地域コード51
地域コードだけ31
地域コードだけ(医学の1人を除く)23

学生が入力するセルは、このプレビューでは空白です。

さらに挑戦: 全員が同じ結果

課題の記録で、人数が3以上の「中1/北」を見てください。結果は、合格、不合格、合格です。

もし、あるグループの全員が不合格だったら、kが大きくても何がわかってしまいますか。一文で書きましょう。

このラボとソースについて: JupyterLab データサイエンスラボ:pandas、Matplotlib、scikit-learn をブラウザーで

授業で使いますか?このモジュールを学生に割り当てると、教員用ガイド、自動採点つきの課題、学生ごとのラボを使えます。