case01 ・ 仮名加工情報

食品オンライン通販の顧客・購買データを、実店舗の出店計画に使う

個人情報保護委員会事務局レポート「仮名加工情報・匿名加工情報 ―事例編―」事例1 を参考にした、仮想の事例(デモ)

データはすべて教材用の合成データです。

学ぶのは加工の手順ではなく、加工方針の決め方です

中心にあるのは「思考プロセス」

加工コードそのものではなく、

  1. データを 見て 性質を評価する目
  2. 利用目的から 必要な情報・粒度 を考える力
  3. Python での 具体的な加工方法
前提の確認
  • 登場する企業・データは すべて合成データ。実在の個人・企業とは無関係です。
  • 実際の個人データに対する 法令適合性を保証するものではありません。
  • 法域は 日本の個人情報保護法 を前提としています。
case01 仮名加工情報 | 仮名加工情報・匿名加工情報 事例再現デモ

検討・実装・結果の 3 層を、7 つのステップでたどります

1 全体概要2 データ概要理解3 データ詳細理解4 加工設計5 加工仕様6 実装7 結果確認
層 媒体 やること
① 検討(1〜5) HTML サイト 事例を理解し、なぜその加工にするのかを設計する
② 実装(6) Google Colaboratory 設計にもとづいて 加工処理を実行する
③ 結果(7) HTML サイト 加工前後を比べ、目的の分析が成立するか確認する

このスライドは①〜③を通しでたどります。実際に手を動かすところは Colab へ。

case01 仮名加工情報 | 仮名加工情報・匿名加工情報 事例再現デモ

1/7 ・ 事例概要

どんな会社が、どんなデータを持っていて、何のために加工したいのか。
ここが分かると、以降の加工判断の理由がつかめます。

case01 仮名加工情報 | 仮名加工情報・匿名加工情報 事例再現デモ

従来の利用目的に含まれない分析をするために、利用目的を変更します

食品のオンライン通販事業者A が、首都圏で 実店舗の出店 を計画している。

やりたいこと

「ある地域で、どんな顧客層(年代・性別)が、どんな商品に関心を持つか」を分析して、出店計画に活かしたい。

  • これは従来の利用目的(商品提供・広告)に 含まれない。
  • そこで顧客・購買データを 仮名加工情報 に加工し、利用目的を変更する。

加工後の利用目的: 各地域の顧客の興味・ニーズの傾向を分析し、実店舗事業の計画を行う

case01 仮名加工情報 | 仮名加工情報・匿名加工情報 事例再現デモ

仮名加工情報とは、他の情報と照合しない限り個人を識別できない情報です

他の情報と照合しない限り、特定の個人を識別できないように加工した情報。
氏名などは消すが、個人単位の分析は残せるのが特徴。

仮名加工情報 匿名加工情報
考え方 照合すれば元をたどれる余地は残る 特定も復元もできないよう、より厳しく加工
得られるもの 個人単位の分析ができる 集団としての分析が中心
主な想定 社内での分析利用 第三者提供
本デモ case01 case02
case01 仮名加工情報 | 仮名加工情報・匿名加工情報 事例再現デモ

個人単位で購買傾向を追いたいので、統計情報でも匿名加工情報でも足りません

選択肢と却下理由

  • 統計情報にする → 集団傾向しか見えず、分析手法も限られる
  • 匿名加工情報にする → 加工が強く、個人単位の購買傾向が追えない

本件の要求

「同じ人が、いつ・どこで・何を買ったか」を 個人単位でまとめて見たい。

→ だから 仮名加工情報 を選ぶ。

設計の出発点

「どう加工するか」より先に、利用目的が何を要求しているかを決める。加工方針はそこから逆算する。

case01 仮名加工情報 | 仮名加工情報・匿名加工情報 事例再現デモ

必要な粒度を先に決めると、どこまで粗くしてよいかが決まります

項目 必要な粒度 なぜ
居住地域 市区町村単位 実店舗の商圏を判定するため。丁目・番地は不要
年齢 10歳区切りの年代 顧客層の傾向把握には年代で十分。生年月日は不要
購入年月日・購入品目 できる限り加工しない 商品関心・季節性の分析に直結する
ここが効いてくる

「必要粒度」を先に言語化しておくと、後の加工設計で どこまで粗くしてよいか が機械的に決まります。

case01 仮名加工情報 | 仮名加工情報・匿名加工情報 事例再現デモ

元データは、個人属性 9 項目と履歴情報 6 項目でできています

個人属性情報

  • 会員ID
  • 氏名
  • 生年月日
  • 性別
  • 郵便番号
  • 住所
  • 携帯電話番号
  • 電子メールアドレス
  • クレジットカード番号

履歴情報

  • Cookie ID
  • ウェブページのアクセス履歴
  • 購入年月日
  • 購入品目
  • 購入数量
  • 購入金額

次のステップで、これらを 3つのテーブル に整理します。

case01 仮名加工情報 | 仮名加工情報・匿名加工情報 事例再現デモ

2/7 ・ データを見る

加工する「前」のデータが、どんな表と項目でできているか。
まず全体像をつかみます。

case01 仮名加工情報 | 仮名加工情報・匿名加工情報 事例再現デモ

3 つのテーブルは会員IDでつながっており、ここをどう扱うかが設計の要になります

テーブル 役割 主キー 1レコード 想定件数
customers 顧客の属性情報 会員ID 顧客1人 800
purchases 購買トランザクション 購買ID 購入1件 約4,800
web_access 自社サイト閲覧ログ アクセスID アクセス1件 約8,000
構造のポイント

customers 1 : N purchases / customers 1 : N web_access。
結合キーは会員ID。ここをどう扱うかが、この事例の設計の要になります。

case01 仮名加工情報 | 仮名加工情報・匿名加工情報 事例再現デモ

customers(顧客マスタ・9項目)

No. 項目 データ型 形式・値域 キー 値の例
1 会員ID 文字列 M + 6桁連番 PK M000001
2 氏名 文字列 姓 名 佐藤 翔太
3 生年月日 日付 YYYY-MM-DD 1985-04-12
4 性別 文字列 {男性, 女性} 女性
5 郵便番号 文字列 NNN-NNNN 154-0000
6 住所 文字列 都道府県+市区町村+丁目番地 東京都世田谷区3丁目12-5
7 携帯電話番号 文字列 0N0-NNNN-NNNN 090-1234-5678
8 電子メールアドレス 文字列 email m000001@example.com
9 クレジットカード番号 文字列 16桁 4000123456789012
case01 仮名加工情報 | 仮名加工情報・匿名加工情報 事例再現デモ

purchases / web_access

purchases(購買履歴)

No. 項目 形式・値域 キー
1 購買ID P + 7桁連番 PK
2 会員ID customers 参照 FK
3 購入年月日 YYYY-MM-DD
4 購入品目 商品カテゴリ10種
5 購入数量 1〜5
6 購入金額 円(>0)

web_access(アクセス履歴)

No. 項目 形式・値域 キー
1 アクセスID A + 8桁連番 PK
2 会員ID customers 参照 FK
3 Cookie ID 16桁hex
4 アクセス日時 ISO8601
5 閲覧カテゴリ 商品カテゴリ10種
case01 仮名加工情報 | 仮名加工情報・匿名加工情報 事例再現デモ

加工前のデータは、これだけ生々しい

customers(先頭3行・すべて合成データ)

会員ID 氏名 生年月日 性別 郵便番号 住所 携帯電話番号 電子メールアドレス クレジットカード番号
M000001 松本 直樹 1991-11-09 男性 192-0000 東京都八王子市3丁目7-18 080-8643-3829 m000001@example.com 4321469208498442
M000002 高橋 愛 1977-12-19 女性 166-0000 東京都杉並区3丁目5-1 080-2396-9995 m000002@example.com 4484765306802001
M000003 中村 直樹 1981-06-10 男性 192-0000 東京都八王子市5丁目1-3 080-4489-2757 m000003@example.com 4242652328741924

この中に、そのままでは個人が特定できる/連絡できてしまう項目(氏名・住所・電話・メール)と、
単体では特定できないが不正利用で財産的被害のおそれがある項目(カード番号)が混在しています。

case01 仮名加工情報 | 仮名加工情報・匿名加工情報 事例再現デモ

3/7 ・ 情報特性の評価

加工方針を決める前の下ごしらえ。
ここは 順序が大事 です。

case01 仮名加工情報 | 仮名加工情報・匿名加工情報 事例再現デモ

規則で必須の項目を先に確定してから、残りを情報特性で判断します

① まず 委員会規則(施行規則第31条)

「必ず削除・置換する項目」を確定する。
情報特性に関わらず必須。分析に使いたくても外せない。

② その上で 情報特性

自主的に(予防的に)どこまで加工するかを、分析上の必要性と合わせて判断する。

「危なそうな順に消していく」ではなく、法令で決まっている必須項目を先に固定し、残りを設計判断で詰める。
この順序にすると、加工の根拠が「規則で必須」か「自主的」かをいつでも説明できます。

case01 仮名加工情報 | 仮名加工情報・匿名加工情報 事例再現デモ

第31条に当たる記述は、情報特性に関わらず削除・置換が必須です

次のいずれかに当たる記述等は、情報特性に関わらず削除(置換)が必須。

号 内容 本事例での該当
第1号 特定の個人を識別できる記述等 氏名 / 電子メールアドレス(識別できる場合)
第2号 個人識別符号(マイナンバー、生体データ等) 該当なし
第3号 不正に利用されると財産的被害が生じるおそれのある記述等 クレジットカード番号

まずここを満たすことが出発点になります。

case01 仮名加工情報 | 仮名加工情報・匿名加工情報 事例再現デモ

カード番号が必須なのは、識別できるからではなく財産的被害のおそれがあるためです

「特定できるから必須」ではない

クレジットカード番号は、それだけでは「誰か」は分かりません(単体での識別性は低い)。
しかし 不正に利用されると財産的被害が生じるおそれ があるため、第31条第3号により削除が必須です。

  • 「識別できるから削除」 ✗
  • 「財産的被害のおそれだから削除」 ✓

必須になる理由が、情報特性(識別性)とは別の軸にある点に注意。
だから「① 規則 → ② 情報特性」の順で見る必要があります。

case01 仮名加工情報 | 仮名加工情報・匿名加工情報 事例再現デモ

規則で必須の項目を除いたら、残りを 5 つの観点から見ていきます

観点 意味 例
直接識別子 単体で個人を特定できる 氏名
準識別子 単体では特定できないが、組合せで特定につながりうる 生年月日+性別+住所
本人到達性 その情報で本人に連絡・到達できる(単体では「誰か」まで分からないことが多い) メール・電話
結合キー性 テーブル・履歴の結合に必要 会員ID
機微度 特定された場合のプライバシー影響の大きさ(加工設計の補助指標) ―

情報特性の見立ては、①の当てはめ(例: そのメールアドレスは氏名等を含み識別できるか=第1号)の判断にも使います。

case01 仮名加工情報 | 仮名加工情報・匿名加工情報 事例再現デモ

チェック結果(1/2)— 規則で必須になる項目

項目 第31条の該当 情報特性の分類 単体での識別性 結合キー 機微度
氏名 第1号 直接識別子 高 ― 中
電子メールアドレス 第1号(識別できる場合) 本人到達性 中(氏名等を含めば高) ― 中
クレジットカード番号 第3号 財産的被害のおそれ 低 ― 高
読みどころ

カード番号は 識別性「低」なのに必須。表を眺めると、識別性の高さと必須かどうかが一致しないことが一目で分かります。

case01 仮名加工情報 | 仮名加工情報・匿名加工情報 事例再現デモ

チェック結果(2/2)— 情報特性から判断する項目

項目 第31条の該当 情報特性の分類 単体での識別性 結合キー 機微度
会員ID ― 内部管理識別子 低 ○ 低
生年月日 ― 準識別子 低(組合せで高) ― 中
性別 ― 準識別子 低 ― 低
郵便番号 ― 準識別子 低 ― 低
住所 ― 準識別子 低(組合せで高) ― 中
携帯電話番号 ― 本人到達性 低 ― 中
Cookie ID ―(個人識別符号ではない) オンライン識別子 低 ○ 中
購入年月日・品目・数量・金額 ― 行動・履歴 低 ― 低
アクセス日時・閲覧カテゴリ ― 行動・履歴 低 ― 低

これらは 自主的に(予防的に)加工方針を判断する対象。次のステップで「分析にどれだけ必要か」と突き合わせます。

case01 仮名加工情報 | 仮名加工情報・匿名加工情報 事例再現デモ

4/7 ・ 加工の設計

各項目を「削除する/置き換える/粗くする/そのまま残す」のどれにするか。
そして、その理由。

case01 仮名加工情報 | 仮名加工情報・匿名加工情報 事例再現デモ

加工の選択肢は 4 つしかなく、項目ごとにどれかを選びます

置換
意味のない番号などに置き換える

一般化
必要な粗さまで粗くする

削除
列ごと落とす

加工なし
分析に必要なのでそのまま

判断軸

識別性 × 機微度
× 利用目的上の必要性
× 必要粒度

考え方はシンプル

分析に要らず特定につながる項目は削る。特定はしたくないが分析には要る項目は、必要な粗さまで一般化して残す。個人単位の履歴は整理番号でつなぐ。

case01 仮名加工情報 | 仮名加工情報・匿名加工情報 事例再現デモ

分析に要らず特定につながる項目は削り、要る項目は必要な粗さまで粗くします

置換
会員ID→整理番号
一般化
生年月日→年代 住所→市区町村
削除
氏名郵便番号携帯電話番号電子メールアドレスクレジットカード番号Cookie ID→***
加工なし
性別購入年月日/品目/数量/金額アクセス履歴

削除した項目は加工後データに残りません。「加工なし」は前後で同じ=分析に必要なので手を付けません。

case01 仮名加工情報 | 仮名加工情報・匿名加工情報 事例再現デモ

会員IDを消すと個人単位の分析ができないので、意味のない番号に置き換えます

整理番号は会員IDを振り直しただけ。しかも対応表を持っていれば元に戻せるのでは?

ポイントは3つです。

  1. 完全には消せない — 出店計画の分析には「同じ人の購買履歴をまとめて見る」ことが必要。識別子を全部消すと3テーブルをつなげず、個人単位の分析ができない。だから 消すのではなく、意味のない通し番号に置き換えて履歴だけをつなぐ。
  2. 対応表を切り離す — 会員ID ↔ 整理番号の対応表は、加工後データとは別に安全管理する(削除情報等の安全管理措置)。加工後データ単体からは元の人物へたどれない。
  3. 照合が禁止されている — 加工後データを作成元の個人情報と突き合わせて本人を特定する行為は、識別行為の禁止(識別禁止義務) で禁じられている。
① 履歴はつなぐ / ② 対応表は分離 / ③ 照合は禁止 —— この3つがそろって、はじめて置換に意味が生まれます。
case01 仮名加工情報 | 仮名加工情報・匿名加工情報 事例再現デモ

項目別 評価 → 方針(1/2)

項目 識別性 機微度 分析上の必要性 必要粒度 加工方針 根拠 理由
会員ID 低(単体) 低 結合に必要 ― 整理番号へ置換 自主的 個人単位の履歴をつなぐため置換。作成元との照合=識別禁止義務のリスク低減
氏名 高(直接識別子) 中 不要 ― 削除 規則で必須 特定の個人を識別できる記述
生年月日 準(組合せで高) 中 必要 10歳区切り 年代へ一般化 自主的 詳細日付は不要。準識別子の組合せリスクを下げる予防的な一般化
性別 準(低) 低 必要 そのまま 加工しない ― 生年月日・住所を加工済み
郵便番号 準(低) 低 不要 ― 削除 自主的 加工後の住所で代替できるため不要
住所 準(組合せで高) 中 必要 市区町村 市区町村へ一般化 自主的 準識別子リスク低減の予防的な一般化。商圏判定には市区町村で十分
case01 仮名加工情報 | 仮名加工情報・匿名加工情報 事例再現デモ

項目別 評価 → 方針(2/2)

項目 識別性 機微度 分析上の必要性 必要粒度 加工方針 根拠 理由
携帯電話番号 高(本人到達性) 中 不要 ― 削除 自主的 本人到達性・共用性を踏まえた予防的削除
電子メールアドレス 高(本人到達性) 中 不要 ― 削除 規則で必須 本人到達性・共用性。氏名等を含み識別できる場合は削除対象
クレジットカード番号 高 高 不要 ― 削除 規則で必須 不正利用で財産的被害のおそれ。分析に使いたくても削除が必須
Cookie ID 中(本人到達性) 中 不要 ― 削除 自主的 本人到達性。会員ID→整理番号を識別子に使うため不要
購入年月日・品目・数量・金額 低 低 必要 そのまま 加工しない ― 購買動向分析に必要
アクセス日時・閲覧カテゴリ 低 低 必要 そのまま 加工しない ― 閲覧→購入・反応分析に必要
case01 仮名加工情報 | 仮名加工情報・匿名加工情報 事例再現デモ

同じ削除でも、法令上必須のものと自主的なものがあります

加工の要否は ① 分析に必要か(設計判断)× ② 加工の根拠 で決まります。

規則で必須(法令)

施行規則第31条=仮名加工情報の作成基準。

  • カード番号は、たとえ分析に使いたくても第3号により削除が必須
  • 氏名など特定の個人を識別できる記述(第1号)も同様

自主的(予防的)

必須とまでは言い切れないが、識別リスクを下げるために行う加工。
解釈によっては「そこまで不要」ともいえるもの。

  • 例: 生年月日 → 年代の一般化。他の識別子を除いていれば必須とは限らないが、準識別子の組合せリスクを下げるために加工
どちらの根拠で加工したかを区別して記録しておくと、**後から説明・見直しができる**設計になります。
case01 仮名加工情報 | 仮名加工情報・匿名加工情報 事例再現デモ

5/7 ・ 加工仕様

設計の方針を、具体的な処理(どの列をどう変換するか)に落とし込みます。

case01 仮名加工情報 | 仮名加工情報・匿名加工情報 事例再現デモ

加工は、年代・住所・識別子の 3 か所に落とし込めます

1. 年代への一般化

基準日で年齢を算出し、一次情報(図表1-3)にならい「10代」「20代」…「70代」「80代以上」に区分(80歳以上は「80代以上」にまとめる)。
年齢 = 基準日の年 − 生年(基準日時点で算出)。

2. 住所の一般化

「都道府県 + 市区町村」まで残し、丁目・番地以降を削除。政令市は「◯◯市◯◯区」まで(例: 横浜市青葉区)。

3. 整理番号

会員IDと1対1で対応する整理番号(例: R000001)を付与し、顧客・購買・アクセスの3テーブルで同じ整理番号を使って個人単位の履歴結合を維持。元の会員IDは削除する。

case01 仮名加工情報 | 仮名加工情報・匿名加工情報 事例再現デモ

加工仕様一覧(列ごとの処理)

No. 元テーブル 元項目 加工 処理 加工後
1 customers 会員ID 置換 会員ID→整理番号の対応表を作り置換 整理番号
2 customers 氏名 削除 列削除 ―
3 customers 生年月日 一般化 基準日で年齢→10歳区切りの年代(80歳以上は「80代以上」) 年代
4 customers 性別 加工なし そのまま 性別
5 customers 郵便番号 削除 列削除 ―
6 customers 住所 一般化 市区町村まで抽出 市区町村
7 customers 携帯電話番号 削除 列削除 ―
8 customers 電子メールアドレス 削除 列削除 ―
9 customers クレジットカード番号 削除 列削除 ―
10 web_access Cookie ID 削除 列削除 ―
11 purchases / web_access 会員ID 置換 No.1 の対応表で整理番号へ 整理番号
12 purchases 購入年月日/品目/数量/金額 加工なし そのまま 同左
13 web_access アクセス日時/閲覧カテゴリ 加工なし そのまま 同左
case01 仮名加工情報 | 仮名加工情報・匿名加工情報 事例再現デモ

6/7 ・ 実装(Colab)

設計どおりに動くコードを、Google Colaboratory で実行します。

case01 仮名加工情報 | 仮名加工情報・匿名加工情報 事例再現デモ

Colab では加工を実行し、確認テストで設計どおりかを検証します

流れ

  1. 生成済みの合成データ(CSV)を取得
  2. 会員ID → 整理番号の対応表を作成
  3. 生年月日 → 年代、住所 → 市区町村に一般化
  4. 削除対象の列を落とす
  5. 3テーブルの会員IDを整理番号に置換
  6. 確認テスト(削除漏れ・件数・結合関係)
  7. 加工後データで分析を再現
ポイント
  • 乱数 seed と基準日が固定されているので、何度実行しても同じ結果になります。
  • 「動いた」で終わらせず、確認テストで設計どおりかを検証するところまでが1セット。

notebooks/case01_pseudonymized.ipynb

case01 仮名加工情報 | 仮名加工情報・匿名加工情報 事例再現デモ

7/7 ・ 結果確認

加工前後を比べ、目的の分析が成立するかを確かめます。

case01 仮名加工情報 | 仮名加工情報・匿名加工情報 事例再現デモ

加工後テーブル定義:customers は 9項目 → 4項目

No. 項目 データ型 形式・値域 キー 値の例
1 整理番号 文字列 R + 6桁 PK R000001
2 性別 文字列 {男性, 女性} 女性
3 年代 文字列 {10代,…,70代,80代以上} 40代
4 市区町村 文字列 都道府県+市区町村 東京都世田谷区

直接識別子・本人到達性のある項目は全削除。
履歴情報は整理番号で個人単位の結合を維持しつつ、分析に必要な項目をそのまま保持します。

case01 仮名加工情報 | 仮名加工情報・匿名加工情報 事例再現デモ

加工前後の対応

加工前 加工後 処理
会員ID 整理番号 置換
氏名 ― 削除
生年月日 年代 一般化
性別 性別 加工なし
郵便番号 ― 削除
住所 市区町村 一般化
携帯電話番号 / 電子メールアドレス / クレジットカード番号 / Cookie ID ― 削除
購入年月日/品目/数量/金額 / アクセス日時/閲覧カテゴリ 同左 加工なし
case01 仮名加工情報 | 仮名加工情報・匿名加工情報 事例再現デモ

削れたかだけでなく、残すべきものが残ったかも確認します

  • ✅ 削除対象カラムが存在しない
    (氏名・郵便番号・住所・携帯・メール・カード番号・会員ID・Cookie ID)
  • ✅ 必要な加工後カラムが存在する(整理番号・性別・年代・市区町村)
  • ✅ レコード数が意図せず変化していない
    (customers 800 / purchases 4,789 / web_access 7,959)
  • ✅ 同一人物の履歴関係が整理番号で維持されている
    (purchases・web_access の整理番号 ⊆ customers)
「削れたか」だけでなく「**残すべきものが残ったか**」も必ず確認します。
case01 仮名加工情報 | 仮名加工情報・匿名加工情報 事例再現デモ

加工後も、地域と年代で購買傾向を読み取れます

年代別 平均購入金額(円)

年代 平均
20代 3,064
40代 3,662
70代 4,115

年代が上がるほど高い傾向

市区町村別 平均購入金額(上位3・円)

市区町村 平均
東京都大田区 4,401
東京都八王子市 4,315
東京都世田谷区 3,870

年代別 購入品目トップ3

  • 20代: 飲料 / 惣菜 / 菓子
  • 70代: 米・穀物 / 精肉 / 野菜

→ 市区町村単位・年代単位で傾向を読み取れる=出店計画の検討という利用目的が、加工後も達成できる。

case01 仮名加工情報 | 仮名加工情報・匿名加工情報 事例再現デモ

加工の方針は、識別性・機微度・必要性・必要粒度の掛け合わせで決まります

  1. 削除・置換・一般化・維持 を、項目ごとに
    「識別性 × 機微度 × 利用目的上の必要性 × 必要粒度」で判断する。

  2. 整理番号で「誰か」は分からなくても「同じ人の履歴」はたどれる状態を作る。
    ただし ① 対応表の分離 / ② 識別行為の禁止 とセットで意味を持つ。

  3. 加工後も、地域 × 年代 × 性別の傾向分析(出店計画の目的)は成立する。

順序を忘れずに

① 規則で必須の項目を確定 → ② 情報特性から自主的に判断。 この順で考えると、加工の根拠を常に説明できます。

case01 仮名加工情報 | 仮名加工情報・匿名加工情報 事例再現デモ

次は case02 ・ 匿名加工情報

同じ「思考プロセス」を、より厳しい基準の加工で。

出典: 個人情報保護委員会事務局レポート「仮名加工情報・匿名加工情報 ―事例編―」1.1 事例1
サイト: https://gghatano.github.io/pets-seminar-01/
ライセンス: 教材コンテンツ CC BY 4.0 / コード MIT