(57)【特許請求の範囲】
【請求項１】
属性毎の属性値からなる個人情報を１件以上格納する個人情報格納手段と、
属性を１つ選択し、該選択した属性に出現する属性値毎に該属性値を持つ該入力個人情報の件数をカウントする頻度取得手段を用いて、該属性の各々に対して該入力個人情報に出現する各属性値の上位概念をその曖昧度によって木構造で表現する一般化階層木を自動構成する一般化階層木自動生成手段と、
該一般化階層木自動生成手段を用いて該属性の各々に対して生成された一般化階層木を用いて該入力個人情報を再符号化する手段と、を有する
ことを特徴とする個人情報匿名化装置。
【請求項２】
請求項１に記載の個人情報匿名化装置であって、
該再符号化手段が、１件の個人情報の１つの属性値を該自動生成された一般化階層木を用いて曖昧化する際に損失する情報量を計量する損失情報量計量手段を備える
ことを特徴とする個人情報匿名化装置。
【請求項３】
請求項２に記載の個人情報匿名化装置であって、
該損失情報量計量手段が、該自動生成された一般化階層木の各節点の出現頻度を、葉であれば該葉に示される属性値が出現する個人情報の件数としてカウントし、内部節点であれば外節点の子孫でありかつ葉である節点の頻度の総和としてカウントする節点頻度取得手段を備え、１件の該入力個人情報の各属性値を該属性値に対応する節点ａをその祖先である節点ｂに曖昧化するときの損失情報量を−ｌｏｇ（ａの頻度／ｂの頻度）で計量する
ことを特徴とする個人情報匿名化装置。
【請求項４】
請求項３に記載の個人情報匿名化装置であって、
該再符号化手段を用いて生成された各匿名情報の属性値それぞれに対し、該節点頻度取得手段を用いて取得した節点頻度を利用して該属性値が該一般化階層木の節点ａであるとき該属性値の子孫である１つ以上の葉に対して、該属性値を該葉ｃの属性値にｃの頻度／ａの頻度の確率で置き換えたものを出力する手段を備える
ことを特徴とする個人情報匿名化装置。
【請求項５】
請求項１または２に記載の個人情報匿名化装置であって、
該一般化階層木の各節点の出現頻度を、葉であれば該葉に示される属性値が出現する該入力個人情報の件数としてカウントし、内部節点であれば外節点の子孫でかつ葉である節点の頻度の総和としてカウントする節点頻度取得手段を用いて、該再符号化手段を用いて生成された各匿名情報の属性値それぞれに対し、該属性値が該一般化階層木の節点ａであるとき該属性値の子孫である１つ以上の葉に対して、該属性値を該葉ｃの属性値にｃの頻度／ａの頻度の確率で置き換えたものを出力する手段を備える
ことを特徴とする個人情報匿名化装置。
【請求項６】
請求項１から５のいずれか一に記載の個人情報匿名化装置であって、
該一般化階層木自動生成手段が、該頻度取得手段によって取得した頻度を用いて、Ｈｕｆｆｍａｎ符号木を生成することで達成する
ことを特徴とする個人情報匿名化装置。
【請求項７】
請求項１から５のいずれか一に記載の個人情報匿名化装置であって、
該一般化階層木自動生成手段が、該頻度取得手段によって取得した頻度を用いてＳｈａｎｎｏｎ−Ｆａｎｏ符号木を生成することで達成する
ことを特徴とする個人情報匿名化装置
【請求項８】
請求項１から５のいずれか一に記載の個人情報匿名化装置であって、
該一般化階層木自動生成手段が、該頻度取得手段によって取得した頻度と該属性の属性値に予め定義される順序情報を用いて、Ｈｕ−Ｔｕｃｋｅｒ符号木を生成することで達成する
ことを特徴とする個人情報匿名化装置。
【請求項９】
請求項１から５のいずれか一に記載の個人情報匿名化装置であって、
該自動構成した一般化階層木を記憶する手段を有する
ことを特徴とする個人情報匿名化装置。
【請求項１０】
属性毎の属性値からなる１件以上の個人情報と、該属性の各々に対して該１件以上の個人情報に出現する各属性値の上位概念をその曖昧度によって木構造で表現する一般化階層木を入力とし、
１件の個人情報の１つの属性値を該自動生成された一般化階層木を用いて曖昧化する際に損失する情報量を計量する損失情報量計量手段と、
該損失情報量計量手段と該一般化階層木を用いて、該入力個人情報の各属性値を該属性値の示す節点の祖先である節点に曖昧化することで該入力個人情報を再符号化する手段と、を有する
ことを特徴とする個人情報匿名化装置。
【請求項１１】
属性の各々に対して属性値の上位概念をその曖昧度によって木構造で表現する一般化階層木を記憶する一般化階層木と、
該一般化階層木を用いて１件以上の個人情報が匿名化された匿名情報と、
各属性の属性値毎に該属性値が出現する該個人情報の件数と、を入力とし、
該一般化階層木の各節点の出現頻度を、葉であれば該葉に示される属性値が出現する該元の個人情報の件数としてカウントし、
内部節点であれば外節点の子孫でかつ葉である節点の頻度の総和としてカウントする節点頻度取得手段を用いて、
該入力の各匿名情報の該各属性の属性値それぞれに対し、該属性値が該一般化階層木の節点ａであるとき該属性値の子孫である１つ以上の葉に対して、該属性値を該葉ｃの属性値にｃの頻度／ａの頻度の確率で置き換えたものを出力する
ことを特徴とする個人情報匿名化装置。
【請求項１２】
請求項１から５および請求項９に記載の個人情報匿名化装置であって、
属性の一般化階層木の節点の一部を定義したユーザ定義階層木を格納するユーザ定義階層木格納手段と、該ユーザ定義階層木と該頻度取得手段によって取得した頻度とを用いて一般化階層木を自動生成するユーザ定義階層木に基づく一般化階層木自動生成手段を備える
ことを特徴とする個人情報匿名化装置
【請求項１３】
請求項１２に記載の個人情報匿名化装置であって、
該ユーザ定義階層木に基づく一般化階層木自動生成手段が、該ユーザ定義階層木と該頻度取得手段によって取得した頻度を用いて、Ｈｕｆｆｍａｎ符号木を生成することで達成する
ことを特徴とする個人情報匿名化装置。
【請求項１４】
請求項１２に記載の個人情報匿名化装置であって、
該ユーザ定義階層木に基づく一般化階層木自動生成手段が、該ユーザ定義階層木と該頻度取得手段によって取得した頻度を用いてＳｈａｎｎｏｎ−Ｆａｎｏ符号木を生成することで達成する
ことを特徴とする個人情報匿名化装置
【請求項１５】
請求項１２に記載の個人情報匿名化装置であって、
該ユーザ定義階層木に基づく一般化階層木自動生成手段が、該ユーザ定義階層木と該頻度取得手段によって取得した頻度と該属性の属性値に予め定義される順序情報を用いて、Ｈｕ−Ｔｕｃｋｅｒ符号木を生成することで達成する
ことを特徴とする個人情報匿名化装置。
【請求項１６】
請求項１２に記載の個人情報匿名化装置であって、
該ユーザ定義階層木に基づく一般化階層木生成手段は、該ユーザ定義階層木を構成する節点のうち祖先と子孫の関係にない２つ以上の節点において、各節点の子孫が重複しないことをチェックする
ことを特徴とする個人情報匿名化装置。
【請求項１７】
請求項１２に記載の個人情報匿名化装置であって、
該ユーザ定義階層木の節点が、該節点の全ての子のラベルを列挙したラベルを持つ
ことを特徴とする個人情報匿名化装置。
【請求項１８】
請求項１２に記載の個人情報匿名化装置であって、
該ユーザ定義階層木が、子となりうる節点が自明でない抽象的な名称のラベルを持つ節点と、該抽象的な名称のラベルを持つ節点を親とする節点から構成される
ことを特徴とする個人情報匿名化装置。
【請求項１９】
請求項１２に記載の個人情報匿名化装置であって、
該ユーザ定義階層木の節点が、該節点の子孫となる属性値の範囲を表すラベルを持ち、該範囲は該節点と祖先または子孫の関係にない節点の範囲と重複しない
ことを特徴とする個人情報匿名化装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、個人情報の匿名化に関するものである。
【背景技術】
【０００２】
個人にまつわる膨大なデータの集積化が進む昨今、個人情報を扱う企業にとってはプライバシへの配慮が必要不可欠なものになっている。個人情報取り扱い事業者は、少なくとも個人情報の保護に関する法律（以下、保護法）や関係法令の遵守が必須となっている。保護法は、個人情報の収集や利用等に対して、管理対応を義務付けており、さらにその具体的な措置を各省庁のガイドラインが規定している。【０００３】
これらのガイドラインが規定する管理措置の１つに個人情報の匿名化がある。例えば、厚生労働省は医療に関する個人情報の第三者提供、学会発表、医療事故報告等において、特段の必要がない限りはこれを匿名化することを求めている。また、経済産業省でも個人情報の匿名化を第三者提供時の望ましい措置として挙げている。【０００４】
最も単純な個人情報匿名化の処理は、個人を識別可能な情報を当該個人情報から取り除くこと、または曖昧にすることである。前者の例としては、氏名や住所を取り除く処理が、後者の例としては住所を都道府県単位に変換する、年齢を１０歳刻みに変換するなどの処理が該当する。以降、曖昧化対象をその度合いに応じて木構造で表現したものを一般化階層木と呼ぶ。【０００５】
しかし、上述の匿名化処理を行っても、個人に関する複数の属性を組み合わせることで個人を識別できてしまう場合がある。例えば、都道府県単位の住所と１０歳刻みの年齢でも極稀な組み合わせであれば個人を特定できる。このように、匿名化では、より確実に識別可能性を除去することが望まれる。【０００６】
識別可能性を除去するための技術として、しきい値を設定し、個人情報データに含まれる任意の属性値の組み合わせがデータ中にしきい値以上存在することを保証した匿名データを生成する匿名化技術がある。本発明もこの種の匿名化技術に属する。この種の匿名化技術は、非特許文献１に記載されている。【０００７】
非特許文献１には、一般化階層木を用いて個人情報データ中の属性値を曖昧にすることで、開示したデータ中に出現する任意の属性値の組み合わせが少なくともしきい値件数出現することを保証することが記載されている。
【先行技術文献】
【非特許文献】
【０００８】
【非特許文献１】Ｋ．  ＬｅＦｅｖｒｅ，  Ｄ．  Ｊ．  ＤｅＷｉｔｔ，  ａｎｄ  Ｒ．  Ｒａｍａｋｒｉｓｈｎａｎ，  “Ｉｎｃｏｇｎｉｔｏ：  Ｅｆｆｉｃｉｅｎｔ  Ｆｕｌｌ−Ｄｏｍａｉｎ  Ｋ−Ａｎｏｎｙｍｉｔｙ，”  ２００５  ＡＣＭ  ＳＩＧＭＯＤ  Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｃｏｎｆ．  Ｍａｎａｇｅｍｅｎｔ  ｏｆ  Ｄａｔａ，  ｐｐ．４９‐６０，  ２００５
【発明の概要】
【発明が解決しようとする課題】
【０００９】
非特許文献１の技術は、曖昧化の度合いを定義する一般化階層木を別途、属性毎に定義する必要がある。また、しきい値以上を達成する候補を全て出力するので、使用する匿名データを選択する必要があり、匿名データ間の有用性の優劣を決定する手段を自動化できない。
【課題を解決するための手段】
【００１０】
本発明はこのような事情を考慮してなされたもので、個人情報匿名化の運用コストを低減しつつ、適切に個人情報を保護することを提供する。【００１１】
一例として開示されるのは、属性毎の属性値からなる個人情報を１件以上入力する個人情報入力手段と、属性を１つ選択し、該選択した属性に出現する属性値毎に該属性値を持つ該入力個人情報の件数をカウントする頻度取得手段を用いて、該属性の各々に対して該入力個人情報に出現する各属性値の上位概念をその曖昧度によって木構造で表現する一般化階層木を自動構成する一般化階層木自動生成手段と、該一般化階層木自動生成手段を用いて該属性の各々に対して生成された一般化階層木を用いて該入力個人情報を再符号化する手段を有する個人情報匿名化装置である。これにより、上述の課題を解決できる。
【発明の効果】
【００１２】
自動化による運用コストの低減と適切な個人情報の保護を両立することが可能となる。
【図面の簡単な説明】
【００１３】
【図１】実施例１において、計算機の構成例を示す図である。
【図２】実施例１において、個人情報テーブルの一例を示す図である。
【図３】実施例１において、最小同値件数情報の一例を示す図である。
【図４】実施例１において、属性種別情報の一例を示す図である。
【図５（ａ）】実施例１において、一般化階層木テーブルの一例を示す図である。
【図５（ｂ）】実施例１において、一般化階層木テーブルの一例を示す図である。
【図５（ｃ）】実施例１において、一般化階層木テーブルの一例を示す図である。
【図６】実施例１において、一般化階層木テーブルの一例を示す図である。
【図７】実施例１において、匿名情報テーブルの一例を示す図である。
【図８】実施例１において、動作例を示す図である。
【図９】実施例１において、動作例を示す図である。
【図１０】実施例１において、動作例を示す図である。
【図１１】実施例１において、動作例を示す図である。
【図１２】実施例１において、動作例を示す図である。
【図１３】実施例２において、計算機の構成例を示す図である。
【図１４】実施例２において、発生情報テーブルの一例を示す図である。
【図１５】実施例２において、動作例を示す図である。
【図１６】実施例２において、動作例を示す図である。
【図１７】実施例３において、計算機の構成例を示す図である。
【図１８】実施例３において、ユーザ定義階層木テーブルの一例を示す図である。
【図１９（ａ）】実施例３において、ユーザ定義階層木とユーザ定義階層木に基づく一般化階層木の一例を示す図である。
【図１９（ｂ）】実施例３において、ユーザ定義階層木とユーザ定義階層木に基づく一般化階層木の一例を示す図である。
【図１９（ｃ）】実施例３において、ユーザ定義階層木とユーザ定義階層木に基づく一般化階層木の一例を示す図である。
【図２０】実施例３において、動作例を示す図である。
【図２１】実施例３において、動作例を示す図である。
【図２２】実施例３において、動作例を示す図である。
【図２３】実施例３において、動作例を示す図である。
【図２４（ａ）】実施例３において、動作例を示す図である。
【図２４（ｂ）】実施例３において、動作例を示す図である。
【図２４（ｃ）】実施例３において、動作例を示す図である。
【図２５】実施例３において、動作例を示す図である。
【発明を実施するための形態】
【００１４】
以下、本発明を実施するための形態を、図面を参照して詳細に説明する。
【００１５】
なお、以下で説明する３つの実施例は、主に電子的な形態の個人情報を保護する技術である。本実施形態における個人情報とは、個人に関する情報であって、氏名、生年月日、その他の情報などにより特定の個人を識別することができるものを示す。また、他の情報と容易に照合することができ、それにより特定の個人を識別することができるものも個人情報に含む。本実施形態において、個人情報の匿名化とは、情報主体を識別できないように当該個人情報を変換する処理をいう。また、再符号化とは個人のある属性を説明する属性値を、より曖昧な概念へと置き換えることを言う。
＜実施例１＞
図１を参照し、実施例１の技術を実現する装置の構成例を説明する。
【００１６】
図１は計算機上に装置を構成した例である。図１において、計算機１００は、例えばＰＣ（Ｐｅｒｓｏｎａｌ  Ｃｏｍｐｕｔｅｒ）やサーバ、ワークステーション等の任意の情報処理装置である。計算機１００はＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）１０１、メモリ１０２、ストレージ１０３、入力装置１０４、出力装置１０５、通信装置１０６等を有する。これらは全て、バスなどの内部通信線１０７により互いに接続されている。
【００１７】
ストレージ１０３は、例えばＣＤ−Ｒ（Ｃｏｍｐａｃｔ  Ｄｉｓｃ  Ｒｅｃｏｒｄａｂｌｅ）やＤＶＤ−ＲＡＭ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｋ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、シリコンディスク等の記憶メディア及び当該記憶メディアの駆動装置、ＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）等である。ストレージ１０３は、個人情報テーブル１３１、匿名情報テーブル１３２、最小同値件数情報１３３、属性種別情報１３４、プログラム１５１等を記憶する。個人情報テーブル１３１は、複数の個人に関する個人情報を格納する。本実施形態では、各個人情報は、複数の項目ごとの項目値からなる。匿名情報テーブル１３２は、個人情報テーブル１３１を本発明により匿名化した結果を格納する。最小同値件数情報１３３は、しきい値を格納する。属性種別情報１３４は、個人情報テーブル１３１が有する各属性の情報種別を格納する。プログラム１５１は、後述する機能を実現するためのものである。
【００１８】
入力装置１０４は例えばキーボード、マウス、スキャナ、マイク等である。出力装置１０５は、ディスプレイ、プリンタ、スピーカ等である。通信装置１０６は、例えば、ＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）ボード等であり、通信ネットワーク（図示略）と接続する。
【００１９】
ＣＰＵ１０１は、メモリ１０２上にプログラム１５１をロードし、実行することにより、一般化階層木自動生成部１２１と再符号化部１２２を実現する。なお、再符号化部１２２は必要に応じて内部処理として損失情報量計量部１２３を実現する。
【００２０】
一般化階層木自動生成部１２１は、個人情報テーブル１３１及び属性値種別情報１３４を入力とし、個人情報テーブル１３１の各属性から全ての属性値の頻度を取得し、取得した頻度情報と属性値種別情報１３４から取得した当該属性の種別情報からＨｕｆｆｍａｎ符号木またはＳｈａｎｎｏｎ−Ｆａｎｏ符号木またはＨｕ−Ｔｕｃｋｅｒ符号木を作成し、作成した木を一般化階層木として一般化階層木テーブル１３５に格納する。
【００２１】
再符号化部１２２は、個人情報テーブル１３１及び最小同値件数情報１３３及び一般化階層木テーブル１３５を入力とし、一般化階層木テーブル１３５から得られる各属性に対応する一般化階層木にしたがってその属性値を再符号化することで全てのレコードがテーブル上に存在する件数が最小同値件数情報１３３に格納された値よりも大きくなるようにし、この結果を匿名情報テーブル１３２に出力する。なお、さらに出力装置１０５に結果を出力してもよい。
【００２２】
損失情報量計量部１２３は属性値の再符号化によりデータの失う情報量を定量的に評価する部分であり、必要に応じて再符号化部１２２から呼び出される。
【００２３】
次に上述したテーブル等の詳細な例を説明する。
【００２４】
まず、図２を参照し、個人情報テーブル１３１の一例を説明する。
【００２５】
図２において、個人情報テーブル１３１は複数のレコードを有する。１つのレコードが１人の個人に関する情報を表す。各レコードは属性２０１、属性２０２、属性２０３の属性値のタプルとして表される。
【００２６】
図２で表される表の一行目は属性の名前を指す。属性２０１、属性２０２、属性２０３はそれぞれ個人の住所、年齢、出身国または出身地域、のうち任意の一つ以上を表す。
【００２７】
また上述の個人情報テーブル１３１内の情報は予め格納されているものとする。
【００２８】
なお、個人情報の項目は図２に示されるものに限られるわけではなく、任意でよい。また、個人の総数（レコード総数）も属性数も任意で良い。実施例１の計算機１００は、個人を特定可能な情報を匿名化するものである。個人を特定可能な情報とは必ずしも氏名等、直接的に個人を特定するものに限らない。例えば、性別、年齢、住所の組み合わせにより個人を特定できる場合がある。本実施形態は、システムの運用者が匿名化を行う属性を予め決定するものである。図２の例では、システムの運用者が住所、年齢、出身国または出身地域、の組み合わせが個人の特定につながると判断し、この３属性に対して匿名化を行う例である。すなわち、個人情報の属性全体が住所、年齢、出身国または出身地域、に限定されている必要はない。
【００２９】
次に図３を参照して最小同値件数情報１３３の一例を説明する。
【００３０】
図３の例は、最小同値件数３０１が５件であることを示している。この最小同値件数３０１は、同じ属性値タプルを持つレコードの数が最小同値件数３０１以上であれば、データを公開しても個人を特定することが困難であると見なせる値である。図３の例ではデータ中に出現する任意の属性値タプルが５件以上データ中に出現すれば開示しても安全であると見なすことを示す。
【００３１】
なお、最小同値件数３０１の値は５件に限定されるものではなく、任意で良い。
【００３２】
次に図４を参照して属性種別情報１３４の一例を説明する。
【００３３】
属性種別情報１３４は、匿名化を行う各属性の一般化階層木を構成する上で、構成方法を指定するためにその属性の持つ情報種別を規定するものである。図４の例の表１３４−ａでは、属性「住所」４０１の一般化階層木を文字列処理型で、属性「年齢」４０２の一般化階層木を順序保存型で、属性「出身国または出身地域」４０３の一般化階層木をその他で生成することを示している。表１３４−ｂのように、文字列処理型の属性に関してはその文字列処理のタイプを指定する。表１３４−ｂでは、属性「住所」４０４を前方一致型で処理することを意味している。なお、順序保存型とは構成された一般化階層木の葉の順序を予め決定しておく場合を指し、その他とは文字列処理型でも順序保存型でもないものを指す。
【００３４】
次に図５ａ、図５ｂ、図５ｃを参照し、一般化階層木テーブル１３５の一例を示す。
【００３５】
ここで、上述のように、一般化階層木テーブル１３５は、一般化階層木自動生成部１２１が個人情報テーブル１３１と属性種別情報１３４を参照して生成するものである。まず、図５（ａ−１）を参照して属性「住所」２０１に対して作成した一般化階層木１３５−ａ１の概念図を示し、図５（ａ−２）を参照して一般化階層木１３５−ａ１をストレージ上に保存する方法を示し、図５（ａ−３）を参照して一般化階層木１３５−ａ１をメモリ上に管理する方法を示す。
【００３６】
図５（ａ−１）において、属性「住所」２０１に対する一般化階層木１３５−ａ１は複数の節点と枝から成る木構造として表される。枝は節点間の親子関係を意味する。枝は矢線を用いて示され、矢線の根側の節点が親であり、矢側の節点が子である。例えば節点５０１と節点５０２の関係において、節点５０１が親であり節点５０２は子である。親を持たない節点を根と呼び、子を持たない節点を葉と呼ぶ。例えば、節点５０１は根であり、節点５０３や節点５０４などは葉である。親を辿ることで行き着くことができる節点を祖先と呼び、子を辿ることで行き着くことのできる節点を子孫と呼ぶ。葉でない節点は内部節点と呼ばれる。
【００３７】
例えば、節点５０１や節点５０２等は内部節点である。各節点にはラベル５０３１と頻度５０３２が関連付けられる。葉にはラベルとして元の属性値が関連付けられ、頻度として個人情報テーブル中にその属性値が出現する件数が関連付けられる。例えば、葉５０３は「東京都文京区」とラベル付されており、その出現件数３５が頻度として関連付けられている。内部節点のラベルには、その子を全て表すことができる抽象的な概念が割り当てられ、またその頻度として全ての子の頻度の総和が割り当てられる。
【００３８】
例えば、属性「住所」２０１は属性種別情報１３４を参照すると前方一致型の文字列処理型であるので、節点５０３「東京都文京区」と節点５０４「東京都豊島区」は同じ親節点５０２としてより抽象的な概念へと一般化され、節点５０２のラベルとしては「東京都」が割り当てられている。また、節点５０２の頻度として、その全ての子の頻度の総和が関連付けられている。同様にして、全ての属性値の一般化階層構造を前方一致型の文字列処理を行って木構造として出力した結果が一般化階層木１３５−ａ１である。
【００３９】
図５（ａ−２）において、一般化階層木１３５−ａ１をストレージ上に保存する方法の一例を示す。ストレージ上にはリレーショナルデータベース等を用いて保存される。リレーショナルデータベース上のテーブルとして、一般化階層木１３５−ａ１を保存する一例がテーブル１３５−ａ２である。
【００４０】
テーブル１３５−ａ２の一行目５１１は、各カラムのラベルを示し、２行目以降の各レコードは１つの節点に対応する。すなわち、左列は当該節点のラベルを意味し、中央列は当該節点の親節点のラベルを意味し、右列は当該節点の頻度を意味する。例えば、レコード５１２は節点５０１に対応するものである。節点５０１は根であるから、親を持たない。この場合、中央列にはＮＵＬＬという値を保管し、節点５０１の頻度２０５を右列に保管する。同様に、節点５０２に対応するレコードがレコード５１３である。
【００４１】
なお、前方一致型の文字列処理型の属性の場合に限らず、任意の属性種別に対する一般化階層木がこの方法でストレージ上に保存可能である。
【００４２】
図５（ａ−３）において、一般化階層木１３５−ａ１をメモリ上で管理する方法を示す。データ構造５２１は節点５０１を管理するデータ構造の一例である。データ構造はポインタ５２１１と親を指し示すポインタ５２１２と子のポインタリスト５２１３と当該節点のラベル５２１４と当該節点の頻度５２１５によって構成される。節点５０１を表すデータ構造５２１は根に対応するから、親のポインタはＮＵＬＬである。同様に例えば、節点５０３は葉であるから、節点５０３を表すデータ構造の子のポインタリストは空となる。
【００４３】
なお、前方一致型の文字列処理型の属性の場合に限らず、任意の属性種別に対する一般化階層木がこの方法でメモリ上に管理できる。
【００４４】
次に図５（ｂ−１）を用いて、属性「年齢」２０２の一般化階層木を構成した一例を木１３５−ｂ１に示す。属性種別情報１３４を参照すると、属性「年齢」２０２は順序保存型である。順序保存型とは葉の順序を保存する情報種別を指し、実際、一般化階層木１３５−ｂ１において、全ての葉がその大小順序を左から右に保存している。なお、順序としては大小順序に限らず、辞書式順序や、人手で与えた順序など、任意の順序が適用可能である。順序保存型の一般化階層木の構築には、その属性の属性値の頻度情報を用いる。
【００４５】
テーブル１３５−ｂ２は、属性「年齢」２０２の属性値の頻度を表にしたものであり、属性値「２０」を取るレコードが５０件、属性値「２５」を取るレコードが３５件、属性値「２７」を取るレコードが２５件、属性値「３３」を取るレコードが４０件、属性値「３８」を取るレコードが５５件であり、その他の属性値を取るレコードは存在しないことを指す。この例では属性値を５種類に限定しているが、これに限定する必要はない。頻度テーブル１３５−ｂ２を利用して順序保存型で一般化階層木を構築すると一般化階層木１３５−ｂ１が生成される。
【００４６】
なお、一般化階層木１３５−ｂ１では大小順序を保存する形で一般化階層木を構成したことにより、内部節点のラベルが範囲の形で指定できる。例えば、節点５３１では、「２０−２７」というラベルが指定出来る。言い換えれば、祖先と子孫の関係にない２節点のラベルの表す範囲が重なってしまうことがない。
【００４７】
図６を参照して、属性「年齢」の属性種別が仮に後述の「その他」であった場合に一般化階層木を自動生成した結果を示す。この例では、作為的に内部節点に範囲の形でラベルを割り当てている。図６の例において、節点６０１と節点６０２のラベルはそれぞれ「２５−３８」と「３３」であり、これらの節点は祖先と子孫の関係にないにも関わらず「３３」が「２５−３８」の範囲に含まれる形となっている。
【００４８】
次に、図５（ｃ−１）を用いて属性「出身国または出身地域」２０３の一般化階層木を構成した一例を示す。属性種別情報１３４を参照すると、属性「出身国または出身地域」２０３の属性種別はその他である。すなわち、文字列処理型でも順序保存型でもない。この場合には、属性の全ての属性値の頻度情報のみを用いて一般化階層木を構成する。
【００４９】
頻度情報１３５−ｃ２を用いて一般化階層木を構成した一例が木１３５−ｃ１である。内部節点に割り当てられているラベルは、その内部節点よりも下位にある葉のラベルを列挙したものである。例えば、節点５４１では｛中国、仏国、独国、米国、英国｝というラベルが割り当てられているが、これは「中国または仏国または独国または米国または英国」と解釈する。
【００５０】
図７を参照して、匿名情報テーブル１３２の一例を説明する。各属性値はその属性に対する一般化階層木の節点のラベルに再符号化される。このとき、再符号化先の節点は、元の属性値に対応する葉の祖先に限る。また、匿名情報テーブル１３２中に出現する全ての属性に対する属性値タプルが、匿名情報テーブル全体の中で最小同値件数情報１３３の件数は少なくとも存在している必要がある。例えば、データタプル７０１（神奈川県横浜市、３３−３８、日本）というタプルを持つレコードが最小同値件数情報１３３に示される５件以上存在していなくてはならない。
【００５１】
なお、図７の例では、子孫、祖先の関係にある節点のラベルが匿名情報テーブル１３２中に共に存在しない形式となっているが、その限りではない。すなわち、例えば「２０−２７」と再符号化される年齢のセルと「２５−２７」と再符号化される年齢のセルが共存してもよい。
【００５２】
次に、図８を参照し、計算機１００の動作例を説明する。
【００５３】
まず、一般化階層木自動生成部１２１は、個人情報テーブル１３１および属性種別情報１３４を参照し、一般化階層木の自動生成を行い、その結果を一般化階層木テーブル１３５に格納する（Ｓ８０１）。次に、再符号化部１２２が、個人情報テーブル１３１および最小同値件数１３４ならびに一般化階層木テーブル１３５を参照し、任意のレコードが最小同値件数３０１に示された５件以上存在するようにデータを再符号化し、その結果を匿名情報テーブル１３２に格納する（Ｓ８０２）。
【００５４】
なお、図８では、Ｓ８０１とＳ８０２を続けて実行しているが、上記の説明からも分かるようにこれらのステップは分離できる。すなわち、一般化木自動生成部１２１がＳ８０１を行うタイミングと再符号化部１２２がＳ８０２を行うタイミングを別にすることが可能である。ただし、Ｓ８０１はＳ８０２よりも以前に実行されている必要がある。Ｓ８０１とＳ８０２の実行のタイミングをずらすことで次のようなメリットを享受できる。Ｓ８０１によって自動的に生成された一般化階層木を計算機１００の利用者が閲覧して、これに修正を加えることができる。例えば、Ｓ８０１によって自動生成された一般化階層木の全ての内部節点を再符号化先の候補とする必要がない場合には、再符号化先の候補とする内部節点のみを残した木を改めて一般化階層木とすることでＳ８０２の高速化が可能である。また、前記以外の一般化階層木に対する修正も可能であり、さらに自動生成された木と全く関係のない構造を持った一般化階層木に利用者が置き換えることも可能である。
【００５５】
次に図９を参照して、一般化階層木自動生成部１２１が上記Ｓ８０１で一般化階層木を自動構成する詳細な動作例を説明する。すなわち、図９の各処理を行うのは一般化階層木自動生成部１２１である。
【００５６】
まず、いくつかの表記法を定義する。ｍは個人情報テーブル１３１の属性の総数（列数）である。個人情報テーブル１３１の各列を左から順番に０番目の列、１番目の列、・・・、ｍ−１番目の列と呼ぶ。
【００５７】
図９でははじめに、個人情報テーブル１３１をメモリ１０２上に読み込み（Ｓ９０１）、パラメタｊを０に初期化する（Ｓ９０２）。
【００５８】
次に、ｊがｍより小さいかどうかを確認し（Ｓ９０３）、ｊがｍ以上であれば処理を終了する。
【００５９】
Ｓ９０３の判定でｊがｍよりも小さい場合には、ｊ番目の属性の属性種別を属性種別情報１３４から取得し（Ｓ９０４）、その結果に従って条件分岐する（Ｓ９０５）。
【００６０】
Ｓ９０５で当該属性の属性種別が「文字列処理型」の場合は、まず、ｊ番目の属性の個人情報テーブル１３１に出現する全ての属性値を漏らすことなく列挙する（Ｓ９１１）。具体的には、レコードを全件走査しながら、ｊ番目の属性に対応する属性値を既に列挙したかを判別し、列挙していない場合は列挙する。列挙したかどうかの判別には、例えばプログラミング言語であるＣ＋＋の標準ライブラリで提供されるｓｅｔ等のデータ構造を用いればよい。
【００６１】
次に列挙した属性値から指定された文字列処理を行い、包含関係を抽出し、その包含関係に基づいて木を構成する（Ｓ９１２）。包含関係の抽出方法は、既に知られている様々な文字列処理手法に依るが、例えば図５（ａ−１）の例のように前方一致型の文字列処理の場合には、一致部分を全て切り出して、一致長の長い方が葉に近い方に、一致長の短い方が根に近い方になるように構成する。文字列に一致部分がある２つの属性値は、その一致部分を根とする部分木の葉となり、当該の部分木の根となる節点のラベルには、一致した文字列を割り当てることができる。前方一致型以外の文字列処理型に対しても、適切な方法でラベルを全ての節点に割り当てる。なお、特にラベルの内容を気にしない場合は、当該節点の子孫となる葉全てを列挙したものでもよい。例えば、｛東京都文京区、東京都豊島区、東京都板橋区｝などである。Ｓ９１２の処理を終えたら、後に記述するＳ９４１の処理に移る。
【００６２】
Ｓ９０５で当該属性の属性種別が「順序保存型」の場合は、まず、ｊ番目の属性の全ての属性値の頻度情報を取得する（Ｓ９２１）。具体的には、レコードを全件走査しながら、現在走査中のレコードのｊ番目の属性に対応する属性値を既に列挙したかを判別し、列挙した場合は当該属性値の頻度を数えるカウンタを１つ増加させ、列挙していない場合は当該属性値の頻度のカウンタを１にセットする。データ構造として、Ｃ＋＋の標準ライブラリで提供されるｍａｐ等を用いる。ｍａｐは前述のｓｅｔの集合内の要素に、値を関連付けられるもので、集合の要素をキー、関連付ける値をバリューと呼ぶ。レコード全件の走査が終了した時には、ｍａｐに各属性値の頻度が記憶されている。
【００６３】
次に、上記で取得したｊ番目の属性の頻度情報を用いてＨｕ−Ｔｕｃｋｅｒ符号木を構成し、これを当該属性の一般化階層木とする（Ｓ９２２）。この符号木の構成方法は文献「Ｄ．Ｅ．  Ｋｎｕｔｈ，  “Ｔｈｅ  Ａｒｔ  ｏｆ  Ｃｏｍｐｕｔｅｒ  Ｐｒｏｇｒａｍｍｉｎｇ：  Ｖｏｌｕｍｅ  ３  Ｓｏｒｔｉｎｇ  ａｎｄ  Ｓｅａｒｃｈｉｎｇ，”  Ａｄｄｉｓｏｎ−Ｗｅｓｌｅｙ，  ｐｐ．４３９‐４４４，  １９７３」に記載の方法等を用いる。この場合も、Ｓ９１２と同じように、適切な方法で節点にラベルを割り当てるものとする。なお、「順序保存型」の場合には、前述のように属性値の素な範囲として内部節点のラベルを割り当てることができる。Ｓ９２２の処理を終えた後は後述するＳ９４１の処理に移る。
【００６４】
Ｓ９０５で当該属性の属性種別が「その他」の場合は、まず、ｊ番目の属性の全ての頻度情報を取得する（Ｓ９３１）。これは、処理Ｓ９２１と全く等価な処理である。
【００６５】
次に、上記で取得したｊ番目の属性の頻度情報を用いてＨｕｆｆｍａｎ符号木あるいはＳｈａｎｎｏｎ−Ｆａｎｏ符号木を構成し、これを当該属性の一般化階層木とする（Ｓ９３２）。どちらの符号木を用いるかは、計算機１００の設計者があらかじめ決定しておく。なお、Ｈｕｆｆｍａｎ符号木の構成方法は文献「T.S. Hａｎ  ａｎｄ  Ｋ．  Ｋｏｂａｙａｓｈｉ，  “Ｍａｔｈｅｍａｔｉｃｓ  ｏｆ  Ｉｎｆｏｒｍａｔｉｏｎ  ａｎｄ  Ｃｏｄｉｎｇ，”  Ａｍｅｒｉｃａｎ  Ｍａｔｈｅｍａｔｉｃａｌ  Ｓｏｃｉｅｔｙ，  ｐｐ．９９‐１０５，  ２００２」等に記載の方法を用い、Ｓｈａｎｎｏｎ−Ｆａｎｏ符号木の構成方法は文献「Ｔ．Ｓ．  Ｈａｎ  ａｎｄ  Ｋ．  Ｋｏｂａｙａｓｈｉ，  “Ｍａｔｈｅｍａｔｉｃｓ  ｏｆ  Ｉｎｆｏｒｍａｔｉｏｎ  ａｎｄ  Ｃｏｄｉｎｇ，”  Ａｍｅｒｉｃａ
ｎ  Ｍａｔｈｅｍａｔｉｃａｌ  Ｓｏｃｉｅｔｙ，  ｐｐ．９５‐９６，  ２００２」に記載の方法等を用いる。Ｓ９３２の処理を終えた後は、後述するＳ９４１の処理に移る。
【００６６】
Ｓ９１２またはＳ９２２またはＳ９３２の処理を終えた後、各々のステップで構成した一般化階層木の各節点の頻度情報を更新する（Ｓ９４１）。なお、より詳細な更新方法を、図１０を用いて後に説明する。
【００６７】
次に、構成した一般化階層木を、一般化階層木テーブル１３５に保存し（Ｓ９４２）、ｊにｊ＋１を代入し（Ｓ９４３）、前述のＳ９０３の評価に戻る。
【００６８】
ｊは単調に増加し、必ずｍよりも大きくなるから、以上を以て全ての属性に対する一般化階層木は構成できる。
【００６９】
図１０を用いて、一般化階層木自動生成部１２１がＳ９４１のステップで行う一般化階層木の節点頻度情報の更新方法の一例を説明する。すなわち、図１０の各処理を行うのは一般化階層木自動生成部１２１である。
【００７０】
図１０（ａ）は一般化階層木の節点頻度更新の大きな流れで、内部的に図１０（ｂ）のルーティンを再帰的に用いる。
【００７１】
まず、ｊ番目の属性の全ての属性値の頻度情報を取得する（Ｓ１００１）。ステップＳ１００１はＳ９２１と全く同等の処理である。
【００７２】
次に取得した頻度情報をｊ番目の属性の一般化階層木の対応する葉に割り当てる（Ｓ１００２）。具体的には、対応する葉のデータ構造の頻度５２１５に、Ｓ１００１で取得した頻度を代入する。これを全ての葉に対して行う。
【００７３】
図１０（ｂ）のルーティンを、ｊ番目の一般化階層木の根を引数として実行する（Ｓ１００３）。
【００７４】
図１０（ｂ）のルーティンを説明する。図１０（ｂ）のルーティンは、節点を引数に取る。まず、引数節点の子を全て取得し、この総数をｐとする（Ｓ１００４）。便宜上、ｐ個の子節点を０、１、・・・、ｐ−１番目の子と呼ぶ。具体的には、節点のデータ構造の子のポインタリスト５２１３を取得する。このリストに格納されている要素の総数がｐである。
【００７５】
次に、ｉに０を代入する（Ｓ１００５）。
【００７６】
次にｉがｐより小さいかどうかを判定し（Ｓ１００６）、ｐ以上であれば後に説明するＳ１０１０に処理を移行する。
【００７７】
Ｓ１００６の判定で、ｉがｐよりも小さければ、ｉ番目の子に頻度が既に割り当てられていないかどうかを判定する（Ｓ１００７）。もしも既に頻度が割り当てられていれば、ｉにｉ＋１を代入し（Ｓ１００９）、Ｓ１００６に戻る。
【００７８】
Ｓ１００７の判定でｉ番目の子に未だ頻度が割り当てられていなければ、図１０（ｂ）のルーティンを、ｉ番目の子を引数として実行し（Ｓ１００８）、これが終了した後ｉにｉ＋１を代入し（Ｓ１００９）、Ｓ１００６に戻る。
【００７９】
Ｓ１００６の判定でｉがｐ以上であれば、０、１、・・・、ｐ−１番目の子の頻度の総和を当該節点の頻度として設定する（Ｓ１０１０）。
【００８０】
以上により、全ての節点に頻度を設定できる。
【００８１】
次に、図１１を参照して、再符号化部１２２が再符号化処理Ｓ８０２で実行する処理の詳細を説明する。すなわち、図１１の各処理を実行するのは再符号化部１２２である。以降、最小同値件数情報１３３で定義する最小同値件数３０１をｋで表す。
【００８２】
まず、個人情報テーブル１３１および一般化階層木テーブル１３５をメモリ上にロードする（Ｓ１１０１）。一般化階層木テーブル１３５は具体的には前述のデータ構造５２１を用いてメモリ上で管理される。なお、前述のように、一般化階層木の自動生成Ｓ８０１と再符号化Ｓ８０２を別のタイミングで行って、一般化階層木に修正を加えたりした場合には、このステップで一般化階層木自動生成部１２１が一般化階層木の頻度情報を図１０の方法を用いて更新する必要がある。
【００８３】
次に、節点を格納する空のリストｖを準備し（Ｓ１１０２）、ｊに０を代入する（Ｓ１１０３）。Ｓ１１０２で準備するリストｖには節点が格納され、格納される各要素ｅは、ｅの子のラベルをｅのラベルに再符号化する候補であることを指し、Ｓ８０２の処理内において動的に変化するものである。
【００８４】
次に、ｊがｍよりも小さいかどうか判定する（Ｓ１１０４）。ｊがｍよりも小さいと判定された場合には、ｊ番目の一般化階層木において、全ての子が葉である節点を全てｖに追加する（Ｓ１１０５）。ｊにｊ＋１を代入し（Ｓ１１０６）、Ｓ１１０４に戻る。
【００８５】
Ｓ１１０４の判定でｊがｍ以上であると判定された場合には、メモリ上の個人情報テーブルに出現する全ての全属性データタプルがｋ件以上存在するかを判定する（Ｓ１１０７）。具体的にはｍａｐなどのデータ構造を用意し、ｍａｐのキー集合の中にレコードの示す全属性データタプルが存在する場合にはそのバリューに保存するカウントを１だけカウントアップする。キー集合の中に全属性データタプルが存在しない場合にはそのキーに対して、バリューとして１を代入する。以上を、全てのレコードに対して行い、ｍａｐに格納されている全てのバリューがｋ以上であるかどうかを判定すれば良い。
【００８６】
Ｓ１１０７の判定で、ｋ件未満しかないデータタプルが存在すると判定された場合には、Ｓ１１０８のループを処理する。ループはｖ内の全ての要素ｗに対して行う。
【００８７】
ループＳ１１０８内では、ｗの子の節点のラベルをデータとして持つ全てのレコードの当該属性値をｗのラベルに再符号化した場合の損失情報量を、損失情報量計量部１２３に計算させる（Ｓ１１０９）。この損失情報量の計算方法については、後に説明する。
【００８８】
ループＳ１１０８を終えたら、ｖの中で最も損失情報量の小さい節点ｕの子の節点のラベルをデータとして持つ全てのレコードの当該ラベルをｕのラベルに再符号化する（Ｓ１１１０）。
【００８９】
次にｕの子を全て削除し、ｕを葉とすることで、ｕを含む一般化階層木を更新する（Ｓ１１１１）。
【００９０】
次に、ｕの親をｔとし、ｔの全ての子が葉であれば、ｔをｖに追加し（Ｓ１１１２）、Ｓ１１０７の判定に戻る。
【００９１】
Ｓ１１０７の判定で、メモリ上の個人情報テーブルで、全ての全属性データタプルがｋ件以上存在すると判定された場合には、メモリ上の再符号化結果を匿名情報テーブル１３２に書き出して（Ｓ１１１３）、処理を終える。
【００９２】
次に、図１２（ａ）を参照して、ｗの子の節点のラベルをデータとして持つ個人情報テーブル中の全てのレコードをｗのラベルに再符号化した場合に損失する情報量の計算を行う損失情報量計量部１２３を用いた処理Ｓ１１０９の詳細を説明する。すなわち、図１２（ａ）の各処理を行うのは、損失情報量計量部１２３である。
【００９３】
まず、最後に求める損失情報量を格納する変数Ｉを０に初期化する（Ｓ１２０１）。ループＳ１２０２は、節点ｗの全ての子ｃに対するループである。
【００９４】
ループＳ１２０２では、内部で、ｃのラベルをデータとして持つ１レコードをｗのラベルに再符号化した場合の損失情報量ｉを計算する（Ｓ１２０３）。損失情報量の計算方法は後に説明する。次にＩにｃｏｕｎｔ（ｃ）＊ｉを加算する（Ｓ１２０４）。なお、ｃｏｕｎｔ（ｃ）はメモリ上の個人情報テーブルでｃのラベルをデータとして持つレコードの総数を意味し、演算「＊」は実数上の乗算を意味する。具体的には、ｃｏｕｎｔ（ｃ）は節点の頻度５２１５を参照することで得ることができる。
【００９５】
ループＳ１２０２を終了した後、Ｉを返し処理を終える。
【００９６】
次に図１２（ｂ）を参照して、ｃのラベルをデータとして持つ１レコードをｗのラベルに再符号化した場合の損失情報量の計算方法Ｓ１２０３の詳細の一例を説明する。図１２（ｂ）の各処理を行うのは損失情報量計量部１２３である。必ずしもここに説明する方法を用いる必要はない。
【００９７】
ｃのラベルをデータとして持つ１レコードをｗのラベルに再符号化した時にデータが失う情報量を、−ｌｏｇ  ｛ｃｏｕｎｔ（ｃ）／ｃｏｕｎｔ（ｗ）｝で計算する（Ｓ１２０５）。なお、ｌｏｇの底は通常２を用いるが、定数倍しか変化しないため何を用いても構わない。しかし、システムの中では統一する必要がある。またｃｏｕｎｔ（ｃ）は前述と同様に、メモリ上での個人情報テーブルでｃのラベルをデータとして持つレコードの総数を意味する。
【００９８】
なお、図１２（ｂ）に示す再符号化時の損失情報量の計算方法において、ｃとｗは必ずしも親子関係にある必要はない。ｗがｃの祖先であれば任意の節点間に対して定義できる。実際、ｃの祖先に節点ｄがあり、ｄの祖先に節点ｗがある場合、−ｌｏｇ  ｛ｃｏｕｎｔ（ｃ）／ｃｏｕｎｔ（ｗ）｝＝［−ｌｏｇ  ｛ｃｏｕｎｔ（ｃ）／ｃｏｕｎｔ（ｄ）｝］＋［−ｌｏｇ  ｛ｃｏｕｎｔ（ｄ）／ｃｏｕｎｔ（ｗ）｝］を満たす。これは、ｃを再符号化してｄにした後、ｄを再符号化してｗにした場合の損失情報量と、ｃを直接ｗに再符号化した場合の損失情報量が等しいことを意味する。
【００９９】
以上のように、計算機１００の特長は自動的に一般化階層木を構成する手法と損失情報量の計量方法を備えることである。Ｈｕ−Ｔｕｃｋｅｒ符号木やＨｕｆｆｍａｎ符号木およびＳｈａｎｎｏｎ−Ｆａｎｏ符号木は、前述のように頻度の小さい属性値を深い方に配置し、頻度の大きい属性値を浅い方に配置する木である。このため、再符号化に際して、頻度の小さいもの同士が同じラベルに再符号化される可能性を高くするため、過度の再符号化を避けた有用性の高い匿名データを生成できるものである。また、前述の符号木を一般化階層木として用いれば、再符号化時の損失情報量を小さくすることが可能である。
＜実施例２＞
次に実施例２について説明する。
【０１００】
実施例２はデータの有用性を向上させるものである。以下、実施例２を説明する場合、上述の実施例１と重複する構成に対しては同じ符号を付与して説明を省略する。また、実施例２は動作のほとんどは実施例１と同様である。この部分の動作に対しては、同じ符号を付与して説明を省略する。
【０１０１】
まず、図１３を参照して、実施例２の計算機１００の構成例について説明する。
【０１０２】
図１３において、計算機１００のストレージ１０３は、プログラム１５１の代わりにプログラム１３３１を有する。プログラム１３３１がメモリ上にロードされ、ＣＰＵ１０１は、実施例１の各部１２１、１２２、１２３に加えて擬似個人情報発生部１３２１を実現する。また、プログラム１３３１の処理結果の格納先として、ストレージ上に発生情報テーブル１３３２を有する。
【０１０３】
次に図１４を参照して、発生情報テーブル１３３２の詳細を説明する。
【０１０４】
発生情報テーブル１３３２は図１４に示されるように、ほとんど匿名情報テーブル１３２と同様のものである。その違いは、発生情報テーブル１３３２では、各属性情報はその属性の一般化階層木の葉に対応した値を取ることである。より具体的には、匿名情報テーブル１３２に格納されたラベルに対応する一般化階層木の節点の、子孫に対応する葉の属性値として改めて符号化されたものである。
【０１０５】
次に図１５を参照して、実施例２の計算機１００の処理の流れを説明する。
【０１０６】
図１５において、一般化階層木自動生成部１２１が一般化階層木を自動生成するステップＳ８０１と再符号化部１２２が再符号化を行うステップＳ８０２は実施例１のものと完全に等価である。これらの処理を終えた後、擬似個人情報発生部１３２１が擬似個人情報発生ステップＳ１５０１を実行する。なお、実施例１にて示したＳ８０１とＳ８０２の関係と同様に、Ｓ１５０１も続けて実行する必要はなく、処理を行うタイミングは別々で構わない。
【０１０７】
図１６を参照して、擬似個人情報発生部１３２１が頻度情報を用いて擬似個人情報発生処理を実行するＳ１５０１の詳細の一例を説明する。すなわち図１６の各処理を行うのは擬似個人情報発生部１３２１である。
【０１０８】
まず、メモリ上に匿名情報テーブル１３２と一般化階層木テーブル１３５を取得する（Ｓ１６０１）。取得後、全てのレコードｒに対してのループ（Ｓ１６０２）と、さらに内部ループとしてレコードｒの全ての属性についてのループ（Ｓ１６０３）に対して以下を行う。ただし、現在処理中の属性をｊ番目の属性とする。
【０１０９】
まず、レコードｒのｊ番目の属性の属性値が一般化階層木のどの節点に対応するかを特定し、当該節点をｗとする（Ｓ１６０４）。次に、ｗの子孫に相当する節点で葉となるものを全て列挙し、これをｃ１、ｃ２、・・・、ｃｎとおく（Ｓ１６０５）。具体的にはｗから幅優先探索などの探索方法を用いてもよいし、一度探索した後は節点にこの探索結果を関連付けて記憶して、これを再利用してもよい。
【０１１０】
次に、レコードｒのｊ番目の属性がｗのラベルとなっているが、これを以下に示すような方法で一般化階層木の１つの葉のラベルに置き換える（Ｓ１６０６）。一般化階層木に保管されている節点の頻度情報を用いて、ｃｏｕｎｔ（ｃ１）／ｃｏｕｎｔ（ｗ）の確率でｃ１のラベルを選び、ｃｏｕｎｔ（ｃ２）／ｃｏｕｎｔ（ｗ）の確率でｃ２を選び、同様の確率でｃ１、ｃ２、ｃ３、・・・、ｃｎをランダムに発生させて、発生結果の節点のラベルに置き換える。
【０１１１】
最後に全てのレコードを発生情報テーブル１３３２に格納する（Ｓ１６０７）。
【０１１２】
実施例２で構成した計算機１００の特長は、発生情報テーブル１３３２の属性値が元の個人情報テーブル１３１の属性値と同じ集合の値を取るために、データを利用するアプリケーションを選ばない点である。例えば、年齢が１０歳ということを示すレコードがあったとき、メモリ上では整数型として保持していることが多い。このデータが「１０−１９歳」という再符号化を行われると、整数型として表現することができないため、任意のアプリケーションに利用できない。しかし、実施例２ではこれを「１０−１９歳」の間の年齢に頻度情報を用いて置き換える。例えば、「１４歳」などに置き換える。したがって整数型として表現でき、元の個人情報では利用できていた任意のアプリケーションに利用できるということになる。また、発生情報テーブル１３３２の各属性の分布が元の個人情報テーブル１３１の分布に近くなることが期待できる。
【０１１３】
なお、実施例２では匿名情報テーブル１３２を構成するステップを含む形で説明を行ったが、前述のように事前に匿名情報テーブル１３２を構成しておいて擬似個人情報発生部１３３１のみを後で行う方法もある。この方法によれば、個人情報テーブル１３１を必要としないので、匿名情報テーブル１３２と一般化階層木テーブル１３５と擬似個人情報発生部１３３１のみでシステムを構成できる。これにより、匿名情報と一般化階層木のみを社外に預託するだけで利用可能なシステムを構築でき、個人情報を預託する必要がないという意味において匿名性の高いシステムである。
＜実施例３＞
次に実施例３について説明する。
【０１１４】
実施例３は、ユーザが望む属性値の分類を用いることにより、データの有用性を向上させるものである。国際疾病分類、図書分類、特許分類など様々な分野において、決められた分類が存在している。また、年齢ならば１０代、２０代のようによく用いられる分類が存在する。実施例３は、ユーザが一般化階層木に望む階層構造のみを予め定義しておくことで、ユーザの望む分類を考慮した一般化階層木を自動生成するものである。例えば、年齢の分類を「２０歳から２４歳」、「２５歳から２９歳」と予め定義しておくことで、「２４歳から２７歳」のようにユーザが望む分類から外れる形でデータが再符号化されることを防ぐ。
【０１１５】
なお、実施例３は、一般化階層木を構成する際に、ユーザ定義階層木に外れない形での節点の追加を認めるものである。例えば、ユーザが「２０歳から２４歳」という分類を定義するとき、「２０歳から２４歳」という節点の子として「２０歳から２２歳」というような節点を構成することを認める。また、ユーザが「２０歳から２４歳」の親として、全属性値を包含する「＊」を定義していた場合、「２０歳から２４歳」の親として「２０歳から２９歳」という節点を新たに追加することを認める。ユーザ定義階層木に外れない形での階層の追加を認めることにより、ユーザが望む分類を活かしつつ、より詳細な匿名化データを出力することが可能になる。
【０１１６】
以下、実施例３を説明する場合、上述の実施例１と重複する構成に対しては同じ符号を付与して説明を省略する。また、実施例３の動作の一部は実施例１と同様である。この部分の動作に対しては、同じ符号を付与して説明を省略する。
【０１１７】
まず、図１７を参照し、実施例３の計算機１００の構成例を説明する。
【０１１８】
図１７において、計算機１００のストレージ１０３は、個人情報テーブル１３１、匿名情報テーブル１３２、最小同値件数情報１３３、属性種別情報１３４、一般化階層木テーブル１３５、プログラム１７３１、ユーザ定義階層木テーブル１７３２を記憶する。
【０１１９】
ＣＰＵ１０１は、メモリ１０２上にプログラム１７３１をロードし、ユーザ定義階層木に基づく一般化階層木自動生成部１７２１と再符号化部１２２を実現する。なお、再符号化部１２２は必要に応じて内部処理として損失情報量計量部１２３を実現する。
【０１２０】
ユーザ定義階層木テーブル１７３２は、ユーザが任意の属性に対して望む分類を定義したものを格納する。ユーザは匿名化を行う全ての属性に対してユーザ定義階層木を定義する必要はなく、分類を定義したい属性についてのみ定義すればよい。また、前述のとおり、ユーザは各属性において望む分類のみを定義すればよく、全ての階層を定義する必要はない。なお、「文字列処理型」、「順序保存型」、「その他」のどの属性種別においても、祖先と子孫の関係にない複数の節点において各節点の子孫となる属性値が重複するような分類とならないように定義する必要がある。例えば、「２５歳から３８歳」と「２０歳から３３歳」のような分類や、「｛神奈川県横浜市、神奈川県川崎市｝」と「｛神奈川県横浜市、神奈川県藤沢市｝」のような分類を定義してはならない。
【０１２１】
図１８を参照し、ユーザ定義階層木テーブル１７３２の一例を示す。
【０１２２】
まず、図１８（ａ）を参照して属性「年齢」に対するユーザ定義階層木の概念図を示し、図１８（ｂ）を参照してユーザ定義階層木をストレージ上に保存する方法を示し、図１８（ｃ）を参照して一般化階層木をメモリ上に管理する方法を示す。
【０１２３】
図１８（ａ）において、属性「年齢」に対するユーザ定義階層木の一例を示す。ユーザ定義階層木は複数の節点と枝から成る木構造として表される。各節点にはユーザが求める分類を表すラベルが関連付けられる。
【０１２４】
図１８（ｂ）において、ユーザ定義階層木をストレージ上に保存する方法の一例を示す。ストレージ上にはリレーショナルデータベース等を用いて保存される。リレーショナルデータベース上のテーブルとしてユーザ定義階層木を保存する一例がテーブル１７３２−ｂである。テーブルの一行目１８１１は、各カラムのラベルを示し、２行目以降の各レコードは１つの節点に対応する。
【０１２５】
図１８（ｃ）において、ユーザ定義階層木１７３２−ａをメモリ上で管理する方法を示す。データ構造１８２１は節点１８０１を管理するデータ構造の一例である。データ構造はポインタ１８２１１と親を指し示すポインタ１８２１２と子のポインタリスト１８２１３と当該節点のラベル１８２１４と頻度情報１８２１５によって構成される。
【０１２６】
次に、図１９を参照し、各属性種別におけるユーザ定義階層木の一例と、ユーザ定義階層木に基づく一般化階層木の例を示す。
【０１２７】
図１９（ａ−１）は文字列処理型の属性「住所」のユーザ定義階層木の一例、図１９（ａ−２）は、図５（ａ−２）で例示したデータを用いて、ユーザ定義階層木に基づく一般化階層木を構成した例である。文字列処理型の属性のユーザ定義階層木としてユーザは文字列から抽出される分類以外の分類を定義することが出来る。例えば、「神奈川県」を「｛神奈川県横浜市、神奈川県川崎市｝」と、「神奈川県その他」などに細かく分類できる。ここで、「｛神奈川県横浜市、神奈川県川崎市｝」という節点は、子となる節点のラベルを列挙したものであり、「神奈川県横浜市」と「神奈川県川崎市」を子に持つことが明らかであるので、「神奈川県横浜市」と「神奈川県川崎市」を子として定義しなくともよいが、「神奈川県その他」は子としてどのような節点を持つか明らかでないため、ユーザは「神奈川県その他」の子を定義する必要がある。
【０１２８】
図１９（ｂ−１）は順序保存型の属性「年齢」のユーザ定義階層木の一例、図１９（ｂ−２）は、図５（ｂ−２）で例示したデータを用いて、ユーザ定義階層木に基づく一般化階層木を構成した例を示す。順序保存型の属性の場合、節点のラベルは値の範囲を示すものとなるため、当該節点に対して子を定義しなくともよい。
【０１２９】
図１９（ｃ−１）はその他の属性「国籍」のユーザ定義階層木の一例、図１９（ｃ−２）は、図５（ｃ−２）で例示したデータを用いて、ユーザ定義階層木に基づく一般化階層木を構成した例を示す。属性種別が「その他」の属性は、「文字列処理型」の属性と同様、各節点のラベルが子の節点を列挙する形のものである場合は子を定義する必要はないが、「欧州」のような抽象的な名称とする場合には、子としてどのような節点をもつかを定義しなければならない。
【０１３０】
図１９（ａ−２）（ｂ−２）（ｃ−２）において、点線で囲まれた部分は、再符号化の際になくともよい節点を示す。たとえば、頻度が０の節点、つまりユーザ定義階層木において分類区分を指定したものの節点に区分される属性値が個人情報データに存在しない場合、当該節点は再符号化処理には必要ない。そのため、頻度が０となる節点は一般化階層木から削除してもよい。また、節点の頻度が当該節点の子の頻度とかわらないもの、つまり頻度が０以外の子を１つしか持たない節点についても、再符号化処理には必要ない。そのため、頻度が０以外の子を１つしか持たない節点は、一般化階層木から削除し、当該節点の子と当該節点の親とを親子関係にしてもよい。
【０１３１】
次に、図２０を参照して、実施例３の計算機１００の処理の流れを説明する。
【０１３２】
まず、ユーザ定義階層木に基づく一般化階層木自動生成部１７２１は、個人情報テーブル１３１および属性種別情報１３４ならびにユーザ定義階層木テーブル１７３２を参照し、一般化階層木の自動生成を行い、その結果を一般化階層木テーブル１３５に格納する（Ｓ２００１）。次に再符号化部１２２がデータの再符号化を行い、その結果を匿名情報テーブル１３２に格納する（Ｓ８０２）。ステップＳ８０２は実施例１のものと等価である。実施例１にて示したＳ８０１とＳ８０２の関係と同様に、Ｓ２００１とＳ８０２も続けて実行する必要はなく、処理を行うタイミングは別々で構わない。
【０１３３】
次に図２１を参照して、ユーザ定義階層木に基づく一般化階層木自動生成部１７２１が上記Ｓ２００１で一般化階層木を自動構成する詳細な動作例を説明する。すなわち、図２１の各処理を行うのはユーザ定義階層木に基づく一般化階層木自動生成部１７２１である。
【０１３４】
まず、個人情報テーブル１３１およびユーザ定義階層木テーブル１７３２をメモリ１０２上に読み込む（Ｓ２１０１）。このとき、ユーザ定義階層木で定義された分類に重複がないか確認する。具体的には、ユーザ定義階層木を構成する節点のうち祖先と子孫の関係にない複数の節点において、各節点の子孫が重複しないことをチェックする。重複が存在する場合には、処理を終了する。
【０１３５】
Ｓ９０２およびＳ９０３は実施例１のものと等価である。
【０１３６】
Ｓ２１０２でｊ番目の属性におけるユーザ定義階層木が存在するかどうかを判定する。ユーザ定義階層木が存在しない場合には、Ｓ２１０３、ユーザ定義階層木が存在する場合はＳ２１０４に進む。Ｓ２１０３およびＳ２１０４の詳細については後述する。Ｓ２１０３またはＳ２１０４の処理を終えた後は、Ｓ９４３の処理に移る。
【０１３７】
Ｓ９４３の処理は実施例１のものと等価である。
【０１３８】
図２２を参照して、Ｓ２１０３の処理を説明する。Ｓ２１０３は、ユーザ定義階層木を用いず、個人情報テーブルの情報のみを用いて一般化階層木を構成する場合の処理である。つまり、Ｓ２１０３の処理はすべて、実施例１で述べた処理と等価の処理となる。
【０１３９】
次に、図２３を参照して、Ｓ２１０４の処理を説明する。
【０１４０】
Ｓ９０４およびＳ９０５の処理は前述の通りである。Ｓ９０５で、当該属性の属性種別が「文字列処理型」の場合はＳ２３１１、「順序保存型」の場合はＳ２３２１、「その他」の場合はＳ２３３１へ進む。Ｓ２３１１、Ｓ２３２１、Ｓ２３３１の詳細は後述する。
Ｓ２３１１またはＳ２３２１または２３３１の処理を終えたら、Ｓ９４２に進む。
【０１４１】
Ｓ９４２の処理は前述の通りである。
【０１４２】
図２４（ａ）を参照して、Ｓ２３１１の処理を説明する。
【０１４３】
まず、いくつかの表記法を定義する。ｙはユーザ定義階層木１７３２の最も深い階層の階層数である。全ての属性値を包含する「＊」を階層０とし、下の階層に行くごとに階層１、階層２、・・・階層ｙと呼ぶ。
【０１４４】
Ｓ９１１は実施例１のものと等価である。
【０１４５】
Ｓ２４０１では、パラメタｘをｙに初期化する。
【０１４６】
次に、ｘが０より小さいかどうかを確認し（Ｓ２４０２）、ｘが０より小さい場合は処理を終了し、ｘが０以上の場合にはＳ２４０３へ進む。
【０１４７】
Ｓ２４０３では、ｊ番目の属性のユーザ定義階層木を用いて、階層ｘの節点を全て列挙したリストｚを用意する。
【０１４８】
Ｓ２４０４では、リストｚが空かどうかを判定する。リストｚが空の場合はＳ２４０７へ進み、空でない場合は、Ｓ２４０５へ進む。
【０１４９】
Ｓ２４０５では、リストｚから節点を一つ選択し、選択した節点をリストｚから削除する。
【０１５０】
Ｓ２４１１では、Ｓ２４０５で選択した節点の子孫となる節点を列挙する。具体的には、Ｓ２４０５でユーザ定義階層木１７３２において子を持たない節点を選択した場合は、Ｓ９１１で取得した属性値情報を用いて当該節点の子孫となる属性値を列挙する。例えば、「神奈川県川崎市」という節点を選択した場合、「神奈川県川崎市」という文字列を含む属性値を列挙する。また、Ｓ２４０５でユーザ定義階層木１７３２において子を持つ節点を選択した場合は、ユーザ定義階層１７３２において当該節点の子として定義されている節点を列挙する。例えば、「｛神奈川県横浜市、神奈川県川崎市｝」という節点を選択した場合、ユーザ定義階層木１７３２で「｛神奈川県横浜市、神奈川県川崎市｝」の子として定義されている「神奈川県横浜市」と「神奈川県川崎市」を列挙する。
【０１５１】
Ｓ２４１２では、Ｓ２４１１で列挙した節点から指定された文字列処理を行い、包含関係を抽出し、その包含関係に基づいてＳ２４０５で選択した節点を根とする木を構成する。木の構成方法は、実施例１と同様既に知られている様々な文字列処理手法に依る。構成した木はユーザ定義階層木に基づく一般化階層木の一部となる。構成した木を用いて、ユーザ定義階層木を更新する。
【０１５２】
Ｓ２４０６では、Ｓ２４１２で構成した木の頻度情報を更新する。Ｓ２４０６の処理は後述する。Ｓ２４０６の処理を終えたら、前述のＳ２４０４の評価に戻る。
【０１５３】
Ｓ２４０７では、ｘにｘ−１を代入し、前述のＳ２４０２の評価に戻る。
【０１５４】
以上により、属性種別が「文字列処理型」の属性について、ユーザ定義階層に基づいた一般化階層木が構成される。
【０１５５】
図２５を参照して、Ｓ２４０６の処理を説明する。Ｓ２４０６の処理の一部は、図１０で説明したＳ９４１のものと等価である。この部分の動作に対しては、同じ符号を付与して説明を省略する。
【０１５６】
まず、Ｓ２５０１で、頻度情報更新対象の部分木の葉となる節点の頻度情報を取得する。ここで、頻度情報更新対象の部分木とは、Ｓ２４１２で構成した木をさし、部分木の葉となる節点とは、Ｓ２４１１で列挙した全ての節点を指す。
【０１５７】
Ｓ２５０２では、Ｓ２５０１で取得した頻度情報を対応する葉に割り当てる。
【０１５８】
Ｓ２５０３では、頻度情報更新対象の部分木の根、つまりＳ２４１４で選択した節点を引数として、図２５（ｂ）のルーティンを実行する。
【０１５９】
図２５（ｂ）のルーティンは、図１０（ｂ）のものと完全に等価である。
【０１６０】
次に図２４（ｂ）を参照して、Ｓ２３２１の処理を説明する。Ｓ２３２１の処理の一部はＳ２３１１のものと等価である。この部分の動作に対しては、同じ符号を付与して説明を省略する。
【０１６１】
Ｓ９２１、Ｓ２４０１、Ｓ２４０２、Ｓ２４０３、Ｓ２４０４、Ｓ２４０５の処理は前述の通りである。
【０１６２】
Ｓ２４２１では、Ｓ２４０５で選択した節点の子孫となる節点の頻度情報を取得する。具体的には、Ｓ２４０５でユーザ定義階層木１７３２において子を持たない節点を選択した場合は、Ｓ９２１で取得した属性値情報を用いて当該節点の子孫となる属性値の頻度情報を取得する。また、Ｓ２４０５でユーザ定義階層木１７３２において子を持つ節点を選択した場合は、ユーザ定義階層１７３２において当該節点の子として定義されている節点の頻度情報を取得する。例えば、ユーザ定義階層木１７３２において「２０歳から２４歳」という節点を選択した場合、属性値が「２０歳」、「２１歳」、「２２歳」、「２３歳」、「２４歳」の頻度情報を取得する。
【０１６３】
Ｓ２４２２では、Ｓ２４２１で取得した頻度情報を用いて、Ｓ２４０５で選択した節点を根とするＨｕ−Ｔｕｃｋｅｒ符号木を構成する。構成した木を用いて、ユーザ定義階層木を更新する。
【０１６４】
Ｓ２４０６、Ｓ２４０７の処理は前述の通りである。
【０１６５】
以上により、属性種別が「順序保存型」の属性について、ユーザ定義階層に基づいた一般化階層木が構成される。
【０１６６】
次に図２４（ｃ）を参照して、Ｓ２３３１の処理を説明する。Ｓ２３３１の処理の一部はＳ２３１１のものと等価である。この部分の動作に対しては、同じ符号を付与して説明を省略する。
【０１６７】
Ｓ９３１、Ｓ２４０１、Ｓ２４０２、Ｓ２４０３、Ｓ２４０４、Ｓ２４０５の処理は前述の通りである。
【０１６８】
Ｓ２４３１では、Ｓ２４０５で選択した節点の子孫となる節点属性値の頻度情報を取得する。具体的には、Ｓ２４０５でユーザ定義階層木１７３２において子を持たない節点を選択した場合は、Ｓ９３１で取得した属性値情報を用いて当該節点の子孫となる属性値の頻度情報を取得する。また、Ｓ２４０５でユーザ定義階層木１７３２において子を持つ節点を選択した場合は、ユーザ定義階層１７３２において当該節点の子として定義されている節点の頻度情報を取得する。例えば、ユーザ定義階層木１７３２において「欧州」を選択した場合、「英国」、「仏国」、「独国」の頻度情報を取得する。
【０１６９】
Ｓ２４３２では、Ｓ２４３１で取得した頻度情報を用いて、Ｈｕｆｆｍａｎ符号木あるいはＳｈａｎｎｏｎ−Ｆａｎｏ符号木を構成する。実施例１と同様、どちらの符号木を用いるかは、計算機１００の設計者があらかじめ決定しておく。構成した木を用いて、ユーザ定義階層木を更新する。
【０１７０】
Ｓ２４０６，Ｓ２４１７の処理は前述の通りである。
【０１７１】
以上により、属性種別が「その他」の属性について、ユーザ定義階層に基づいた一般化階層木が構成される。
【０１７２】
実施例３で構成した計算機１００の特長は、ユーザが希望する分類を持つ一部の属性、一部の階層をユーザ定義階層木として定義することで、ユーザが望む分類を考慮した一般化階層木を自動的に生成することである。また、頻度情報を用いて一般化階層木を自動生成することで、損失情報量が少ない形でデータを匿名化することである。
【符号の説明】
【０１７３】
１００：計算機、１０１：ＣＰＵ、１０２：メモリ、１２１：一般化階層木自動生成部、１２２：再符号化部、１２３：損失情報量計量部、１０３：ストレージ、１３１：個人情報テーブル、１３２：匿名情報テーブル、１３３：最小同値件数情報、１３４：属性種別情報、１３５：一般化階層木テーブル、１５１：プログラム、１０４：入力装置、１０５：出力装置、１０６：通信装置、１０７：内部通信線、１３２１：擬似個人情報発生部、１３３１：プログラム、１３３２：発生情報テーブル、１７２１：ユーザ定義階層木に基づく一般化階層木生成部、１７３１：プログラム、１７３２：ユーザ定義階層木テーブル。
【図１】
0005492296.tif 000002
【図２】
0005492296.tif 000003
【図３】
0005492296.tif 000004
【図４】
0005492296.tif 000005
【図５（ａ）】
0005492296.tif 000006
【図５（ｂ）】
0005492296.tif 000007
【図５（ｃ）】
0005492296.tif 000008
【図６】
0005492296.tif 000009
【図７】
0005492296.tif 000010
【図８】
0005492296.tif 000011
【図９】
0005492296.tif 000012
【図１０】
0005492296.tif 000013
【図１１】
0005492296.tif 000014
【図１２】
0005492296.tif 000015
【図１３】
0005492296.tif 000016
【図１４】
0005492296.tif 000017
【図１５】
0005492296.tif 000018
【図１６】
0005492296.tif 000019
【図１７】
0005492296.tif 000020
【図１８】
0005492296.tif 000021
【図１９（ａ）】
0005492296.tif 000022
【図１９（ｂ）】
0005492296.tif 000023
【図１９（ｃ）】
0005492296.tif 000024
【図２０】
0005492296.tif 000025
【図２１】
0005492296.tif 000026
【図２２】
0005492296.tif 000027
【図２３】
0005492296.tif 000028
【図２４（ａ）】
0005492296.tif 000029
【図２４（ｂ）】
0005492296.tif 000030
【図２４（ｃ）】
0005492296.tif 000031
【図２５】
0005492296.tif 000032