reidentify — R package

匿名化したデータは、
本当に匿名でしょうか

個人情報を消したデータを、外部に提供したり公開したりする場面があります。 問題は「加工の手順を守ったこと」と「個人が特定されないこと」が、同じではないという点です。 このツールは、加工済みデータに対して実際に特定を試みて、どれだけ成功するかを数値で示します

なぜ「手順どおり」では足りないのか

氏名や会員番号を消せば個人は分からなくなる、と考えたくなります。 しかし残った情報の組み合わせが、それ自体で個人を指し示してしまうことが知られています。

いずれも「規則に違反した加工」で起きたことではありません。 加工の手順ではなく、残ったデータの性質が結果を決めます。 だからこそ、加工後のデータそのものを対象に測る必要があります。

これは外部の研究に限った話ではありません。同じことを、このツール自身で測ってみました。

年齢を 10 歳刻みに、住所を都道府県単位に粗くした 200 人分のデータ

年齢・地域・性別だけを手がかりに特定できた人の割合
45.5%
当てずっぽうに当てた場合(比較の基準)
0.5%
「30代」「東京都」のように値を粗くする加工は、実務でごく一般的に行われます。 それでも残った 3 項目だけで、7 割の人が 3 人以下にまで絞り込まれ17% の人は他の誰とも重ならない一人でした。 当てずっぽうの 91 倍です。 出典: 本リポジトリでの実測(Issue #20 / #40。スクリプトと実行ログ: docs/investigation/site-figures.R)。200 人分の合成データ。 年齢は 10 歳刻み、住所は市区町村から都道府県へ粗くしたもの。 絞り込み後の候補数は中央値 3 人、最大 6 人。

このツールがすること

考え方は単純です。攻撃する側の立場に立って、実際にやってみる。

元のデータと加工後のデータを突き合わせ、「加工後のこの 1 件は、元のどの人物か」を 様々な手がかり(数値の近さ、文字列の似かた、行動の分布の形など)から推定させます。 答えは分かっているので、どれだけ当たったかがそのまま危険度になります。

出てくるのは、たとえばこういう情報です。

測り方を間違えると、危険なデータが「安全」に見える

このツール自体の検証を進めた際に、示唆的な問題が見つかりました。 ある手法で、「何割の人が特定されたか」の割り算の分母が、対象の人数ではなくなっていたのです。

20 人を評価したときに使われていた分母

評価の対象になった人数
20
「試行回数」として報告された数
200
候補が同点で並んだとき、1 人の対象に対して複数の候補をそのまま数え上げてしまっていた。 対象は 20 人なのに分母が 200 になり、報告された割合は 「特定された人の割合」ではなくなっていた。 同点が多いほど分母が膨らむため、判断が難しいデータほど数値が小さく出る—— 安全に見える方向に外れる。 出典: 本リポジトリでの実測(Issue #25)。同点を意図的に作った検証データで、対象 20 人に対し候補 200 件が出力された。

もう一つ。同じデータ・同じ手法にもかかわらず、 データの並び順を変えるだけで結果が大きく振れる状態でした。

並び順を 200 通り変えたときの「特定された割合」

平均 5.8%
0%
4%
8%
12%
16%
同一のデータ・同一の手法で、行の並び順だけを変えて 200 回測定した結果。 帯が観測された範囲(最小 2.0%、最大 14.0%)、点が平均。平均の約 ±130% の幅で動いた。 報告された 1 つの数字が、たまたま低い側だった可能性を否定できない。 出典: 本リポジトリでの実測(Issue #3)。修正後はこの振れ幅が解消されている。

そして、これは道具の不具合だけの話ではありません。 道具が正しくても、測り方の選択を誤れば同じことが起きます。 先ほどの「10 歳刻み・都道府県単位」のデータを、もう一度測ってみます。

同じデータ・同じ攻撃者で、測り方だけを変えたとき

「30代」に入りうる人を数える(この加工に合った測り方)
45.5%
「37」と「30代」の文字の違いを測る(合っていない測り方)
11.7%
同じデータ、同じ手がかり、同じ攻撃者です。違うのは測り方だけで、 報告される危険度は 実際の約 4 分の 1 になりました。 しかも低いほうの数値は、エラーも警告もなく、もっともらしい形で出てきます。 集合データ(買い物かごや訪問先など)では差はさらに大きく、 同一データで 7.0% と 94.5%、13 倍以上の開きが出ました。 出典: 本リポジトリでの実測(Issue #40 / #18。スクリプトと実行ログ: docs/investigation/site-figures.R)。 現在は、この取り違えが起きる組み合わせを検出して処理を止めるようにしています。 ただし「千代田区 → 東京都」のような置き換えは構造上検出できず、 止められません。

ここが本質的な点です。 安全性の評価は、低い数字が出たときにこそ受け入れられやすく、疑われにくい。 「特定されませんでした」という結果は、本当に安全な場合測り方が壊れている場合の区別がつきません。

だから評価ツールには、当てずっぽうとの比較や、測定のばらつきの提示といった 「壊れていたら気づけるしくみ」が要ります。本プロジェクトはそこを重視して整備を進めています。

現在の状況

このパッケージは 2019 年に作られたもので、まず評価の土台を作り直し、 その上に測り方を積み増してきました。

項目状況
自動テスト2,936 件(全て成功)
R の標準チェックエラー・警告・注意ともに 0
対応を終えた課題45 件(2026-08-01 時点)

この間に、扱える加工の種類も増えました。

正直にお伝えしたいこと

これは研究・検討用のツールであり、法令適合や安全性を保証するものではありません。 個人情報保護法上の「匿名加工情報」の基準を満たすかどうかの判断には使えません。

得られる数値は「この手法では、この条件で、これだけ特定できた」という一つの観測であって、 安全性の証明ではありません。特定されなかったことは、安全であることを意味しません。 ここで試していない手法で破られる可能性は、このツールでは測れないからです。

上で見たとおり、測り方が対象に合っていなければ数値は小さく出ます。 低い数値が出たときこそ、手法の選択が正しかったかを疑ってください。 機械学習を使ったより強い突き合わせや、移動の軌跡そのものを狙う攻撃には、 まだ対応していません。

もっと詳しく