データの秘匿技術 ~匿名化技法について解説(k-匿名化)~
はじめに
これまでは、匿名化の一般的な方法や、語句の定義を行なってきました。
今回のブログでは、匿名化をする上での匿名化技法を紹介したいと思います。
これまでのおさらいですが、匿名化をする上で大切な事とはどのような事でしたでしょうか?
もちろん、様々あると思いますが、大きくは以下の2点ではないでしょうか
- 個人を特定されない事
- 二次利用ができるデータである事
つまりは、全て黒塗りにしてしまっては、個人は特定されないかもしれませんが、二次利用ができません。利活用における有用性と匿名化はある意味でトレードオフの関係もあります。
この事を踏まえつつ、上記の関係を維持しながら、匿名化をする技法を紹介していきたいと思います。
k-匿名化
k-匿名化とは、準識別子のデータがk件以上になるようにデータを変換していき、個人特定される確率をk分の1以下にするモデルになります。基本的に抑制(削除)と一般化によりkの値まで匿名化を行うモデルになります。
この技法は一般的で、googleもこの技法を活用しています。(参考:GOOGLE によるデータの匿名化の方法)
それでは、k-匿名化を解説していきたいと思います。
例えば下記のようなデータがあったとします。
属性は、(名前、年齢、性別、住所、職業、病気)の6種類あります。
このデータを特定されない形でkの値での匿名性を実行できるようにします。
識別子 | 準識別子 | 準識別子 | 準識別子 | 準識別子 | センシティブ属性 |
---|---|---|---|---|---|
名前 | 年齢 | 性別 | 住所 | 職業 | 病気 |
suzuki | 29 | 女性 | 千代田区 | 医者 | ガン |
tanaka | 23 | 女性 | 埼玉市 | 学生 | 感染症 |
sato | 24 | 女性 | 世田谷区 | 弁護士 | ガン |
nakai | 27 | 男性 | 柏市 | 会社員 | 結核 |
yamada | 29 | 女性 | 川口市 | 会社員 | 心血管疾患 |
okada | 19 | 男性 | 松戸市 | 学生 | 結核 |
nishino | 29 | 男性 | 所沢市 | 美容師 | ガン |
miyamoto | 29 | 男性 | 市原市 | 会社員 | 心血管疾患 |
saito | 18 | 男性 | 春日部市 | 無職 | 心血管疾患 |
watanabe | 19 | 男性 | 越谷市 | 学生 | 感染症 |
k-匿名性を実施するために以下の二つの方法を紹介します。
抑制
ある属性アスタリスク「*」などに置換することで隠してしまうこと
一般化
ある属性の値を一つ階層をあげる形で広義の意味に置換すること
(※一般化は、どのように一般化すべきか、すべきではないかなど評価式をもとに実施する必要がありますが、その話は別の機会に)
上記のデータを抑制してみましょう。
識別子の名前 と 準識別子の職業 を*に置換します。
識別子 | 準識別子 | 準識別子 | 準識別子 | 準識別子 | センシティブ属性 |
---|---|---|---|---|---|
名前 | 年齢 | 性別 | 住所 | 職業 | 病気 |
* | 29 | 女性 | 千代田区 | * | ガン |
* | 23 | 女性 | 埼玉市 | * | 感染症 |
* | 24 | 女性 | 世田谷区 | * | ガン |
* | 27 | 男性 | 柏市 | * | 結核 |
* | 29 | 女性 | 川口市 | * | 心血管疾患 |
* | 29 | 男性 | 松戸市 | * | 結核 |
* | 19 | 男性 | 所沢市 | * | ガン |
* | 29 | 男性 | 市原市 | * | 心血管疾患 |
* | 18 | 男性 | 春日部市 | * | 心血管疾患 |
* | 19 | 男性 | 越谷市 | * | 感染症 |
次に一般化してみましょう。
準識別子の年齢を広義のくくりで年齢層に、準識別子の住所を広義の東京都、埼玉県、千葉県に置換します。
識別子 | 準識別子 | 準識別子 | 準識別子 | 準識別子 | センシティブ属性 |
---|---|---|---|---|---|
名前 | 年齢 | 性別 | 住所 | 職業 | 病気 |
* | 20代 | 女性 | 東京都 | * | ガン |
* | 20代 | 女性 | 埼玉県 | * | 感染症 |
* | 20代 | 女性 | 東京都 | * | ガン |
* | 20代 | 男性 | 千葉県 | * | 結核 |
* | 20代 | 女性 | 埼玉県 | * | 心血管疾患 |
* | 20代 | 男性 | 千葉県 | * | 結核 |
* | 10代 | 男性 | 埼玉県 | * | ガン |
* | 20代 | 男性 | 千葉県 | * | 心血管疾患 |
* | 10代 | 男性 | 埼玉県 | * | 心血管疾患 |
* | 10代 | 男性 | 埼玉県 | * | 感染症 |
上記のデータが抑制、一般化することで、識別子、準識別子が同じであるというグループに分けることが可能になりました。
グループわけする事でセンシティブ属性がわかっても個人を特定できない状態になります。
識別子 | 準識別子 | 準識別子 | 準識別子 | 準識別子 | センシティブ属性 | |
---|---|---|---|---|---|---|
グループ | 年齢 | 性別 | 住所 | 職業 | 病気 | |
グループ A | * | 20代 | 女性 | 東京都 | * | ガン |
グループ A | * | 20代 | 女性 | 東京都 | * | ガン |
グループ B | * | 20代 | 女性 | 埼玉県 | * | 感染症 |
グループ B | * | 20代 | 女性 | 埼玉県 | * | 心血管疾患 |
グループ C | * | 20代 | 男性 | 千葉県 | * | 結核 |
グループ C | * | 20代 | 男性 | 千葉県 | * | 心血管疾患 |
グループ C | * | 20代 | 男性 | 千葉県 | * | 結核 |
グループ D | * | 10代 | 男性 | 埼玉県 | * | ガン |
グループ D | * | 10代 | 男性 | 埼玉県 | * | 心血管疾患 |
グループ D | * | 10代 | 男性 | 埼玉県 | * | 感染症 |
グループわけをすることで、このデータは年齢、性別、住所に置いて、2-匿名性 を持つということがわかります。
2-匿名性とは、2人までは絞れるが、そこから先は特定できないといった形になります。
簡単ですが、これがk-匿名性のモデルになります。
終わりに
今回のブログでは、主にk-匿名化の技法を紹介しました。
k-匿名化では、個人を特定されないために、kの値までしか絞れない形で一般化や抑制を行います。
この方法は、匿名化においてとても有効です。
もちろん前回のブログでも紹介したとおり、匿名化の先に二次利用があります。どのように二次利用をするかを定義する事と、データの特性、特質を把握し、効果的にk-匿名化をする事で個人を特定されにくく、かつ二次利用できる形に、データを匿名化できました。
しかし、これは完璧では、ありません。
なぜかというと、上記の例では、20代の女性で東京に住んでいる人は、病名がガンであるということが露呈してしまいます。
知られたくないセンシティブな情報が、わかってしまい、推定する事ができてしまいます。
今回、紹介したk-匿名化は、有用ではありますが、完璧ではありません。他の技法と合わせる事でより効果的に匿名化を実現できます。
次回は、他の技法を紹介したいと思います。