【課題を解決するための手段】
【0029】
本発明は、個票データについて多次元クロス度数表を集計して秘匿処理を行った上で、総数と内訳合計の差分計算を行い、多次元秘匿度数表の再現性を維持したまま個票データ形式に変換することで、匿名化した個票データを作成する手段を用いている。
本発明による個票データの匿名化手法は、個票データと多次元クロス度数表について、個票データから多次元クロス度数表の集計処理と、多次元クロス度数表から個票形式データへの変換処理を可逆的に行うことで、多次元クロス度数表の秘匿処理を匿名化データに反映させると共に、匿名化データを集計して得られる度数表について多次元クロス秘匿度数表の再現性を維持することを可能とする。
【0030】
5.匿名化装置
匿名化装置は、市販のパーソナルコンピュータ(以下、PCという。)に匿名化処理プログラムをインストールし、入力データと出力データを保存する記憶装置を接続して構成する。プログラムのインストールは電子媒体を介して行うが、インストールの方法はインターネット等のネットワーク経由でもPCへのプレインストールの方法でもよい。
利用者は、PCにインストールされた実行形式ファイルのプログラムを実行することで装置を起動し、実行画面のメニューから入力データとしてPCに接続された記憶媒体上の個票データのファイル名を指定し、安全基準(K)、丸め基数(B)、及び変換縮尺(R)等のパラメータを指定して処理を実行し、作成した匿名化データのファイル名を指定して出力データとして保存する(
図1)。
なお、多次元クロス度数表の秘匿手法については、実施形態として消去秘匿及び丸め秘匿を用いているが、度数表の秘匿手法は多様に存在することから、度数表について属性別の内訳合計と総数の差分計算を行うことができる手法であれば、どのような秘匿手法を用いてもよい。
【0031】
6.匿名化処理プログラム
個票データの秘匿処理を行うための匿名化処理プログラムは、(1)多次元度数表集計処理部、及び(2)秘匿変換処理部を構成する各プログラムにより構成する(
図2)。
多次元度数表集計処理部は、個票データを入力データとし、(1)多次元クロス度数表集計プログラムにより構成する(
図3.1)。秘匿変換処理部は、多次元クロス度数表を入力データとし、(2)消去秘匿、(3)丸め秘匿、(4)差分計算、及び(5)個票形式変換の各プログラムにより構成する(
図3.2)。
(1)多次元度数表集計処理部については、個票データを入力データとして用いて多次元度数表を集計することから、外部アクセスから遮断された閉鎖環境で利用することを想定している。(2)秘匿変換処理部については秘匿処理を行う機能と度数表を個票形式に変換する機能を有しており、多次元度数表の秘匿処理については閉鎖環境で行う必要がある。ただし、秘匿処理後の秘匿度数表を入力データとして個票データ形式に変換する場合は、外部アクセスが可能な解放環境で利用する可能性を視野に入れた設計としている。プログラム作成については、どのようなプログラミング言語を用いてもよい。
【0032】
6.1多次元クロス度数表集計プログラム
多次元クロス度数表集計プログラムは、属性フィールドの全ての組合わせごとに内訳合計の計算処理を行う。計算方法としては、合計キーを付与したデータを基データに結合し、属性キーで並び替えを行った上で、同一属性ごとに度数及び加重度数の合算を行う方法を用いて、再帰計算により全組合わせ別の合計計算処理を行う(
図4.1)。
(1) 前処理
下記の前処理を行う。
・処理対象とする属性項目フィールドを選択
・不要なフィールドを除去
・フィールドに加重度数(Weight)が無い場合は加重度数(Weight)フィールドを追加し、各レコードの値を1にセット
・度数(Freauency)フィールドを追加して、各レコードの値を1にセット
(2) フィールド番号j = 0
指定したフィールドについて、カウンターjの初期化を行う。
(3) 処理フィールドj = j+1
処理対象となる指定フィールドをカウンターjによりカウントする。
(4) 全レコードコピーD1
入力ファイルの全レコードをコピーしてファイルD1として出力する。
(5) レコード番号i = 0
入力レコードのカウンターiについて初期化を行う。
(6) レコード読込
個票データのレコード読込を行う。
(7) i = i + 1
処理対象となるレコードをカウンターiによりカウントする。
(8) 属性j番目分類=”~”
処理対象となるレコードについて、属性j番目の属性を合計符号”~”に置き換える。
(9) 最終レコード?
全レコードについて処理が完了したか判定を行う。
Yes ⇒処理(6)
No ⇒処理(10)
(10) 結合D1+全レコード
属性i番目について処理済の全レコードをファイルD1に結合する。
(11) クロス属性並び替え
結合ファイルについて、属性別に並び替えを行う。
(12) 属性別度数合算
属性項目の同一組合せごとに度数(Frequency)の合算処理を行う。
(13) 属性別加重度数合算
属性項目の同一組合せごとに加重度数(Weight)の合算処理を行う。
(14) 処理対象データ置換
再帰計算を行うために、処理対象データを処理済データに置き換える。
(15) 最終フィールド?
全フィールドについて処理が完了したか判定を行う。
Yes ⇒終了
No ⇒処理(3)
【0033】
6.2消去秘匿プログラム
消去秘匿プログラムは、属性項目の組合わせごとに分類符号を付与して分類符号ごとの最小度数の検査を行い、最小度数が安全基準Kに満たない場合は、その属性項目組合わせのレコードについて内訳をゼロ値に置き換えることで多次元クロス度数表の消去秘匿処理を行う(
図4.2)。
【0034】
属性組合わせ符号付与(2A)
(1)レコード番号i=0
レコード番号のカウンタiを初期化する。
(2)レコード読込
対象ファイルについて、属性項目(F1〜Fj)、加重度数(Weight)、度数(Frequency)をレコード読込。
(3) i = i + 1
カウンタiを+1増分する。
(4)属性番号j=0
属性番号jを初期化する。
(5) j = j + 1
属性番号jを+1増分する。
(6)番号j 分類”~”?
属性番号jのフィールドについて、分類=”~”かどうかを判定する。
Yes ⇒処理(8)
No ⇒処理(7)
(7)符号F0 j桁目=”0”
分類符号F0のj桁目を”0”に設定する。
(8)符号F0 j桁目=”~”
分類符号F0のj桁目を”~”に設定する。
(9)j番全属性?
属性番号jについて、全て処理したか判定する。
Yes ⇒処理(9)
No ⇒処理(5)
(10)レコード出力
分類符号F0、属性項目(F1〜Fj)、加重度数(Weight)、度数(Frequency)をレコード出力。
(11)全レコード?
全レコードについて、処理が完了したか判定する。
Yes ⇒処理(12)
No ⇒処理(2)
(12)符号F0順 並び替え
分類符号F0でレコードを並び替える。
【0035】
組合わせ別最小度数検査(2B)
(13)レコード読込
分類符号F0、属性項目(F1〜Fj)、度数(Frequency)についてレコード読込
(14) Key = F0
分類符号F0をKeyに代入
(15)最小度数=度数
最小度数に度数(Frequency)を代入
(16)レコード読込
分類符号F0、属性項目(F1〜Fj)、度数(Frequency)についてレコード読込
(17) Key = F0?
分類符号F0とKeyの一致判定
Yes ⇒処理(20)
No ⇒処理(18)
(18) Key,最小度数出力
Keyと最小度数をレコード出力
(19) Key = F0
分類符号F0をKeyに代入
(20)度数>最小?
度数>最小度数の大小判定
Yes ⇒処理(22)
No ⇒処理(21)
(21)最小度数=度数
最小度数に度数(Frequency)を代入
(22)最終レコード?
全レコードの終了判定
Yes ⇒処理(23)
No ⇒処理(16)
(23) Key,最小度数出力
Keyと最小度数をレコード出力
【0036】
リスク表内訳消去(2C)
(24)基準値K設定
最小度数の基準値Kの設定
(25)レコード読込
分類符号F0、属性項目(F1〜Fj)、加重度数(Weight)、度数(Frequency)をレコード読込
(26) Key = F0
KeyにF0を代入
(27)F0最小度数読込
分類符号F0をKeyとする最小度数読込
(28)度数>最小?
度数(Frequency)>最小度数の判定
Yes ⇒処理(30)
No ⇒処理(29)
(29)度数=0
度数(Frequency)に0を代入
(30)レコード出力
分類符号F0、属性項目(F1〜Fj)、加重度数(Weight)、度数(Frequency)をレコード出力
(31)レコード読込
分類符号F0、属性項目(F1〜Fj)、加重度数(Weight)、度数(Frequency)をレコード読込
(32) Key = F0?
Key = F0の判定
Yes ⇒処理(35)
No ⇒処理(33)
(33)F0最小度数読込
分類符号F0をKeyとする最小度数読込
(34) Key = F0
KeyにF0を代入
(35)度数>最小?
度数(Frequency)>最小度数の判定
Yes ⇒処理(37)
No ⇒処理(36)
(36)度数=0
度数(Frequency)に0を代入
(37)レコード出力
分類符号F0、属性項目(F1〜Fj)、加重度数(Weight)、度数(Frequency)をレコード出力
(38)最終レコード?
最終レコードの判定
Yes ⇒終了
No ⇒処理(31)
【0037】
6.3丸め秘匿プログラム
丸め秘匿プログラムは、消去秘匿処理済みの多次元クロス度数表について、丸め基数Bで除算して小数点以下を四捨五入することにより度数及び加重度数の丸め処理を行い、度数表の秘匿を補強する(
図4.3)。
【0038】
丸め秘匿
(1)基数B設定
丸め基数B値を設定
(2)レコード読込
丸め処理対象データのレコード読込
(3)度数基数B丸め
度数(Frequency)を基数B値で丸め処理
計算式:Frequency = Int(Frequency / B ) * B
関数Int() は整数値計算
(4)加重度数基数B丸め
加重度数(Weight)を基数B値で丸め処理
計算式:Weight = Int(Weight / (Sum(Weight) / Sum(B))) * (Sum(Weight) / Sum(B))
関数Int() は整数値計算
関数Sum() は全レコードの合計値計算
(5)レコード出力
属性項目、加重度数(Weight)、度数(Frequency)のレコード出力
(6)最終レコード?
最終レコードの判定
Yes ⇒終了
No ⇒処理(2)
【0039】
6.4差分計算プログラム
差分計算プログラムは、内訳合計と総数の差分計算を行う。差分計算は、度数表集計の逆処理を行う方法で計算し、属性項目の組合わせごとの内訳について正負の符号を反転させて合計と合算していくことで、全ての属性項目の組合わせごとの差分計算を再帰計算により行う。正負を反転させた内訳は、属性フィールドを合計符号“〜”に置き換えて、基の度数表データと結合し、属性項目別に並び替えを行った上で、同一属性キーごとに度数及び加重度数の合算を行うことで差分を計算する(
図4.4)。
【0040】
差分計算
(1)フィールド番号j = 0
フィールド番号jの初期化
(2) j = j + 1
フィールド番号jの+1増分
(3)対象データ コピーC1
入力データをC1にコピー
(4)レコード番号i = 0
レコード番号iの初期化
(5)レコード読込
属性項目(F1〜Fj)、加重度数(Weight)、度数(Frequnecy)のレコード読込
(6) i = i + 1
レコード番号iの+1増分
(7)番号j分類=”~”?
フィールド番号jの属性項目について、合計符号判定
Yes ⇒処理(12)
No ⇒処理(8)
(8)属性j分類=”~”
フィールド番号jの属性項目を合計符号”~”に置き換え
(9)度数 正負反転
度数(Frequency)の値を正負反転
(10)加重度数 正負反転
加重度数(Weight)の値を正負反転
(11)レコード出力D1
属性項目(F1〜Fj)、加重度数(Weight)、度数(Frequnecy)のレコード出力
(12)最終レコード?
最終レコードの判定
Yes ⇒処理(13)
No ⇒処理(5)
(13)結合 C1+D1
出力データC1とD1の結合
(14)属性項目別並び替え
結合データの属性項目別並び替え
(15)属性別度数合算
属性項目別度数の合算
(16)属性別加重度数合算
属性項目別加重度数の合算
(17)対象データ置換
対象データを結合データで置換
(18)最終フィールド?
最終フィールドの判定
Yes ⇒終了
No ⇒処理(2)
【0041】
6.5個票形式変換プログラム
個票形式変換プログラムは、差分計算を行った度数表の内訳と差分について、縮尺Rで度数または加重度数を除算して整数化した値を出力レコード数とし、度数または加重度数を出力レコード数で除算した値をウェイトとして、属性ごとにレコード出力を行う(
図4.5)。
【0042】
個票形式変換
(1)縮尺R設定
度数ベースか加重度数ベースかを選択して縮尺Rを設定
(2)レコード読込
属性項目(F1〜Fj)、加重度数(Weight)、度数(Frequency)のレコード読込
(3)属性”~” NULL置換
レコードの属性項目が”~”のフィールドをNULLに置換
(4)出力数n=Int(度数/R)
出力数nの計算
度数ベースの場合 :n=Int(Frequency / R)
加重度数ベースの場合:n=Int(Weight / R)
関数Int()は整数値計算
(5)n>1?
n>1の判定
Yes ⇒処理(7)
No ⇒処理(6)
(6)出力数n= 1
n= 1を設定
(7)レコード番号j = 0
レコード番号jの初期化
(8) j = j + 1
レコード番号jの+1増分
(9)ウェイトW = Weight / J
出力ウェイトWの計算
計算式:W = Weight / J
(10)レコード出力
属性項目(F1〜Fj)、出力ウェイト(Weight=W)のレコード出力
(11) j = n?
レコード番号j>nの判定
Yes ⇒処理(12)
No ⇒処理(8)
(12)最終レコード?
最終レコードの判定
Yes ⇒終了
No ⇒処理(2)
【0043】
7.個票データの匿名化手法
個票データの匿名化手法について、本発明における実施形態の1つとして(1)基データの前処理、(2)多次元度数表集計、(3)全項目組合わせ検査及びリスク表の内訳消去、(4)多次元度数表の丸め処理による秘匿補強、(5)多次元度数表の個票データ形式変換の順に処理を行う。
【0044】
7.1 基データの前処理
入力に用いる個票データは、統計調査やアンケート調査等の調査票の内容を入力した男女、年齢、世帯類型等の個人属性や世帯属性の項目から成る。氏名や個人番号、世帯番号等の識別情報が含まれている場合には前処理としてあらかじめその情報を削除しておく必要がある。
【0045】
個票データのファイルはどのような形式でもよいが、本発明の装置では簡便のためCSV(コンマ区切り)形式のファイルを用いている。データの先頭行はフィールド名とし、2行目以降を個人あるいは世帯ごとの分類符号や分類ラベルのデータとする。フィールド名については、最終項目をWeightフィールドとし、標本調査の場合は復元ウェイト、全数調査の場合はWeightを1とする。Weightフィールドがない場合はWeightを1と見なして処理を行う。前処理としては、ファイル読込みと丸め基数等のパラメータ設定を行う。また、Weightフィールドの後に1レコードを1度数とするFrequencyフィールドを設定し、単純度数の集計に用いる。
【0046】
例)CSV形式の個票データ
F1 Gender, F2 Age, Weight, Frequency
a)男, a)20〜29歳, 1, 1
a)男, b)30〜39歳, 1, 1
b)女, d)50〜59歳, 1, 1
b)女, e)60〜69歳, 1, 1
a)男, c)40〜49歳, 1, 1
(以下省略)
Gender:性別、Age:年齢階級、Weight:復元ウェイト、Frequency:単純度数
【0047】
7.2 多次元クロス度数表集計
度数表については、選択した属性項目ごとに度数を集計し、さらに、項目の全組み合わせごとに合計値を計算して多次元クロス度数表を集計する。
度数表は多次元クロス度数表として立体的に作成する必要があり、入力データの再帰処理により属性項目の全ての組み合わせについて合計計算を行う。計算方法としては、第1番目の属性項目について合計符号(“〜”)に置き換えたレコードを入力データに追加して出力し、次にこの出力データを入力データとして用いる再帰処理により、第2番目の属性項目を合計符号(“〜”)に置き換えたレコードを入力データに追加して出力し、これを全ての属性項目について繰り返すことで多次元クロス度数表を立体的に集計する。
多次元クロス度数表は後述の差分計算を行う際に1セル1レコードのセルデータ形式に変換する必要があるが、プログラム上は多次元クロス度数表を直接セルデータ形式で作成することによってセルデータ形式への変換を省略している。
なお、ここでは再帰計算による多次元クロス度数集計について説明しているが、属性項目の全ての組合わせ別に合計を求める方法であれば、再帰計算を用いない方法で集計してもよい。
【0048】
多次元クロス度数の再帰計算方法
属性項目F1,F2,・・・,Fjのj次元データについて、属性項目の組合わせ別にレコード単位の度数(FrequencyまたはWeight)を合算して合計度数nを集計し、第i番目までの属性別度数niを求める。属性別度数niは、単純度数の場合はレコードごとのFrequency、加重度数の場合はレコードごとのWeightを属性項目の組合わせ別に合算して求める。得られた属性別度数niについて、以下の再帰計算により属性項目の組合わせ別の多次元クロス度数を集計する。
属性別度数ni
F1 F2 ・・・ Fjn(FrequencyまたはWeightの合計)
C1,1 C1,2 ・・・ C1,jn1
C2,1 C2,2 ・・・ C2,jn2
C3,1 C3,2 ・・・ C3,jn3
・・・
Ci,1 Ci,2 ・・・ Ci,jni
【0049】
第1番目の再帰計算
F1 F2 ・・・ Fjn(FrequencyまたはWeightの合計)
~ C1,2 ・・・ C1,jn1
~ C2,2 ・・・ C2,jn2
~ C3,2 ・・・ C3,jn3
・・・
~ Ci,2 ・・・ Ci,jni
C1,1 C1,2 ・・・ C1,jn1
C2,1 C2,2 ・・・ C2,jn2
C3,1 C3,2 ・・・ C3,jn3
・・・
Ci,1 Ci,2 ・・・ Ci,jni
上記の出力データについて、同一属性別に度数n(FrequencyまたはWeightの合計)の足し上げを行う。合計を示す分類符号”〜”は、他の記号を用いてもよい。
【0050】
第2番目の再帰計算
入力データとして第1番目の再帰計算結果を用いて計算処理を行う。
F1 F2 ・・・ Fjn(FrequencyまたはWeightの合計)
~ ~ ・・・ C1,jn1
~ ~ ・・・ C2,jn2
~ ~ ・・・ C3,jn3
・・・
~ ~ ・・・ Ci,jni
C1,1 ~ ・・・ C1,jn1
C2,1 ~ ・・・ C2,jn2
C3,1 ~ ・・・ C3,jn3
・・・
Ci,1 ~ ・・・ Ci,jni
~ C1,2 ・・・ C1,jn1
~ C2,2 ・・・ C2,jn2
~ C3,2 ・・・ C3,jn3
・・・
~ Ci,2 ・・・ Ci,jni
C1,1 C1,2 ・・・ C1,jn1
C2,1 C2,2 ・・・ C2,jn2
C3,1 C3,2 ・・・ C3,jn3
・・・
Ci,1 Ci,2 ・・・ Ci,jni
上記の出力データについて、同一属性別に度数n(FrequencyまたはWeight)の足し上げを行う。
【0051】
第j番目の再帰計算
F1 F2 ・・・ Fj n(FrequencyまたはWeightの合計)
~ ~ ・・・ ~ n1
~ ~ ・・・ ~ n2
~ ~ ・・・ ~ n3
・・・
~ ~ ・・・ ~ ni
C1,1 ~ ・・・ ~ n1
C2,1 ~ ・・・ ~ n2
C3,1 ~ ・・・ ~ n3
・・・
Ci,1 ~ ・・・ ~ ni
~ C1,2 ・・・ ~ n1
~ C2,2 ・・・ ~ n2
~ C3,2 ・・・ ~ n3
・・・
~ Ci,2 ・・・ ~ ni
C1,1 C1,2 ・・・ ~ n1
C2,1 C2,2 ・・・ ~ n2
C3,1 C3,2 ・・・ ~ n3
・・・
Ci,1 Ci,2 ・・・ ~ ni
・・・(途中省略)
~ ~ ・・・ C1,j n1
~ ~ ・・・ C2,j n2
~ ~ ・・・ C3,j n3
・・・
~ ~ ・・・ Ci,j ni
C1,1 ~ ・・・ C1,j n1
C2,1 ~ ・・・ C2,j n2
C3,1 ~ ・・・ C3,j n3
・・・
Ci,1 ~ ・・・ Ci,j ni
~ C1,2 ・・・ C1,j n1
~ C2,2 ・・・ C2,j n2
~ C3,2 ・・・ C3,j n3
・・・
~ Ci,2 ・・・ Ci,j ni
C1,1 C1,2 ・・・ C1,j n1
C2,1 C2,2 ・・・ C2,j n2
C3,1 C3,2 ・・・ C3,j n3
・・・
Ci,1 Ci,2 ・・・ Ci,j ni
・・・(以下省略)
【0052】
上記の出力データについて、同一属性別に度数n(FrequencyまたはWeight)の足し上げを行う。再帰計算をj回繰り返し、同一属性別に度数の足し上げ計算を行うことにより、項目の全ての組合わせについて度数の合計を計算する。
再帰計算の結果
F1 F2 ・・・ Fj n(FrequencyまたはWeightの合計)
~ ~ ・・・ ~ t(~,~,・・・,~)
~ ~ ・・・ C1,j t(~,~,・・・,C1,j)
~ ~ ・・・ C2,j t(~,~,・・・,C2,j)
~ ~ ・・・ C3,j t(~,~,・・・,C3,j)
・・・
~ ~ ・・・ Ci,j t(~,~,・・・,Ci,j)
・・・
~ C1,2 ・・・ ~ t(~,C1,2,・・・,~)
~ C2,2 ・・・ ~ t(~,C2,2,・・・,~)
~ C3,2 ・・・ ~ t(~,C3,2,・・・,~)
・・・
~ Ci,2 ・・・ ~ t(~,Ci,2,・・・,~)
・・・
~ C1,2 ・・・ C1,j t(~,C1,2,・・・,C1,j)
~ C2,2 ・・・ C2,j t(~,C2,2,・・・,C2,j)
~ C3,2 ・・・ C3,j t(~,C3,2,・・・,C3,j)
・・・
~ Ci,2 ・・・ Ci,j t(~,Ci,2,・・・Ci,j)
・・・
C1,1 ~ ・・・ ~ t(C1,1,~ ,・・・,~)
C2,1 ~ ・・・ ~ t(C2,1,~ ,・・・,~)
C3,1 ~ ・・・ ~ t(C3,1,~ ,・・・,~)
・・・
Ci,1 ~ ・・・ ~ t(Ci,1,~ ,・・・,~)
・・・
C1,1 ~ ・・・ C1,j t(C1,1,~ ,・・・,C1,j)
C2,1 ~ ・・・ C2,j t(C2,1,~ ,・・・,C2,j)
C3,1 ~ ・・・ C3,j t(C3,1,~ ,・・・,C3,j)
・・・
Ci,1 ~ ・・・ Ci,j t(Ci,1,~ ,・・・,Ci,j)
・・・
C1,1 C1,2 ・・・ ~ t(C1,1,C1,2,・・・,~)
C2,1 C2,2 ・・・ ~ t(C2,1,C2,2,・・・,~)
C3,1 C3,2 ・・・ ~ t(C3,1,C3,2,・・・,~)
・・・
Ci,1 Ci,2 ・・・ ~ t(Ci,1,Ci,2,・・・,~)
・・・
C1,1 C1,2 ・・・ C1,j n1
C2,1 C2,2 ・・・ C2,j n2
C3,1 C3,2 ・・・ C3,j n3
・・・
Ci,1 Ci,2 ・・・ Ci,j ni
合計度数t(Ci,1,Ci,2,・・・,Ci,j)は、属性(Ci,1,Ci,2,・・・,Ci,j)のレコードについて、度数を合算した値を示す。
【0053】
例)
属性項目F1(a1,a2)とF2(b1,b2,b3)の2次元データについて、下記の度数が得られた場合の2次元クロス度数表計算
F1 F2 n(FrequencyまたはWeightの合計)
a1 b1 n1
a1 b2 n2
a1 b3 n3
a2 b1 n4
a2 b2 n5
a2 b3 n6
【0054】
(1)第1番目の再帰計算
F1 F2 n(FrequencyまたはWeightの合計)
~ b1 n1
~ b2 n2
~ b3 n3
~ b1 n4
~ b2 n5
~ b3 n6
a1 b1 n1
a1 b2 n2
a1 b3 n3
a2 b1 n4
a2 b2 n5
a2 b3 n6
上記の出力データについて、同一属性別に度数n(FrequencyまたはWeightの合計)の合算を行う。
計算結果
F1 F2 n(FrequencyまたはWeightの合計)
~ b1 n1 + n4
~ b2 n2 + n5
~ b3 n3 + n6
a1 b1 n1
a1 b2 n2
a1 b3 n3
a2 b1 n4
a2 b2 n5
a2 b3 n6
【0055】
(2)第2番目の再帰計算
F1 F2 n(FrequencyまたはWeightの合計)
~ ~ n1 + n4
~ ~ n2 + n5
~ ~ n3 + n6
a1 ~ n1
a1 ~ n2
a1 ~ n3
a2 ~ n4
a2 ~ n5
a2 ~ n6
~ b1 n1 + n4
~ b2 n2 + n5
~ b3 n3 + n6
a1 b1 n1
a1 b2 n2
a1 b3 n3
a2 b1 n4
a2 b2 n5
a2 b3 n6
上記の出力データについて、同一属性別に度数n(FrequencyまたはWeightの合計)の足し上げを行う。
計算結果
F1 F2 n(FrequencyまたはWeightの合計)
~ ~ n1+n2+n3+n4+n5+n6
a1 ~ n1+n2+n3
a2 ~ n4+n5+n6
~ b1 n1+n4
~ b2 n2+n5
~ b3 n3+n6
a1 b1 n1
a1 b2 n2
a1 b3 n3
a2 b1 n4
a2 b2 n5
a2 b3 n6
【0056】
7.3 多次元クロス度数表の秘匿処理
度数表の秘匿手法としては多様な方法が存在するが、個票データを直接的に処理して匿名化する事前秘匿の場合と異なり、集計後に行う度数表の秘匿処理は度数表の一部を秘匿しても、縦計、横計などの合計や、他の項目との組合わせの値を用いることで、秘匿した値が逆算されてしまうことがある。このため、本発明では、度数表のリスクセルの値が逆算できないように、属性項目の全ての組合わせについてリスク検査を行い、リスクセルを含む属性項目の組合わせについて、クロス表単位で内訳を消去する消去秘匿の方法を用いている。この方法を用いることにより、多次元クロス度数表の他の部分からリスクセルが逆算できないように秘匿処理を行うことができる。
ただし、クロス表単位で内訳を消去する方法は、高い安全性が期待できる一方で、消去されるセル数が多いため、度数表の有用性が著しく低下するという問題がある。そこで、本発明では、消去秘匿と丸め秘匿により複合的に秘匿処理を行い、最小限の消去秘匿を行った多次元クロス度数表の各セルについて丸め処理を加えることで、多次元クロス秘匿度数表の安全性と有用性を維持する方法を用いている。消去秘匿と丸め秘匿による複合的な秘匿処理を行うことで、個票データの有用性を維持しつつ、より高い秘匿効果を得られることが期待できる。
【0057】
7.3.1 属性項目の全組合わせ検査及び消去秘匿
多次元クロス度数表の消去秘匿は、属性項目の組合わせごとに多次元クロス度数表の最小セルの検査を行い、最小セルが基準を下回っている場合はその属性項目の組合わせについて内訳度数を全てゼロ値に置き換えて消去することで秘匿を行う方法である。
多次元クロス度数表には、属性項目のあらゆる組合わせについて、合計及び内訳の度数が集計されて含まれていることから、集計対象となるレコードの属性項目について全ての組合わせでリスク検査を行って、最小セルが基準を下回るようなリスクセルが含まれている場合は、その組み合わせの度数表をリスク表と判定する。リスクセルが含まれているリスク表については、該当のリスクセルを消去するだけでは安全性が十分に確保できないため、リスクセルを含む組合わせ表を表単位で消去することで秘匿を行う必要がある。このため、消去秘匿を行う場合は、多次元クロス度数表のリスクセルを含む属性項目の組合わせについて全てのセルの内訳度数を消去することで消去秘匿を行う。
例えば、安全基準を3度数以上とする場合について、性別と年齢について多次元クロス度数表を集計して性別の内訳度数と年齢の内訳度数の最小セルがそれぞれ3以上となっているが、性別と年齢をクロスした内訳度数の最小セルが1となっていて安全基準を満たさないような場合については、性別と年齢をクロスした度数表はリスクセルを含むリスク表となるため、性別と年齢をクロスした内訳度数を全てゼロ値に置き換えを行い、性別と年齢をクロスしない表についてのみの内訳度数を残すことで多次元クロス度数表の秘匿を行う。
消去秘匿を行うデータについて、属性項目がnull値となっているレコードが含まれている場合については、null値の度数を秘匿対象から除外して処理を行う。これは、null値を秘匿対象としてしまうとnull値が1レコード1属性フィールドのみに含まれているような場合にそのフィールドを含む組合わせが全て消去対象となってしまい、秘匿が正常に行われないためである。一般に、null値のフィールドはその属性項目が不詳である場合と解釈されるが、不詳であること自体は秘匿対象ではないと見なして処理を行っている。属性項目が不詳の場合についても孤立レコードが秘匿対象となる場合は不詳の項目をnull値とするのではなく、不詳の符合を付与してnull値と区別する必要がある。
【0058】
例)
ある個票データについて、就業状態と性別、年齢をクロスした3次元クロス表を集計したところ、下記のクロス度数表が得られたとする。安全基準を3とすると、クロス表の最小セルは「60〜69歳の女」の度数が1、「60〜69歳の男」の度数が2となっているため、就業状態と性別、年齢の3項目をクロスすることによりリスクセルが発生することがわかる。
クロス度数表(3次元の場合)
性別 年齢 総数 a)有業 b)無業
総数 総数 100 53 47
総数 a)20〜29歳 19 11 8
総数 b)30〜39歳 24 15 9
総数 c)40〜49歳 23 15 8
総数 d)50〜59歳 18 9 9
総数 e)60〜69歳 9 3 6
総数 f)70歳以上 7 0 7
a)男 総数 50 32 18
a)男 a)20〜29歳 10 6 4
a)男 b)30〜39歳 13 10 3
a)男 c)40〜49歳 12 9 3
a)男 d)50〜59歳 8 5 3
a)男 e)60〜69歳 4 2 2
a)男 f)70歳以上 3 0 3
b)女 総数 50 21 29
b)女 a)20〜29歳 9 5 4
b)女 b)30〜39歳 11 5 6
b)女 c)40〜49歳 11 6 5
b)女 d)50〜59歳 10 4 6
b)女 e)60〜69歳 5 1 4
b)女 f)70歳以上 4 0 4
【0059】
この表について、1セル1レコードのセルデータ形式(総数については符号「〜」とする。)に変換し、属性の組合わせごとに分類符号を付与する。分類符号は、それぞれの属性項目について合計の項目を「〜」、内訳の項目を「0」として表す。
セルデータ形式のクロス度数表(3次元の場合)
F0符号 F1就業状態 F2性別 F3年齢 n(Frequency合計)
~~~ ~ ~ ~ 100
~~0 ~ ~ a)20〜29歳 19
~~0 ~ ~ b)30〜39歳 24
~~0 ~ ~ c)40〜49歳 23
~~0 ~ ~ d)50〜59歳 18
~~0 ~ ~ e)60〜69歳 9
~~0 ~ ~ f)70歳以上 7
~0~ ~ a)男 ~ 50
~00 ~ a)男 a)20〜29歳 10
~00 ~ a)男 b)30〜39歳 13
~00 ~ a)男 c)40〜49歳 12
~00 ~ a)男 d)50〜59歳 8
~00 ~ a)男 e)60〜69歳 4
~00 ~ a)男 f)70歳以上 3
~0~ ~ b)女 ~ 50
~00 ~ b)女 a)20〜29歳 9
~00 ~ b)女 b)30〜39歳 11
~00 ~ b)女 c)40〜49歳 11
~00 ~ b)女 d)50〜59歳 10
~00 ~ b)女 e)60〜69歳 5
~00 ~ b)女 f)70歳以上 4
0~~ a)有業 ~ ~ 53
0~0 a)有業 ~ a)20〜29歳 11
0~0 a)有業 ~ b)30〜39歳 15
0~0 a)有業 ~ c)40〜49歳 15
0~0 a)有業 ~ d)50〜59歳 9
0~0 a)有業 ~ e)60〜69歳 3
00~ a)有業 a)男 ~ 32
000 a)有業 a)男 a)20〜29歳 6
000 a)有業 a)男 b)30〜39歳 10
000 a)有業 a)男 c)40〜49歳 9
000 a)有業 a)男 d)50〜59歳 5
000 a)有業 a)男 e)60〜69歳 2
00~ a)有業 b)女 ~ 21
000 a)有業 b)女 a)20〜29歳 5
000 a)有業 b)女 b)30〜39歳 5
000 a)有業 b)女 c)40〜49歳 6
000 a)有業 b)女 d)50〜59歳 4
000 a)有業 b)女 e)60〜69歳 1
0~~ b)無業 ~ ~ 47
0~0 b)無業 ~ a)20〜29歳 8
0~0 b)無業 ~ b)30〜39歳 9
0~0 b)無業 ~ c)40〜49歳 8
0~0 b)無業 ~ d)50〜59歳 9
0~0 b)無業 ~ e)60〜69歳 6
0~0 b)無業 ~ f)70歳以上 7
00~ b)無業 a)男 ~ 18
000 b)無業 a)男 a)20〜29歳 4
000 b)無業 a)男 b)30〜39歳 3
000 b)無業 a)男 c)40〜49歳 3
000 b)無業 a)男 d)50〜59歳 3
000 b)無業 a)男 e)60〜69歳 2
000 b)無業 a)男 f)70歳以上 3
00~ b)無業 b)女 ~ 29
000 b)無業 b)女 a)20〜29歳 4
000 b)無業 b)女 b)30〜39歳 6
000 b)無業 b)女 c)40〜49歳 5
000 b)無業 b)女 d)50〜59歳 6
000 b)無業 b)女 e)60〜69歳 4
000 b)無業 b)女 f)70歳以上 4
【0060】
分類符号ごとの最小セルについてリスクチェックを行うと、下記の検査結果が得られる。
検査結果(就業状態/性別/年齢)
符号 最小度数
[000] 1
[~00] 3
[0~0] 3
[~~0] 7
[00~] 18
[0~~] 47
[~0~] 50
[~~~] 100
【0061】
この検査結果から、組合わせ分類[000]は度数1のリスクセルを含むリスク表となっていることがわかる。そこで、分類[000]の組合わせについては内訳度数を全てゼロ値に置き換えることで消去秘匿を行う。
F0符号 F1就業状態 F2性別 F3年齢 n(Frequency合計)
~~~ ~ ~ ~ 100
~~0 ~ ~ a)20〜29歳 19
~~0 ~ ~ b)30〜39歳 24
~~0 ~ ~ c)40〜49歳 23
~~0 ~ ~ d)50〜59歳 18
~~0 ~ ~ e)60〜69歳 9
~~0 ~ ~ f)70歳以上 7
~0~ ~ a)男 ~ 50
~00 ~ a)男 a)20〜29歳 10
~00 ~ a)男 b)30〜39歳 13
~00 ~ a)男 c)40〜49歳 12
~00 ~ a)男 d)50〜59歳 8
~00 ~ a)男 e)60〜69歳 4
~00 ~ a)男 f)70歳以上 3
~0~ ~ b)女 ~ 50
~00 ~ b)女 a)20〜29歳 9
~00 ~ b)女 b)30〜39歳 11
~00 ~ b)女 c)40〜49歳 11
~00 ~ b)女 d)50〜59歳 10
~00 ~ b)女 e)60〜69歳 5
~00 ~ b)女 f)70歳以上 4
0~~ a)有業 ~ ~ 53
0~0 a)有業 ~ a)20〜29歳 11
0~0 a)有業 ~ b)30〜39歳 15
0~0 a)有業 ~ c)40〜49歳 15
0~0 a)有業 ~ d)50〜59歳 9
0~0 a)有業 ~ e)60〜69歳 3
00~ a)有業 a)男 ~ 32
000 a)有業 a)男 a)20〜29歳 0 (ゼロ値置換)
000 a)有業 a)男 b)30〜39歳 0 (ゼロ値置換)
000 a)有業 a)男 c)40〜49歳 0 (ゼロ値置換)
000 a)有業 a)男 d)50〜59歳 0 (ゼロ値置換)
000 a)有業 a)男 e)60〜69歳 0 (ゼロ値置換)
00~ a)有業 b)女 ~ 21
000 a)有業 b)女 a)20〜29歳 0 (ゼロ値置換)
000 a)有業 b)女 b)30〜39歳 0 (ゼロ値置換)
000 a)有業 b)女 c)40〜49歳 0 (ゼロ値置換)
000 a)有業 b)女 d)50〜59歳 0 (ゼロ値置換)
000 a)有業 b)女 e)60〜69歳 0 (ゼロ値置換)
0~~ b)無業 ~ ~ 47
0~0 b)無業 ~ a)20〜29歳 8
0~0 b)無業 ~ b)30〜39歳 9
0~0 b)無業 ~ c)40〜49歳 8
0~0 b)無業 ~ d)50〜59歳 9
0~0 b)無業 ~ e)60〜69歳 6
0~0 b)無業 ~ f)70歳以上 7
00~ b)無業 a)男 ~ 18
000 b)無業 a)男 a)20〜29歳 0 (ゼロ値置換)
000 b)無業 a)男 b)30〜39歳 0 (ゼロ値置換)
000 b)無業 a)男 c)40〜49歳 0 (ゼロ値置換)
000 b)無業 a)男 d)50〜59歳 0 (ゼロ値置換)
000 b)無業 a)男 e)60〜69歳 0 (ゼロ値置換)
000 b)無業 a)男 f)70歳以上 0 (ゼロ値置換)
00~ b)無業 b)女 ~ 29
000 b)無業 b)女 a)20〜29歳 0 (ゼロ値置換)
000 b)無業 b)女 b)30〜39歳 0 (ゼロ値置換)
000 b)無業 b)女 c)40〜49歳 0 (ゼロ値置換)
000 b)無業 b)女 d)50〜59歳 0 (ゼロ値置換)
000 b)無業 b)女 e)60〜69歳 0 (ゼロ値置換)
000 b)無業 b)女 f)70歳以上 0 (ゼロ値置換)
上記の方法により消去秘匿を行ったクロス度数表について、合計と内訳の差分計算と個票形式への変換を行うことで、リスクセルに関する情報を含まない個票形式のデータを得ることができる。
【0062】
7.3.2 多次元度数表の丸め秘匿
(1) 多次元度数表の丸め秘匿
多次元クロス度数表において、度数が安全基準に満たない場合、そのセルに含まれるデータは度数表におけるリスクセル、個票データにおけるリスクレコードとなるため、度数表の丸め処理を行うことで、リスクレコードを含むセルの秘匿を行うことができる。例として、丸め基数5で四捨五入による丸め処理を行う場合は、度数を基数5で除算して小数点以下を四捨五入した値に基数5を乗じることで度数表の丸め処理を行う。
丸め処理の計算式
t(C1,C2, ,・・・,Ci)’ = ROUND( t(C1,C2, ,・・・,Ci) )
注)ROUND( )は、丸め処理を行う関数を表す。
丸め処理の計算結果
F1 F2 ・・・ Fj N’
~ ~ ・・・ ~ t(~,~,・・・,~)’
~ ~ ・・・ C1,j t(~,~,・・・,C1,j)’
~ ~ ・・・ C2,j t(~,~,・・・,C2,j)’
~ ~ ・・・ C3,j t(~,~,・・・,C3,j)’
・・・
~ ~ ・・・ Ci,j t(~,~,・・・,Ci,j)’
・・・
~ C1,2 ・・・ ~ t(~,C1,2,・・・,~)’
~ C2,2 ・・・ ~ t(~,C2,2,・・・,~)’
~ C3,2 ・・・ ~ t(~,C3,2,・・・,~)’
・・・
~ Ci,2 ・・・ ~ t(~,Ci,2,・・・,~)’
・・・
~ C1,2 ・・・ C1,j t(~,C1,2,・・・,C1,j)’
~ C2,2 ・・・ C2,j t(~,C2,2,・・・,C2,j)’
~ C3,2 ・・・ C3,j t(~,C3,2,・・・,C3,j)’
・・・
~ Ci,2 ・・・ Ci,j t(~,Ci,2,・・・Ci,j)’
・・・
C1,1 ~ ・・・ ~ t(C1,1,~ ,・・・,~)’
C2,1 ~ ・・・ ~ t(C2,1,~ ,・・・,~)’
C3,1 ~ ・・・ ~ t(C3,1,~ ,・・・,~)’
・・・
Ci,1 ~ ・・・ ~ t(Ci,1,~ ,・・・,~)’
・・・
C1,1 ~ ・・・ C1,j t(C1,1,~ ,・・・,C1,j)’
C2,1 ~ ・・・ C2,j t(C2,1,~ ,・・・,C2,j)’
C3,1 ~ ・・・ C3,j t(C3,1,~ ,・・・,C3,j)’
・・・
Ci,1 ~ ・・・ Ci,j t(Ci,1,~ ,・・・,Ci,j)’
・・・
C1,1 C1,2 ・・・ ~ t(C1,1,C1,2,・・・,~)’
C2,1 C2,2 ・・・ ~ t(C2,1,C2,2,・・・,~)’
C3,1 C3,2 ・・・ ~ t(C3,1,C3,2,・・・,~)’
・・・
Ci,1 Ci,2 ・・・ ~ t(Ci,1,Ci,2,・・・,~)’
・・・
C1,1 C1,2 ・・・ C1,j n1’
C2,1 C2,2 ・・・ C2,j n2’
C3,1 C3,2 ・・・ C3,j n3’
・・・
Ci,1 Ci,2 ・・・ Ci,j ni’
【0063】
例)多次元クロス度数表の丸め処理(2次元の場合)
F1 F2 Nf (Frequency)
~ ~ (n1+n2+n3+n4+n5+n6)’ = ROUND(n1+n2+n3+n4+n5+n6)
a1 ~ (n1+n2+n3)’ = ROUND(n1+n2+n3)
a2 ~ (n4+n5+n6)’ = ROUND(n4+n5+n6)
~ b1 (n1+n4)’ = ROUND(n1+n4)
~ b2 (n2+n5)’ = ROUND(n2+n5)
~ b3 (n3+n6)’ = ROUND(n3+n6)
a1 b1 (n1)’ = ROUND(n1)
a1 b2 (n2)’ = ROUND(n2)
a1 b3 (n3)’ = ROUND(n3)
a2 b1 (n4)’ = ROUND(n4)
a2 b2 (n5)’ = ROUND(n5)
a2 b3 (n6)’ = ROUND(n6)
注)ROUND( ) は丸め処理を行う関数を表す。
【0064】
例)丸め基数5の四捨五入の場合
度数 丸め値 丸め計算
0 0 Round( 0 / 5 ) * 5 = 0
1 0 Round( 1 / 5 ) * 5 = 0
2 0 Round( 2 / 5 ) * 5 = 0
3 5 Round( 3 / 5 ) * 5 = 5
4 5 Round( 4 / 5 ) * 5 = 5
5 5 Round( 5 / 5 ) * 5 = 5
6 5 Round( 6 / 5 ) * 5 = 5
7 5 Round( 7 / 5 ) * 5 = 5
8 10 Round( 8 / 5 ) * 5 = 10
9 10 Round( 9 / 5 ) * 5 = 10
10 10 Round(10 / 5 ) * 5 = 10
注)Round() は、小数点以下を四捨五入で丸める関数を示す。
【0065】
例)多次元クロス度数表(2次元の場合)
年齢 総数 a)男 b)女
総数 100 50 50
a)20〜29歳 19 10 9
b)30〜39歳 24 13 11
c)40〜49歳 23 12 11
d)50〜59歳 18 8 10
e)60〜69歳 9 4 5
f)70歳以上 7 3 4
度数表の丸め処理(丸め基数5の場合)
年齢 総数 a)男 b)女
総数 100 50 50
a)20〜29歳 20 10 10
b)30〜39歳 25 15 10
c)40〜49歳 25 10 10
d)50〜59歳 20 10 10
e)60〜69歳 10 5 5
f)70歳以上 5 5 5
【0066】
(2) 丸め秘匿の基数と安全性
四捨五入による丸め秘匿に用いる丸め基数は、5以上とする必要がある。これは、5未満の基数で丸め処理を行った場合は十分な秘匿ができない可能性があるためである。丸め基数を5とした場合、丸め値が5となる基の度数は3〜7の範囲で存在しており、基の度数がいくつであるかを丸め値のみから特定することはできない。度数表は個々の属性別のセル値だけではなく、合計値も丸める必要があり、度数表のセルの基の度数が1または2の場合で切捨てとなる場合も他のセルの丸めによる切捨てと切上げが混在することで切捨てとなったセルを特定することはできないため、丸め基数5以上で丸め処理を行った度数表はリスクデータの特定可能性という観点からある程度の安全性が確保できることが期待できる。ただし、個票データの属性別分布によっては丸め基数5でも秘匿強度がやや不十分な場合があり得るため、プログラム上は丸め基数の安全基準をデフォルトで10としている。丸め基数については安全基準をさらに大きく設定することで、より高い安全性を確保することが可能である。
【0067】
丸め処理による丸め誤差は表全体に等確率で発生するため、丸め処理を行うと統計表としての精度は下がるものの有意な歪みは発生しないことが期待でき、有効桁数を十分に確保できれば科学的な観点で歪みのない表として利用することができる。
度数表の丸め処理は統計表を秘匿する方法としては一般的に用いられる手法であるが、その対象は個票データではなく集計済みの統計表であるため、そのままでは個票データの秘匿に利用することはできない。本発明における度数表を個票形式に変換する方法を応用して初めて有効な手法として個票データの秘匿に転用することが可能となる。
本発明では簡便のため単純な丸め処理による秘匿を用いているが、他にも乱数丸め等の手法を転用することも可能である。また、統計表を秘匿する手法は丸め秘匿以外にも多様に存在しており、本発明による度数表を個票形式に変換する方法を応用することで、様々な統計表の秘匿手法を個票データの秘匿手法として転用することが可能となる。
なお、丸め処理の方法には「四捨五入」以外に「切上げ」あるいは「切捨て」を用いることも可能であるが、丸め処理が異なる度数表を作成してしまうと差分によってリスクデータを特定できる可能性が生じるため、度数表の丸め処理の方法は統一して用いる必要がある。
【0068】
(3) 丸め秘匿の脆弱性
多次元クロス度数表は、秘匿手法として丸め処理を行うことで、ある程度の安全性が確保できることが期待できる。しかし、丸め秘匿を行っていない結果表が事前に公表されている場合については、丸め処理を行っていない合計値から内訳の逆算が可能となるケースがある。
例えば、内訳が5と1で合計が6の組合わせの場合、基数5で丸め処理を行った内訳は5と0で合計は5となるが、丸めていない合計が6であることが公表されている場合は、丸めた内訳が5と0となる組合わせは、内訳5と1、または内訳6と0しか存在しないため、1度数のセルが特定される可能性が生じるという問題がある。同様に、10と1、あるいは100と1といった組合わせについても1度数のセルが特定されてしまう可能性がある。
このため、度数表の秘匿処理としては、丸め秘匿のみでは秘匿強度が不十分になることから、他の秘匿手法を組合わせて秘匿補強を行う必要がある。
【0069】
7.3.3 多次元度数表の複合秘匿
多次元クロス度数表の消去秘匿はリスクセルを含む属性項目について、項目組合わせの表単位で消去することになるため、秘匿の安全性を上げるために消去秘匿の安全基準を大きくしてしまうと多次元クロス度数表に含まれる情報が大幅に削られることになり、データの有用性が損なわれることになる。そこで、消去秘匿の安全基準は必要最小限に留めて、丸め秘匿等の補強手法を併用して複合秘匿を行うことで安全性と有用性のバランスを図る必要がある。
複合秘匿の場合の手順としては、多次元クロス度数表の集計を行った上で、(1)消去秘匿、(2)丸め秘匿(複合秘匿)、(3)差分計算、(4)個票形式変換の順で秘匿処理を行うことで秘匿済みの個票データを作成する。
【0070】
例)消去秘匿と丸め秘匿による複合秘匿
(1)多次元クロス度数表の消去秘匿(3次元の場合)
F0符号 F1就業状態 F2性別 F3年齢 n(Frequency合計)
~~~ ~ ~ ~ 100
~~0 ~ ~ a)20〜29歳 19
~~0 ~ ~ b)30〜39歳 24
~~0 ~ ~ c)40〜49歳 23
~~0 ~ ~ d)50〜59歳 18
~~0 ~ ~ e)60〜69歳 9
~~0 ~ ~ f)70歳以上 7
~0~ ~ a)男 ~ 50
~00 ~ a)男 a)20〜29歳 10
~00 ~ a)男 b)30〜39歳 13
~00 ~ a)男 c)40〜49歳 12
~00 ~ a)男 d)50〜59歳 8
~00 ~ a)男 e)60〜69歳 4
~00 ~ a)男 f)70歳以上 3
~0~ ~ b)女 ~ 50
~00 ~ b)女 a)20〜29歳 9
~00 ~ b)女 b)30〜39歳 11
~00 ~ b)女 c)40〜49歳 11
~00 ~ b)女 d)50〜59歳 10
~00 ~ b)女 e)60〜69歳 5
~00 ~ b)女 f)70歳以上 4
0~~ a)有業 ~ ~ 53
0~0 a)有業 ~ a)20〜29歳 11
0~0 a)有業 ~ b)30〜39歳 15
0~0 a)有業 ~ c)40〜49歳 15
0~0 a)有業 ~ d)50〜59歳 9
0~0 a)有業 ~ e)60〜69歳 3
00~ a)有業 a)男 ~ 32
000 a)有業 a)男 a)20〜29歳 0 (ゼロ値置換)
000 a)有業 a)男 b)30〜39歳 0 (ゼロ値置換)
000 a)有業 a)男 c)40〜49歳 0 (ゼロ値置換)
000 a)有業 a)男 d)50〜59歳 0 (ゼロ値置換)
000 a)有業 a)男 e)60〜69歳 0 (ゼロ値置換)
00~ a)有業 b)女 ~ 21
000 a)有業 b)女 a)20〜29歳 0 (ゼロ値置換)
000 a)有業 b)女 b)30〜39歳 0 (ゼロ値置換)
000 a)有業 b)女 c)40〜49歳 0 (ゼロ値置換)
000 a)有業 b)女 d)50〜59歳 0 (ゼロ値置換)
000 a)有業 b)女 e)60〜69歳 0 (ゼロ値置換)
0~~ b)無業 ~ ~ 47
0~0 b)無業 ~ a)20〜29歳 8
0~0 b)無業 ~ b)30〜39歳 9
0~0 b)無業 ~ c)40〜49歳 8
0~0 b)無業 ~ d)50〜59歳 9
0~0 b)無業 ~ e)60〜69歳 6
0~0 b)無業 ~ f)70歳以上 7
00~ b)無業 a)男 ~ 18
000 b)無業 a)男 a)20〜29歳 0 (ゼロ値置換)
000 b)無業 a)男 b)30〜39歳 0 (ゼロ値置換)
000 b)無業 a)男 c)40〜49歳 0 (ゼロ値置換)
000 b)無業 a)男 d)50〜59歳 0 (ゼロ値置換)
000 b)無業 a)男 e)60〜69歳 0 (ゼロ値置換)
000 b)無業 a)男 f)70歳以上 0 (ゼロ値置換)
00~ b)無業 b)女 ~ 29
000 b)無業 b)女 a)20〜29歳 0 (ゼロ値置換)
000 b)無業 b)女 b)30〜39歳 0 (ゼロ値置換)
000 b)無業 b)女 c)40〜49歳 0 (ゼロ値置換)
000 b)無業 b)女 d)50〜59歳 0 (ゼロ値置換)
000 b)無業 b)女 e)60〜69歳 0 (ゼロ値置換)
000 b)無業 b)女 f)70歳以上 0 (ゼロ値置換)
【0071】
(2) 多次元度数表の丸め秘匿(丸め基数5の場合)
F0符号 F1就業状態 F2性別 F3年齢 n(Frequency合計)
~~~ ~ ~ ~ 100
~~0 ~ ~ a)20〜29歳 20
~~0 ~ ~ b)30〜39歳 25
~~0 ~ ~ c)40〜49歳 25
~~0 ~ ~ d)50〜59歳 20
~~0 ~ ~ e)60〜69歳 10
~~0 ~ ~ f)70歳以上 5
~0~ ~ a)男 ~ 50
~00 ~ a)男 a)20〜29歳 10
~00 ~ a)男 b)30〜39歳 15
~00 ~ a)男 c)40〜49歳 10
~00 ~ a)男 d)50〜59歳 10
~00 ~ a)男 e)60〜69歳 5
~00 ~ a)男 f)70歳以上 5
~0~ ~ b)女 ~ 50
~00 ~ b)女 a)20〜29歳 10
~00 ~ b)女 b)30〜39歳 10
~00 ~ b)女 c)40〜49歳 10
~00 ~ b)女 d)50〜59歳 10
~00 ~ b)女 e)60〜69歳 5
~00 ~ b)女 f)70歳以上 5
0~~ a)有業 ~ ~ 55
0~0 a)有業 ~ a)20〜29歳 10
0~0 a)有業 ~ b)30〜39歳 15
0~0 a)有業 ~ c)40〜49歳 15
0~0 a)有業 ~ d)50〜59歳 10
0~0 a)有業 ~ e)60〜69歳 5
00~ a)有業 a)男 ~ 30
000 a)有業 a)男 a)20〜29歳 0
000 a)有業 a)男 b)30〜39歳 0
000 a)有業 a)男 c)40〜49歳 0
000 a)有業 a)男 d)50〜59歳 0
000 a)有業 a)男 e)60〜69歳 0
00~ a)有業 b)女 ~ 20
000 a)有業 b)女 a)20〜29歳 0
000 a)有業 b)女 b)30〜39歳 0
000 a)有業 b)女 c)40〜49歳 0
000 a)有業 b)女 d)50〜59歳 0
000 a)有業 b)女 e)60〜69歳 0
0~~ b)無業 ~ ~ 45
0~0 b)無業 ~ a)20〜29歳 10
0~0 b)無業 ~ b)30〜39歳 10
0~0 b)無業 ~ c)40〜49歳 10
0~0 b)無業 ~ d)50〜59歳 10
0~0 b)無業 ~ e)60〜69歳 5
0~0 b)無業 ~ f)70歳以上 5
00~ b)無業 a)男 ~ 20
000 b)無業 a)男 a)20〜29歳 0
000 b)無業 a)男 b)30〜39歳 0
000 b)無業 a)男 c)40〜49歳 0
000 b)無業 a)男 d)50〜59歳 0
000 b)無業 a)男 e)60〜69歳 0
000 b)無業 a)男 f)70歳以上 0
00~ b)無業 b)女 ~ 30
000 b)無業 b)女 a)20〜29歳 0
000 b)無業 b)女 b)30〜39歳 0
000 b)無業 b)女 c)40〜49歳 0
000 b)無業 b)女 d)50〜59歳 0
000 b)無業 b)女 e)60〜69歳 0
000 b)無業 b)女 f)70歳以上 0
【0072】
(3)複合秘匿済多次元度数表の差分計算(属性符号「〜」は差分を示す。)
F1就業状態 F2性別 F3年齢 n(Frequency合計)
a)有業 a)男 〜 30
a)有業 b)女 〜 20
a)有業 〜 a)20〜29歳 10
a)有業 〜 b)30〜39歳 15
a)有業 〜 c)40〜49歳 15
a)有業 〜 d)50〜59歳 10
a)有業 〜 e)60〜69歳 5
a)有業 〜 〜 -50
b)無業 a)男 〜 20
b)無業 b)女 〜 30
b)無業 〜 a)20〜29歳 10
b)無業 〜 b)30〜39歳 10
b)無業 〜 c)40〜49歳 10
b)無業 〜 d)50〜59歳 10
b)無業 〜 e)60〜69歳 5
b)無業 〜 f)70歳以上 5
b)無業 〜 〜 -55
〜 a)男 a)20〜29歳 10
〜 a)男 b)30〜39歳 15
〜 a)男 c)40〜49歳 10
〜 a)男 d)50〜59歳 10
〜 a)男 e)60〜69歳 5
〜 a)男 f)70歳以上 5
〜 a)男 〜 -55
〜 b)女 a)20〜29歳 10
〜 b)女 b)30〜39歳 10
〜 b)女 c)40〜49歳 10
〜 b)女 d)50〜59歳 10
〜 b)女 e)60〜69歳 5
〜 b)女 f)70歳以上 5
〜 b)女 〜 -50
〜 〜 a)20〜29歳 -20
〜 〜 b)30〜39歳 -25
〜 〜 c)40〜49歳 -20
〜 〜 d)50〜59歳 -20
〜 〜 e)60〜69歳 -10
〜 〜 f)70歳以上 -10
〜 〜 〜 105
【0073】
(4)個票データ形式変換(縮尺1の場合)
F1就業状態 F2性別 F3年齢 Weight
a)有業 a)男 〜 1 ( 30レコード出力)
a)有業 b)女 〜 1 ( 20レコード出力)
a)有業 〜 a)20〜29歳 1 ( 10レコード出力)
a)有業 〜 b)30〜39歳 1 ( 15レコード出力)
a)有業 〜 c)40〜49歳 1 ( 15レコード出力)
a)有業 〜 d)50〜59歳 1 ( 10レコード出力)
a)有業 〜 e)60〜69歳 1 ( 5レコード出力)
a)有業 〜 〜 -1 ( 50レコード出力)
b)無業 a)男 〜 1 ( 20レコード出力)
b)無業 b)女 〜 1 ( 30レコード出力)
b)無業 〜 a)20〜29歳 1 ( 10レコード出力)
b)無業 〜 b)30〜39歳 1 ( 10レコード出力)
b)無業 〜 c)40〜49歳 1 ( 10レコード出力)
b)無業 〜 d)50〜59歳 1 ( 10レコード出力)
b)無業 〜 e)60〜69歳 1 ( 5レコード出力)
b)無業 〜 f)70歳以上 1 ( 5レコード出力)
b)無業 〜 〜 -1 ( 55レコード出力)
〜 a)男 a)20〜29歳 1 ( 10レコード出力)
〜 a)男 b)30〜39歳 1 ( 15レコード出力)
〜 a)男 c)40〜49歳 1 ( 10レコード出力)
〜 a)男 d)50〜59歳 1 ( 10レコード出力)
〜 a)男 e)60〜69歳 1 ( 5レコード出力)
〜 a)男 f)70歳以上 1 ( 5レコード出力)
〜 a)男 〜 -1 ( 55レコード出力)
〜 b)女 a)20〜29歳 1 ( 10レコード出力)
〜 b)女 b)30〜39歳 1 ( 10レコード出力)
〜 b)女 c)40〜49歳 1 ( 10レコード出力)
〜 b)女 d)50〜59歳 1 ( 10レコード出力)
〜 b)女 e)60〜69歳 1 ( 5レコード出力)
〜 b)女 f)70歳以上 1 ( 5レコード出力)
〜 b)女 〜 -1 ( 50レコード出力)
〜 〜 a)20〜29歳 -1 ( 20レコード出力)
〜 〜 b)30〜39歳 -1 ( 25レコード出力)
〜 〜 c)40〜49歳 -1 ( 20レコード出力)
〜 〜 d)50〜59歳 -1 ( 20レコード出力)
〜 〜 e)60〜69歳 -1 ( 10レコード出力)
〜 〜 f)70歳以上 -1 ( 10レコード出力)
〜 〜 〜 1 (105レコード出力)
【0074】
7.4 多次元クロス秘匿度数表の個票データ形式変換
秘匿処理を行った多次元クロス秘匿度数表は、差分計算を行った上で個票データ形式に変換処理を行う。
【0075】
(1)差分計算
丸め処理を行った度数表は丸め誤差のため、総数と内訳合計が一致しない場合が多い。そこで、総数と内訳合計の差分について計算を行う。
差分計算については、多次元クロス度数表の逆処理により再帰計算を行う。すなわち、第1番目の属性項目について合計符号(“〜”)の度数をゼロ値、それ以外の度数をマイナスとして属性項目を合計符号(“〜”)に置き換えたレコードを入力データのレコードに追加して出力し、次にこの出力データを入力データとして用いる再帰処理により、第2番目の属性項目について合計符号(“〜”)の度数をゼロ値、それ以外の度数をマイナスとして属性項目を合計符号(“〜”)に置き換えたレコードを入力データのレコードに追加して出力し、これを全ての属性項目について第j番目まで繰り返すことで多次元クロス度数表の立体的な差分計算を行う。差分計算において総数符号(“〜”)は差分を示す差分符号として扱い、計算後にnull値に置換えを行う。
なお、プログラム上は計算量と計算時間を節約するため、再帰計算の都度、同一属性レコードごとに出力データの度数について足し上げ計算を行っている。また、ここでは再帰計算による多次元クロス度数表の差分計算について説明しているが、属性項目の全ての組合わせ別に差分を求める方法であれば、再帰計算を用いない方法で計算してもよい。
【0076】
第1番目の再帰差分計算
再帰計算による多次元クロス度数表データについて丸め処理を行って、入力データとして用いる。
[前段]入力データを変更せずに出力
F1 F2 ・・・ Fj n’
~ ~ ・・・ ~ t(~,~,・・・,~)’ 第1項が~
~ ~ ・・・ C1,j t(~,~,・・・,C1,j)’ 第1項が~
~ ~ ・・・ C2,j t(~,~,・・・,C2,j)’ 第1項が~
~ ~ ・・・ C3,j t(~,~,・・・,C3,j)’ 第1項が~
・・・
~ ~ ・・・ Ci,j t(~,~,・・・,Ci,j)’ 第1項が~
・・・
~ C1,2 ・・・ ~ t(~,C1,2,・・・,~)’ 第1項が~
~ C2,2 ・・・ ~ t(~,C2,2,・・・,~)’ 第1項が~
~ C3,2 ・・・ ~ t(~,C3,2,・・・,~)’ 第1項が~
・・・
~ Ci,2 ・・・ ~ t(~,Ci,2,・・・,~)’ 第1項が~
・・・
~ C1,2 ・・・ C1,j t(~,C1,2,・・・,C1,j)’ 第1項が~
~ C2,2 ・・・ C2,j t(~,C2,2,・・・,C2,j)’ 第1項が~
~ C3,2 ・・・ C3,j t(~,C3,2,・・・,C3,j)’ 第1項が~
・・・
~ Ci,2 ・・・ Ci,j t(~,Ci,2,・・・,Ci,j)’ 第1項が~
・・・
C1,1 ~ ・・・ ~ t(C1,1,~ ,・・・,~)’ 第1項がC1,1
C2,1 ~ ・・・ ~ t(C2,1,~ ,・・・,~)’ 第1項がC2,1
C3,1 ~ ・・・ ~ t(C3,1,~ ,・・・,~)’ 第1項がC3,1
・・・
Ci,1 ~ ・・・ ~ t(Ci,1,~ ,・・・,~)’ 第1項がCi,1
・・・
C1,1 ~ ・・・ C1,j t(C1,1,~ ,・・・,C1,j)’ 第1項がC1,1
C2,1 ~ ・・・ C2,j t(C2,1,~ ,・・・,C2,j)’ 第1項がC2,1
C3,1 ~ ・・・ C3,j t(C3,1,~ ,・・・,C3,j)’ 第1項がC3,1
・・・
Ci,1 ~ ・・・ Ci,j t(Ci,1,~ ,・・・,Ci,j)’ 第1項がCi,1
・・・
C1,1 C1,2 ・・・ ~ t(C1,1,C1,2,・・・,~)’ 第1項がC1,1
C2,1 C2,2 ・・・ ~ t(C2,1,C2,2,・・・,~)’ 第1項がC2,1
C3,1 C3,2 ・・・ ~ t(C3,1,C3,2,・・・,~)’ 第1項がC3,1
・・・
Ci,1 Ci,2 ・・・ ~ t(Ci,1,Ci,2,・・・,~)’ 第1項がCi,1
・・・
C1,1 C1,2 ・・・ C1,j n1’ 第1項がC1,1
C2,1 C2,2 ・・・ C2,j n2’ 第1項がC2,1
C3,1 C3,2 ・・・ C3,j n3’ 第1項がC3,1
・・・
Ci,1 Ci,2 ・・・ Ci,j ni’ 第1項がCi,1
[後段]入力データを変更して出力(変更前)
~ ~ ・・・ ~ 0 第1項が~
~ ~ ・・・ C1,j 0 第1項が~
~ ~ ・・・ C2,j 0 第1項が~
~ ~ ・・・ C3,j 0 第1項が~
・・・
~ ~ ・・・ Ci,j 0 第1項が~
・・・
~ C1,2 ・・・ ~ 0 第1項が~
~ C2,2 ・・・ ~ 0 第1項が~
~ C3,2 ・・・ ~ 0 第1項が~
・・・
~ Ci,2 ・・・ ~ 0 第1項が~
・・・
~ C1,2 ・・・ C1,j 0 第1項が~
~ C2,2 ・・・ C2,j 0 第1項が~
~ C3,2 ・・・ C3,j 0 第1項が~
・・・
~ Ci,2 ・・・ Ci,j 0 第1項が~
・・・
~ ~ ・・・ ~ -t(C1,1,~ ,・・・,~)’ 第1項がC1,1
~ ~ ・・・ ~ -t(C2,1,~ ,・・・,~)’ 第1項がC2,1
~ ~ ・・・ ~ -t(C3,1,~ ,・・・,~)’ 第1項がC3,1
・・・
~ ~ ・・・ ~ -t(Ci,1,~ ,・・・,~)’ 第1項がCi,1
・・・
~ ~ ・・・ C1,j -t(C1,1,~ ,・・・,C1,j)’ 第1項がC1,1
~ ~ ・・・ C2,j -t(C2,1,~ ,・・・,C2,j)’ 第1項がC2,1
~ ~ ・・・ C3,j -t(C3,1,~ ,・・・,C3,j)’ 第1項がC3,1
・・・
~ ~ ・・・ Ci,j -t(Ci,1,~ ,・・・,Ci,j)’ 第1項がCi,1
・・・
~ C1,2 ・・・ ~ -t(C1,1,C1,2,・・・,~)’ 第1項がC1,1
~ C2,2 ・・・ ~ -t(C2,1,C2,2,・・・,~)’ 第1項がC2,1
~ C3,2 ・・・ ~ -t(C3,1,C3,2,・・・,~)’ 第1項がC3,1
・・・
~ Ci,2 ・・・ ~ -t(Ci,1,Ci,2,・・・,~)’ 第1項がCi,1
・・・
~ C1,2 ・・・ C1,j -n1’ 第1項がC1,1
~ C2,2 ・・・ C2,j -n2’ 第1項がC2,1
~ C3,2 ・・・ C3,j -n3’ 第1項がC3,1
・・・
~ Ci,2 ・・・ Ci,j -ni’ 第1項がCi,1
上記の出力データについて、同一属性別に度数Nの足し上げを行う。
【0077】
第2番目の再帰差分計算
入力データとして、第1番目の再帰差分計算結果を入力に用いる。
[前段]入力データを変更せずに出力
F1 F2 ・・・ Fj n’
~ ~ ・・・ ~ t(~,~,・・・,~)’ 第2項が~
~ ~ ・・・ C1,j t(~,~,・・・,C1,j)’ 第2項が~
~ ~ ・・・ C2,j t(~,~,・・・,C2,j)’ 第2項が~
~ ~ ・・・ C3,j t(~,~,・・・,C3,j)’ 第2項が~
・・・
~ ~ ・・・ Ci,j t(~,~,・・・,Ci,j)’ 第2項が~
・・・
~ C1,2 ・・・ ~ t(~,C1,2,・・・,~)’ 第2項がC1,2
~ C2,2 ・・・ ~ t(~,C2,2,・・・,~)’ 第2項がC2,2
~ C3,2 ・・・ ~ t(~,C3,2,・・・,~)’ 第2項がC3,2
・・・
~ Ci,2 ・・・ ~ t(~,Ci,2,・・・,~)’ 第2項がCi,2
・・・
~ C1,2 ・・・ C1,j t(~,C1,2,・・・,C1,j)’ 第2項がC1,2
~ C2,2 ・・・ C2,j t(~,C2,2,・・・,C2,j)’ 第2項がC2,2
~ C3,2 ・・・ C3,j t(~,C3,2,・・・,C3,j)’ 第2項がC3,2
・・・
~ Ci,2 ・・・ Ci,j t(~,Ci,2,・・・,Ci,j)’ 第2項がCi,2
・・・
C1,1 ~ ・・・ ~ t(C1,1,~ ,・・・,~)’ 第2項が~
C2,1 ~ ・・・ ~ t(C2,1,~ ,・・・,~)’ 第2項が~
C3,1 ~ ・・・ ~ t(C3,1,~ ,・・・,~)’ 第2項が~
・・・
Ci,1 ~ ・・・ ~ t(Ci,1,~ ,・・・,~)’ 第2項が~
・・・
C1,1 ~ ・・・ C1,j t(C1,1,~ ,・・・,C1,j)’第2項が~
C2,1 ~ ・・・ C2,j t(C2,1,~ ,・・・,C2,j)’第2項が~
C3,1 ~ ・・・ C3,j t(C3,1,~ ,・・・,C3,j)’第2項が~
・・・
Ci,1 ~ ・・・ Ci,j t(Ci,1,~ ,・・・,Ci,j)’第2項が~
・・・
C1,1 C1,2 ・・・ ~ t(C1,1,C1,2,・・・,~)’ 第2項がC1,2
C2,1 C2,2 ・・・ ~ t(C2,1,C2,2,・・・,~)’ 第2項がC2,2
C3,1 C3,2 ・・・ ~ t(C3,1,C3,2,・・・,~)’ 第2項が~
・・・
Ci,1 Ci,2 ・・・ ~ t(Ci,1,Ci,2,・・・,~)’ 第2項がCi,2
・・・
C1,1 C1,2 ・・・ C1,j n1’ 第2項がC1,2
C2,1 C2,2 ・・・ C2,j n2’ 第2項がC2,2
C3,1 C3,2 ・・・ C3,j n3’ 第2項がC3,2
・・・
Ci,1 Ci,2 ・・・ Ci,j ni’ 第2項がCi,2
~ ~ ・・・ ~ 0 第2項が~
~ ~ ・・・ C1,j 0 第2項が~
~ ~ ・・・ C2,j 0 第2項が~
~ ~ ・・・ C3,j 0 第2項が~
・・・
~ ~ ・・・ Ci,j 0 第2項が~
・・・
~ C1,2 ・・・ ~ 0 第2項がC1,2
~ C2,2 ・・・ ~ 0 第2項がC2,2
~ C3,2 ・・・ ~ 0 第2項がC3,2
・・・
~ Ci,2 ・・・ ~ 0 第2項がCi,2
・・・
~ C1,2 ・・・ C1,j 0 第2項がC1,2
~ C2,2 ・・・ C2,j 0 第2項がC2,2
~ C3,2 ・・・ C3,j 0 第2項がC3,2
・・・
~ Ci,2 ・・・ Ci,j 0 第2項がCi,2
・・・
~ ~ ・・・ ~ -t(C1,1,~ ,・・・,~)’ 第2項が~
~ ~ ・・・ ~ -t(C2,1,~ ,・・・,~)’ 第2項が~
~ ~ ・・・ ~ -t(C3,1,~ ,・・・,~)’ 第2項が~
・・・
~ ~ ・・・ ~ -t(Ci,1,~ ,・・・,~)’ 第2項が~
・・・
~ ~ ・・・ C1,j -t(C1,1,~ ,・・・,C1,j)’第2項が~
~ ~ ・・・ C2,j -t(C2,1,~ ,・・・,C2,j)’第2項が~
~ ~ ・・・ C3,j -t(C3,1,~ ,・・・,C3,j)’第2項が~
・・・
~ ~ ・・・ Ci,j -t(Ci,1,~ ,・・・,Ci,j)’第2項が~
・・・
~ C1,2 ・・・ ~ -t(C1,1,C1,2,・・・,~)’ 第2項がC1,2
~ C2,2 ・・・ ~ -t(C2,1,C2,2,・・・,~)’ 第2項がC2,2
~ C3,2 ・・・ ~ -t(C3,1,C3,2,・・・,~)’ 第2項がC3,2
・・・
~ Ci,2 ・・・ ~ -t(Ci,1,Ci,2,・・・,~)’ 第2項がCi,2
・・・
~ C1,2 ・・・ C1,j -n1’ 第2項がC1,2
~ C2,2 ・・・ C2,j -n2’ 第2項がC2,2
~ C3,2 ・・・ C3,j -n3’ 第2項がC3,2
・・・
~ Ci,2 ・・・ Ci,j -ni’ 第2項がCi,2
【0078】
[後段]入力データを変更して出力(変更前)
~ ~ ・・・ ~ 0 第2項が~
~ ~ ・・・ C1,j 0 第2項が~
~ ~ ・・・ C2,j 0 第2項が~
~ ~ ・・・ C3,j 0 第2項が~
・・・
~ ~ ・・・ Ci,j 0 第2項が~
・・・
~ ~ ・・・ ~ -t(~,C1,2,・・・,~)’ 第2項がC1,2
~ ~ ・・・ ~ -t(~,C2,2,・・・,~)’ 第2項がC2,2
~ ~ ・・・ ~ -t(~,C3,2,・・・,~)’ 第2項がC3,2
・・・
~ ~ ・・・ ~ -t(~,Ci,2,・・・,~)’ 第2項がCi,2
・・・
~ ~ ・・・ C1,j -t(~,C1,2,・・・,C1,j)’ 第2項がC1,2
~ ~ ・・・ C2,j -t(~,C2,2,・・・,C2,j)’ 第2項がC2,2
~ ~ ・・・ C3,j -t(~,C3,2,・・・,C3,j)’ 第2項がC3,2
・・・
~ ~ ・・・ Ci,j -t(~,Ci,2,・・・,Ci,j)’ 第2項がCi,2
・・・
C1,1 ~ ・・・ ~ 0 第2項が~
C2,1 ~ ・・・ ~ 0 第2項が~
C3,1 ~ ・・・ ~ 0 第2項が~
・・・
Ci,1 ~ ・・・ ~ 0 第2項が~
・・・
C1,1 ~ ・・・ C1,j 0 第2項が~
C2,1 ~ ・・・ C2,j 0 第2項が~
C3,1 ~ ・・・ C3,j 0 第2項が~
・・・
Ci,1 ~ ・・・ Ci,j 0 第2項が~
・・・
C1,1 ~ ・・・ ~ -t(C1,1,C1,2,・・・,~)’ 第2項がC1,2
C2,1 ~ ・・・ ~ -t(C2,1,C2,2,・・・,~)’ 第2項がC2,2
C3,1 ~ ・・・ ~ -t(C3,1,C3,2,・・・,~)’ 第2項が~
・・・
Ci,1 ~ ・・・ ~ -t(Ci,1,Ci,2,・・・,~)’ 第2項がCi,2
・・・
C1,1 ~ ・・・ C1,j -n1’ 第2項がC1,2
C2,1 ~ ・・・ C2,j -n2’ 第2項がC2,2
C3,1 ~ ・・・ C3,j -n3’ 第2項がC3,2
・・・
Ci,1 ~ ・・・ Ci,j -ni’ 第2項がCi,2
~ ~ ・・・ ~ 0 第2項が~
~ ~ ・・・ C1,j 0 第2項が~
~ ~ ・・・ C2,j 0 第2項が~
~ ~ ・・・ C3,j 0 第2項が~
・・・
~ ~ ・・・ Ci,j 0 第2項が~
・・・
~ ~ ・・・ ~ -0 第2項がC1,2
~ ~ ・・・ ~ -0 第2項がC2,2
~ ~ ・・・ ~ -0 第2項がC3,2
・・・
~ ~ ・・・ ~ -0 第2項がCi,2
・・・
~ ~ ・・・ C1,j -0 第2項がC1,2
~ ~ ・・・ C2,j -0 第2項がC2,2
~ ~ ・・・ C3,j -0 第2項がC3,2
・・・
~ ~ ・・・ Ci,j -0 第2項がCi,2
・・・
~ ~ ・・・ ~ 0 第2項が~
~ ~ ・・・ ~ 0 第2項が~
~ ~ ・・・ ~ 0 第2項が~
・・・
~ ~ ・・・ ~ 0 第2項が~
・・・
~ ~ ・・・ C1,j 0 第2項が~
~ ~ ・・・ C2,j 0 第2項が~
~ ~ ・・・ C3,j 0 第2項が~
・・・
~ ~ ・・・ Ci,j 0 第2項が~
・・・
~ ~ ・・・ ~ -(-t(C1,1,C1,2,・・・,~)’) 第2項がC1,2
~ ~ ・・・ ~ -(-t(C2,1,C2,2,・・・,~)’) 第2項がC2,2
~ ~ ・・・ ~ -(-t(C3,1,C3,2,・・・,~)’) 第2項がC3,2
・・・
~ ~ ・・・ ~ -(-t(Ci,1,Ci,2,・・・,~)’) 第2項がCi,2
・・・
~ ~ ・・・ C1,j -(-n1’) 第2項がC1,2
~ ~ ・・・ C2,j -(-n2’) 第2項がC2,2
~ ~ ・・・ C3,j -(-n3’) 第2項がC3,2
・・・
~ ~ ・・・ Ci,j -(-ni’) 第2項がCi,2
上記の出力データについて、同一属性別に度数N’の足し上げを行う。
【0079】
第j番目の再帰差分計算
入力データとして、第j−1番目の再帰差分計算結果を入力に用いる。
[前段]入力データを変更せずに出力
F1 F2 ・・・ Fj n’
~ ~ ・・・ ~ t(~,~,・・・,~)’ 第j項が~
~ ~ ・・・ C1,j t(~,~,・・・,C1,j)’ 第j項がC1,j
~ ~ ・・・ C2,j t(~,~,・・・,C2,j)’ 第j項がC2,j
~ ~ ・・・ C3,j t(~,~,・・・,C3,j)’ 第j項がC3,j
・・・
~ ~ ・・・ Ci,j t(~,~,・・・,Ci,j)’ 第j項がCi,j
・・・
~ C1,2 ・・・ ~ t(~,C1,2,・・・,~)’ 第j項が~
~ C2,2 ・・・ ~ t(~,C2,2,・・・,~)’ 第j項が~
~ C3,2 ・・・ ~ t(~,C3,2,・・・,~)’ 第j項が~
・・・
~ Ci,2 ・・・ ~ t(~,Ci,2,・・・,~)’ 第j項が~
・・・
~ C1,2 ・・・ C1,j t(~,C1,2,・・・,C1,j)’ 第j項がC1,j
~ C2,2 ・・・ C2,j t(~,C2,2,・・・,C2,j)’ 第j項がC2,j
~ C3,2 ・・・ C3,j t(~,C3,2,・・・,C3,j)’ 第j項がC3,j
・・・
~ Ci,2 ・・・ Ci,j t(~,Ci,2,・・・,Ci,j)’ 第j項がCi,j
・・・(以下省略)
[後段]入力データを変更して出力(変更前)
~ ~ ・・・ ~ 0 第j項が~
~ ~ ・・・ ~ -(t(~,~,・・・,C1,j)’) 第j項がC1,j
~ ~ ・・・ ~ -(t(~,~,・・・,C2,j)’) 第j項がC2,j
~ ~ ・・・ ~ -(t(~,~,・・・,C3,j)’) 第j項がC3,j
・・・
~ ~ ・・・ ~ -(t(~,~,・・・,Ci,j)’) 第j項がCi,j
・・・
~ C1,2 ・・・ ~ 0 第j項が~
~ C2,2 ・・・ ~ 0 第j項が~
~ C3,2 ・・・ ~ 0 第j項が~
・・・
~ Ci,2 ・・・ ~ 0 第j項が~
・・・
~ C1,2 ・・・ ~ -(t(~,C1,2,・・・,C1,j)’) 第j項がC1,j
~ C2,2 ・・・ ~ -(t(~,C2,2,・・・,C2,j)’) 第j項がC2,j
~ C3,2 ・・・ ~ -(t(~,C3,2,・・・,C3,j)’) 第j項がC3,j
・・・
~ Ci,2 ・・・ ~ -(t(~,Ci,2,・・・,Ci,j)’) 第j項がCi,j
・・・(以下省略)
上記の出力データについて、同一属性別に度数n’の足し上げを行う。
【0080】
例)
属性項目F1(a1,a2)とF2(b1,b2,b3)の2次元クロス度数表について、丸め処理後に差分計算を行う場合
F1 F2 n(Frequency合計)
~ ~ (n1+n2+n3+n4+n5+n6)’
a1 ~ (n1+n2+n3)’
a2 ~ (n4+n5+n6)’
~ b1 (n1+n4)’
~ b2 (n2+n5)’
~ b3 (n3+n6)’
a1 b1 (n1)’
a1 b2 (n2)’
a1 b3 (n3)’
a2 b1 (n4)’
a2 b2 (n5)’
a2 b3 (n6)’
【0081】
第1番目の再帰差分計算
F1 F2 n’
[前段]
~ ~ +(n1+n2+n3+n4+n5+n6)’
a1 ~ +(n1+n2+n3)’
a2 ~ +(n4+n5+n6)’
~ b1 +(n1+n4)’
~ b2 +(n2+n5)’
~ b3 +(n3+n6)’
a1 b1 +(n1)’
a1 b2 +(n2)’
a1 b3 +(n3)’
a2 b1 +(n4)’
a2 b2 +(n5)’
a2 b3 +(n6)’
[後段]
~ ~ 0
~ ~ -(n1+n2+n3)’
~ ~ -(n4+n5+n6)’
~ b1 0
~ b2 0
~ b3 0
~ b1 -(n1)’
~ b2 -(n2)’
~ b3 -(n3)’
~ b1 -(n4)’
~ b2 -(n5)’
~ b3 -(n6)’
上記の出力データについて、同一属性別に度数n’の足し上げを行う。
第1番目の再帰差分計算結果
F1 F2 n’
~ ~ +(n1+n2+n3+n4+n5+n6)’ - (n1+n2+n3)’ - (n4+n5+n6)’
~ b1 +(n1+n4)’ - (n1)’ - (n4)’
~ b2 +(n2+n5)’ - (n2)’ - (n5)’
~ b3 +(n3+n6)’ - (n3)’ - (n6)’
a1 ~ +(n1+n2+n3)’
a2 ~ +(n4+n5+n6)’
a1 b1 +(n1)’
a1 b2 +(n2)’
a1 b3 +(n3)’
a2 b1 +(n4)’
a2 b2 +(n5)’
a2 b3 +(n6)’
【0082】
第2番目の再帰差分計算
F1 F2 n’
[前段]
~ ~ +(n1+n2+n3+n4+n5+n6)’-(n1+n2+n3)’-(n4+n5+n6)’
a1 ~ +(n1+n2+n3)’
a2 ~ +(n4+n5+n6)’
~ b1 +(n1+n4)’-(n1)’-(n4)’
~ b2 +(n2+n5)’-(n2)’-(n5)’
~ b3 +(n3+n6)’-(n3)’-(n6)’
a1 b1 +(n1)’
a1 b2 +(n2)’
a1 b3 +(n3)’
a2 b1 +(n4)’
a2 b2 +(n5)’
a2 b3 +(n6)’
[後段]
~ ~ 0
a1 ~ 0
a2 ~ 0
~ ~ -(+(n1+n4)’-(n1)’-(n4)’)
~ ~ -(+(n2+n5)’-(n2)’-(n5)’)
~ ~ -(+(n3+n6)’-(n3)’-(n6)’)
a1 ~ -(n1)’
a1 ~ -(n2)’
a1 ~ -(n3)’
a2 ~ -(n4)’
a2 ~ -(n5)’
a2 ~ -(n6)’
上記の出力データについて、同一属性別に度数n’の足し上げを行う。
第2番目の再帰差分計算結果
F1 F2 n’
~ ~ +(n1+n2+n3+n4+n5+n6)’-(n1+n2+n3)’-(n4+n5+n6)’
-(n1+n4)’+(n1)’+(n4)’-(n2+n5)’+(n2)’+(n5)’
-(n3+n6)’+(n3)’+(n6)’
a1 ~ +(n1+n2+n3)’-(n1)’-(n2)’-(n3)’
a2 ~ +(n4+n5+n6)’-(n4)’-(n5)’-(n6)’
~ b1 +(n1+n4)’-(n1)’-(n4)’
~ b2 +(n2+n5)’-(n2)’-(n5)’
~ b3 +(n3+n6)’-(n3)’-(n6)’
a1 b1 +(n1)’
a1 b2 +(n2)’
a1 b3 +(n3)’
a2 b1 +(n4)’
a2 b2 +(n5)’
a2 b3 +(n6)’
【0083】
(2) 個票データ形式変換
差分計算を行った多次元クロス度数表について、個票データ形式に変換を行う。その際に、総数よりも内訳合計が大きい場合は差分が負値になるため、負値のセルについてはWeightの値をマイナスとすることで総数と内訳合計が一致するように変換を行う。
個票形式への変換は、差分表をセルごとの属性項目と度数を用いて1セルを1レコードとするセルデータ形式で作成し、次にセルデータについてセルごとの属性レコードを度数分出力することで個票データ形式に変換する。
【0084】
差分表セルデータ
F1 F2 ・・・ Fj n’
C1,1 C1,2 ・・・ C1,j n1
C2,1 C2,2 ・・・ C2,j n2
・・・
Ci,1 Ci,2 ・・・ Ci,j ni
個票形式データ
F1 F2 ・・・ Fj Weight
C1,1 C1,2 ・・・ C1,j 1
C1,1 C1,2 ・・・ C1,j 1
・・・
C1,1 C1,2 ・・・ C1,j 1 (n1回レコード出力)
C2,1 C2,2 ・・・ C2,j 1
C2,1 C2,2 ・・・ C2,j 1
・・・
C2,1 C2,2 ・・・ C2,j 1 (n2回レコード出力)
・・・
Ci,1 Ci,2 ・・・ Ci,j 1
Ci,1 Ci,2 ・・・ Ci,j 1
・・・
Ci,1 Ci,2 ・・・ Ci,j 1 (ni回レコード出力)
【0085】
秘匿処理を行って得られた個票データ形式の秘匿データについて、度数集計を行うと基の個票データを集計して丸め処理を行った度数表と一致する度数表を得ることができる。秘匿データは丸め処理を行った度数表を変換して作成するため、丸め処理を行った度数表が安全であれば得られた秘匿データも安全であるといえる。
下記の例では、2次元の個票データについてクロス度数表の集計を行った上で、(1)丸め処理、(2)差分計算、(3)差分表、(4)セルデータ形式、(5)個票データ形式の順に秘匿処理を行っている。
【0086】
例)多次元クロス度数表(2次元の場合)
年齢 総数 a)男 b)女
総数 100 50 50
a)20〜29歳 19 10 9
b)30〜39歳 24 13 11
c)40〜49歳 23 12 11
d)50〜59歳 18 8 10
e)60〜69歳 9 4 5
f)70歳以上 7 3 4
(1)度数表の丸め処理(丸め基数5の場合)
年齢 総数 a)男 b)女
総数 100 50 50
a)20〜29歳 20 10 10
b)30〜39歳 25 15 10
c)40〜49歳 25 10 10
d)50〜59歳 20 10 10
e)60〜69歳 10 5 5
f)70歳以上 5 5 5
(2)差分計算(2次元の場合)
年齢 総数 a)男 b)女 差分
総数 100 50 50 0
a)20〜29歳 20 10 10 0
b)30〜39歳 25 15 10 0
c)40〜49歳 25 10 10 5
d)50〜59歳 20 10 10 0
e)60〜69歳 10 5 5 0
f)70歳以上 5 5 5 -5
差分 -5 -5 0 0
(3)差分表
年齢 a)男 b)女 差分
a)20〜29歳 10 10 0
b)30〜39歳 15 10 0
c)40〜49歳 10 10 5
d)50〜59歳 10 10 0
e)60〜69歳 5 5 0
f)70歳以上 5 5 -5
差分 -5 0 0
(4)セルデータ形式
F1性別 F2年齢 n(Frequency合計)
a)男 a)20〜29歳 10
a)男 b)30〜39歳 15
a)男 c)40〜49歳 10
a)男 d)50〜59歳 10
a)男 e)60〜69歳 5
a)男 f)70歳以上 5
a)男 差分 -5
b)女 a)20〜29歳 10
b)女 b)30〜39歳 10
b)女 c)40〜49歳 10
b)女 d)50〜59歳 10
b)女 e)60〜69歳 5
b)女 f)70歳以上 5
差分 c)40〜49歳 5
差分 f)70歳以上 -5
(5)個票データ形式
F1性別 F2年齢 Weight
a)男 a)20〜29歳 1 (10レコード出力)
a)男 b)30〜39歳 1 (15レコード出力)
a)男 c)40〜49歳 1 (10レコード出力)
a)男 d)50〜59歳 1 (10レコード出力)
a)男 e)60〜69歳 1 ( 5レコード出力)
a)男 f)70歳以上 1 ( 5レコード出力)
a)男 差分 -1 ( 5レコード出力)
b)女 a)20〜29歳 1 (10レコード出力)
b)女 b)30〜39歳 1 (10レコード出力)
b)女 c)40〜49歳 1 (10レコード出力)
b)女 d)50〜59歳 1 (10レコード出力)
b)女 e)60〜69歳 1 ( 5レコード出力)
b)女 f)70歳以上 1 ( 5レコード出力)
差分 c)40〜49歳 1 ( 5レコード出力)
差分 f)70歳以上 -1 ( 5レコード出力)
注)差分については、属性区分をnull値に置き換えて出力する。
【0087】
7.5 ウェイト付データの秘匿
標本調査の個票データの場合は、母集団復元のためのウェイト付データを扱う必要がある。ウェイト付データの場合は、加重度数表を集計して秘匿処理を行う。
【0088】
7.5.1 ウェイト付データの丸め秘匿
統計調査等が標本調査の場合、個票データには母集団推定のための復元ウェイトが付与されている。この復元ウェイトは、抽出率の逆数に比推定乗率を乗算して計算されており、度数に復元ウェイトを乗算して積算することにより母集団度数の推定を行うことができる。例えば、1%標本の抽出調査の場合、標本1度数は母集団100度数に相当することになり、度数にウェイトを乗算して計算した加重度数を母集団の推定度数として用いる。
属性別加重度数データ
F1 F2 ・・・ Fj n(Weight合計)
C1,1 C1,2 ・・・ C1,j n1 n1 = Σ(f1m * w1m)
C2,1 C2,2 ・・・ C2,j n2 n2 = Σ(f2m * w2m)
C3,1 C3,2 ・・・ C3,j n3 n3 = Σ(f3m * w3m)
・・・
Ci,1 Ci,2 ・・・ Ci,j ni ni = Σ(fim * wim)
ni:属性iの加重度数合計
fim:属性iの度数
wim:属性iのウェイト
基の個票データがウェイト付データの場合は、上記について前述の再帰計算による度数表集計、丸め処理、差分計算、個票データ形式への変換を行う。
【0089】
母集団度数については、ウェイトで除算することにより標本度数の推定に用いることが可能であるため、ウェイトを用いて計算した加重度数についてもリスクレコードの秘匿を行う必要がある。加重度数を秘匿する場合は、単純に標本度数の安全基準を丸め基数としてしまうと秘匿強度が不十分であり、安全基準に復元ウェイトを乗算した値を丸め基数として丸め処理を行う必要がある。
加重度数の丸め処理の方法としては、属性区分別の最大ウェイトに安全基準度数を乗じて丸め基数とする方法や、属性区分別の平均ウェイトに安全基準度数を乗じた値を丸め基数とする方法、全体の平均ウェイトに安全基準度数を乗じた値を丸め基数とする方法などが考えられる。
基の個票データにおいて、ウェイトが突出して高い属性区分が存在する場合は属性区分別ごとの平均ウェイトに安全基準度数を乗じた値を丸め基数に設定することで安全に丸め処理を行うことができるが、丸め基数が属性区分別にまちまちであると全体平均の有効桁数が不明確になるデメリットがある。このため、本発明の秘匿装置では全体の平均ウェイトに安全基準度数を乗じた値をウェイト付個票データの場合の丸め基数として処理を行っている。
丸め基数B = 平均ウェイトW * 安全基準度数S
丸め度数Nij’ = ROUND( Nij / B ) * B
ただし、全体の平均ウェイトは整数ではなく小数点以下の端数を含む場合が多いため、10の累乗値またはその2分の1の値から、平均ウェイトを切り上げた最も近い値を計算してデフォルトの候補値としてプログラムの実行画面に表示される設計にしている。
【0090】
例)CSV形式データ(ウェイトが一律100の場合)
F1Gender, F2 Age, Weight
a)男, a)20〜29歳, 100
a)男, b)30〜39歳, 100
b)女, d)50〜59歳, 100
b)女, e)60〜69歳, 100
a)男, c)40〜49歳, 100
(以下省略)
Gender:性別、Age:年齢階級、Weight:復元ウェイト
【0091】
例)多次元クロス度数表(ウェイトが一律100で2次元の場合)
年齢 総数 a)男 b)女
総数 10000 5000 5000
a)20〜29歳 1900 1000 900
b)30〜39歳 2400 1300 1100
c)40〜49歳 2300 1200 1100
d)50〜59歳 1800 800 1000
e)60〜69歳 900 400 500
f)70歳以上 700 300 400
【0092】
例)度数表の丸め処理(ウェイトが一律100で安全基準5の場合)
年齢 総数 a)男 b)女
総数 10000 5000 5000
a)20〜29歳 2000 1000 1000
b)30〜39歳 2500 1500 1000
c)40〜49歳 2500 1000 1000
d)50〜59歳 2000 1000 1000
e)60〜69歳 1000 500 500
f)70歳以上 500 500 500
丸め基数B = 平均ウェイト100*安全基準5
=100*5
=500
丸め度数
nij’ = ROUND( nij / B ) * B= ROUND( nij / 500 ) * 500
【0093】
7.5.2 ウェイト付データの複合秘匿
多次元クロス度数表の消去秘匿を行う際に、秘匿処理を行う個票データにウェイトが付与されている場合は、ウェイト付度数を集計し、平均ウェイトで除算した値を最小セルの判定に用いる。従って、標本の度数に加えてウェイト付度数を平均ウェイトで除算した値について最小セルが安全基準を満たさない場合は、消去秘匿による秘匿処理を行う。消去秘匿による秘匿処理を行う場合は、消去秘匿の安全基準を必要最小限に留めて、丸め秘匿を併用して複合秘匿を行うことで安全性と有用性のバランスを図る。
ウェイト付データの複合秘匿は以下の手順で行う。
(1) 多次元クロス加重度数表の集計
(2) セルデータの分類符号付与
(3) リスクチェック
(4) 消去秘匿
(5) 複合秘匿(丸め秘匿)
(6) 差分計算
(7) セルデータ形式の差分表作成
(8) 個票データ形式への変換
【0094】
(1) 多次元クロス加重度数表の例(ウェイトが一律100で3次元の場合)
性別 年齢 総数 a)有業 b)無業
総数 総数 10000 5300 4700
総数 a)20〜29歳 1900 1100 800
総数 b)30〜39歳 2400 1500 900
総数 c)40〜49歳 2300 1500 800
総数 d)50〜59歳 1800 900 900
総数 e)60〜69歳 900 300 600
総数 f)70歳以上 700 0 700
a)男 総数 5000 3200 1800
a)男 a)20〜29歳 1000 600 400
a)男 b)30〜39歳 1300 1000 300
a)男 c)40〜49歳 1200 900 300
a)男 d)50〜59歳 800 500 300
a)男 e)60〜69歳 400 200 200
a)男 f)70歳以上 300 0 300
b)女 総数 5000 2100 2900
b)女 a)20〜29歳 900 500 400
b)女 b)30〜39歳 1100 500 600
b)女 c)40〜49歳 1100 600 500
b)女 d)50〜59歳 1000 400 600
b)女 e)60〜69歳 500 100 400
b)女 f)70歳以上 400 0 400
【0095】
(2) セルデータの分類符号付与
F0分類 F1就業状態 F2性別 F3年齢 加重度数nw
~~~ 総数 総数 総数 10000
~~0 総数 総数 a)20〜29歳 1900
~~0 総数 総数 b)30〜39歳 2400
~~0 総数 総数 c)40〜49歳 2300
~~0 総数 総数 d)50〜59歳 1800
~~0 総数 総数 e)60〜69歳 900
~~0 総数 総数 f)70歳以上 700
~0~ 総数 a)男 総数 5000
~00 総数 a)男 a)20〜29歳 1000
~00 総数 a)男 b)30〜39歳 1300
~00 総数 a)男 c)40〜49歳 1200
~00 総数 a)男 d)50〜59歳 800
~00 総数 a)男 e)60〜69歳 400
~00 総数 a)男 f)70歳以上 300
~0~ 総数 b)女 総数 5000
~00 総数 b)女 a)20〜29歳 900
~00 総数 b)女 b)30〜39歳 1100
~00 総数 b)女 c)40〜49歳 1100
~00 総数 b)女 d)50〜59歳 1000
~00 総数 b)女 e)60〜69歳 500
~00 総数 b)女 f)70歳以上 400
0~~ a)有業 総数 総数 5300
0~0 a)有業 総数 a)20〜29歳 1100
0~0 a)有業 総数 b)30〜39歳 1500
0~0 a)有業 総数 c)40〜49歳 1500
0~0 a)有業 総数 d)50〜59歳 900
0~0 a)有業 総数 e)60〜69歳 300
0~0 a)有業 総数 f)70歳以上 0
00~ a)有業 a)男 総数 3200
000 a)有業 a)男 a)20〜29歳 600
000 a)有業 a)男 b)30〜39歳 1000
000 a)有業 a)男 c)40〜49歳 900
000 a)有業 a)男 d)50〜59歳 500
000 a)有業 a)男 e)60〜69歳 200
000 a)有業 a)男 f)70歳以上 0
00~ a)有業 b)女 総数 2100
000 a)有業 b)女 a)20〜29歳 500
000 a)有業 b)女 b)30〜39歳 500
000 a)有業 b)女 c)40〜49歳 600
000 a)有業 b)女 d)50〜59歳 400
000 a)有業 b)女 e)60〜69歳 100
000 a)有業 b)女 f)70歳以上 0
0~~ b)無業 総数 総数 4700
0~0 b)無業 総数 a)20〜29歳 800
0~0 b)無業 総数 b)30〜39歳 900
0~0 b)無業 総数 c)40〜49歳 800
0~0 b)無業 総数 d)50〜59歳 900
0~0 b)無業 総数 e)60〜69歳 600
0~0 b)無業 総数 f)70歳以上 700
00~ b)無業 a)男 総数 1800
000 b)無業 a)男 a)20〜29歳 400
000 b)無業 a)男 b)30〜39歳 300
000 b)無業 a)男 c)40〜49歳 300
000 b)無業 a)男 d)50〜59歳 300
000 b)無業 a)男 e)60〜69歳 200
000 b)無業 a)男 f)70歳以上 300
00~ b)無業 b)女 総数 2900
000 b)無業 b)女 a)20〜29歳 400
000 b)無業 b)女 b)30〜39歳 600
000 b)無業 b)女 c)40〜49歳 500
000 b)無業 b)女 d)50〜59歳 600
000 b)無業 b)女 e)60〜69歳 400
000 b)無業 b)女 f)70歳以上 400
【0096】
(3) リスクチェック
安全基準を3としてウェイト100を乗じた300よりも最小値が小さい組合せについてリスクチェックを行う。リスクチェックにより、項目組合わせの分類[000]についてリスクセルを含むことがわかる。
分類 最小値
[000] 100
[~00] 300
[0~0] 300
[~~0] 700
[00~] 1800
[0~~] 4700
[~0~] 5000
[~~~] 10000
【0097】
(4) 消去秘匿
多次元クロス加重度数表のリスクセルを含む分類[000]について、加重度数をゼロ値に置き換えて消去秘匿を行う。
F0分類 F1就業状態 F2性別 F3年齢 加重度数nw
~~~ 総数 総数 総数 10000
~~0 総数 総数 a)20〜29歳 1900
~~0 総数 総数 b)30〜39歳 2400
~~0 総数 総数 c)40〜49歳 2300
~~0 総数 総数 d)50〜59歳 1800
~~0 総数 総数 e)60〜69歳 900
~~0 総数 総数 f)70歳以上 700
~0~ 総数 a)男 総数 5000
~00 総数 a)男 a)20〜29歳 1000
~00 総数 a)男 b)30〜39歳 1300
~00 総数 a)男 c)40〜49歳 1200
~00 総数 a)男 d)50〜59歳 800
~00 総数 a)男 e)60〜69歳 400
~00 総数 a)男 f)70歳以上 300
~0~ 総数 b)女 総数 5000
~00 総数 b)女 a)20〜29歳 900
~00 総数 b)女 b)30〜39歳 1100
~00 総数 b)女 c)40〜49歳 1100
~00 総数 b)女 d)50〜59歳 1000
~00 総数 b)女 e)60〜69歳 500
~00 総数 b)女 f)70歳以上 400
0~~ a)有業 総数 総数 5300
0~0 a)有業 総数 a)20〜29歳 1100
0~0 a)有業 総数 b)30〜39歳 1500
0~0 a)有業 総数 c)40〜49歳 1500
0~0 a)有業 総数 d)50〜59歳 900
0~0 a)有業 総数 e)60〜69歳 300
0~0 a)有業 総数 f)70歳以上 0
00~ a)有業 a)男 総数 3200
000 a)有業 a)男 a)20〜29歳 0 (ゼロ値置換)
000 a)有業 a)男 b)30〜39歳 0 (ゼロ値置換)
000 a)有業 a)男 c)40〜49歳 0 (ゼロ値置換)
000 a)有業 a)男 d)50〜59歳 0 (ゼロ値置換)
000 a)有業 a)男 e)60〜69歳 0 (ゼロ値置換)
000 a)有業 a)男 f)70歳以上 0 (ゼロ値置換)
00~ a)有業 b)女 総数 2100
000 a)有業 b)女 a)20〜29歳 0 (ゼロ値置換)
000 a)有業 b)女 b)30〜39歳 0 (ゼロ値置換)
000 a)有業 b)女 c)40〜49歳 0 (ゼロ値置換)
000 a)有業 b)女 d)50〜59歳 0 (ゼロ値置換)
000 a)有業 b)女 e)60〜69歳 0 (ゼロ値置換)
000 a)有業 b)女 f)70歳以上 0 (ゼロ値置換)
0~~ b)無業 総数 総数 4700
0~0 b)無業 総数 a)20〜29歳 800
0~0 b)無業 総数 b)30〜39歳 900
0~0 b)無業 総数 c)40〜49歳 800
0~0 b)無業 総数 d)50〜59歳 900
0~0 b)無業 総数 e)60〜69歳 600
0~0 b)無業 総数 f)70歳以上 700
00~ b)無業 a)男 総数 1800
000 b)無業 a)男 a)20〜29歳 0 (ゼロ値置換)
000 b)無業 a)男 b)30〜39歳 0 (ゼロ値置換)
000 b)無業 a)男 c)40〜49歳 0 (ゼロ値置換)
000 b)無業 a)男 d)50〜59歳 0 (ゼロ値置換)
000 b)無業 a)男 e)60〜69歳 0 (ゼロ値置換)
000 b)無業 a)男 f)70歳以上 0 (ゼロ値置換)
00~ b)無業 b)女 総数 2900
000 b)無業 b)女 a)20〜29歳 0 (ゼロ値置換)
000 b)無業 b)女 b)30〜39歳 0 (ゼロ値置換)
000 b)無業 b)女 c)40〜49歳 0 (ゼロ値置換)
000 b)無業 b)女 d)50〜59歳 0 (ゼロ値置換)
000 b)無業 b)女 e)60〜69歳 0 (ゼロ値置換)
000 b)無業 b)女 f)70歳以上 0 (ゼロ値置換)
【0098】
(5) 複合秘匿(丸め秘匿)
安全基準を5とし、ウェイト100を乗じた500を丸め基数として加重度数の丸め秘匿を行う。
F1就業状態 F2性別 F3年齢 加重度数nw
総数 総数 総数 10000
総数 総数 a)20〜29歳 2000
総数 総数 b)30〜39歳 2500
総数 総数 c)40〜49歳 2500
総数 総数 d)50〜59歳 2000
総数 総数 e)60〜69歳 1000
総数 総数 f)70歳以上 500
総数 a)男 総数 5000
総数 a)男 a)20〜29歳 1000
総数 a)男 b)30〜39歳 1500
総数 a)男 c)40〜49歳 1000
総数 a)男 d)50〜59歳 1000
総数 a)男 e)60〜69歳 500
総数 a)男 f)70歳以上 500
総数 b)女 総数 5000
総数 b)女 a)20〜29歳 1000
総数 b)女 b)30〜39歳 1000
総数 b)女 c)40〜49歳 1000
総数 b)女 d)50〜59歳 1000
総数 b)女 e)60〜69歳 500
総数 b)女 f)70歳以上 500
a)有業 総数 総数 5500
a)有業 総数 a)20〜29歳 1000
a)有業 総数 b)30〜39歳 1500
a)有業 総数 c)40〜49歳 1500
a)有業 総数 d)50〜59歳 1000
a)有業 総数 e)60〜69歳 500
a)有業 a)男 総数 3000
a)有業 a)男 a)20〜29歳 0
a)有業 a)男 b)30〜39歳 0
a)有業 a)男 c)40〜49歳 0
a)有業 a)男 d)50〜59歳 0
a)有業 a)男 e)60〜69歳 0
a)有業 b)女 総数 2000
a)有業 b)女 a)20〜29歳 0
a)有業 b)女 b)30〜39歳 0
a)有業 b)女 c)40〜49歳 0
a)有業 b)女 d)50〜59歳 0
a)有業 b)女 e)60〜69歳 0
b)無業 総数 総数 4500
b)無業 総数 a)20〜29歳 1000
b)無業 総数 b)30〜39歳 1000
b)無業 総数 c)40〜49歳 1000
b)無業 総数 d)50〜59歳 1000
b)無業 総数 e)60〜69歳 500
b)無業 総数 f)70歳以上 500
b)無業 a)男 総数 2000
b)無業 a)男 a)20〜29歳 0
b)無業 a)男 b)30〜39歳 0
b)無業 a)男 c)40〜49歳 0
b)無業 a)男 d)50〜59歳 0
b)無業 a)男 e)60〜69歳 0
b)無業 a)男 f)70歳以上 0
b)無業 b)女 総数 3000
b)無業 b)女 a)20〜29歳 0
b)無業 b)女 b)30〜39歳 0
b)無業 b)女 c)40〜49歳 0
b)無業 b)女 d)50〜59歳 0
b)無業 b)女 e)60〜69歳 0
b)無業 b)女 f)70歳以上 0
【0099】
(6) 差分計算
総数と内訳合計について、差分計算を行う。
性別 年齢 a)有業 b)無業 n’
a)男 a)20〜29歳 0 0 1000
a)男 b)30〜39歳 0 0 1500
a)男 c)40〜49歳 0 0 1000
a)男 d)50〜59歳 0 0 1000
a)男 e)60〜69歳 0 0 500
a)男 f)70歳以上 0 0 500
a)男 差分 3000 2000 -5500
b)女 a)20〜29歳 0 0 1000
b)女 b)30〜39歳 0 0 1000
b)女 c)40〜49歳 0 0 1000
b)女 d)50〜59歳 0 0 1000
b)女 e)60〜69歳 0 0 500
b)女 f)70歳以上 0 0 500
b)女 差分 2000 3000 -5000
差分 a)20〜29歳 1000 1000 -2000
差分 b)30〜39歳 1500 1000 -2500
差分 c)40〜49歳 1500 1000 -2000
差分 d)50〜59歳 1000 1000 -2000
差分 e)60〜69歳 500 500 -1000
差分 f)70歳以上 0 500 -1000
差分 差分 -5000 -5500 10500
【0100】
(7) セルデータ形式の差分表作成
セルデータ形式の差分表を作成する。(差分は〜で表す。)
F1就業状態 F2性別 F3年齢 n’
a)有業 a)男 〜 3000
a)有業 b)女 〜 2000
a)有業 〜 a)20〜29歳 1000
a)有業 〜 b)30〜39歳 1500
a)有業 〜 c)40〜49歳 1500
a)有業 〜 d)50〜59歳 1000
a)有業 〜 e)60〜69歳 500
a)有業 〜 〜 -5000
b)無業 a)男 〜 2000
b)無業 b)女 〜 3000
b)無業 〜 a)20〜29歳 1000
b)無業 〜 b)30〜39歳 1000
b)無業 〜 c)40〜49歳 1000
b)無業 〜 d)50〜59歳 1000
b)無業 〜 e)60〜69歳 500
b)無業 〜 f)70歳以上 500
b)無業 〜 〜 -5500
〜 a)男 a)20〜29歳 1000
〜 a)男 b)30〜39歳 1500
〜 a)男 c)40〜49歳 1000
〜 a)男 d)50〜59歳 1000
〜 a)男 e)60〜69歳 500
〜 a)男 f)70歳以上 500
〜 a)男 〜 -5500
〜 b)女 a)20〜29歳 1000
〜 b)女 b)30〜39歳 1000
〜 b)女 c)40〜49歳 1000
〜 b)女 d)50〜59歳 1000
〜 b)女 e)60〜69歳 500
〜 b)女 f)70歳以上 500
〜 b)女 〜 -5000
〜 〜 a)20〜29歳 -2000
〜 〜 b)30〜39歳 -2500
〜 〜 c)40〜49歳 -2000
〜 〜 d)50〜59歳 -2000
〜 〜 e)60〜69歳 -1000
〜 〜 f)70歳以上 -1000
〜 〜 〜 10500
【0101】
(8) 個票データ形式への変換
ウェイト(例:縮尺100)を指定して個票形式に変換する。
F1就業状態 F2性別 F3年齢 Weight
a)有業 a)男 〜 100 ( 30レコード出力)
a)有業 b)女 〜 100 ( 20レコード出力)
a)有業 〜 a)20〜29歳 100 ( 10レコード出力)
a)有業 〜 b)30〜39歳 100 ( 15レコード出力)
a)有業 〜 c)40〜49歳 100 ( 15レコード出力)
a)有業 〜 d)50〜59歳 100 ( 10レコード出力)
a)有業 〜 e)60〜69歳 100 ( 5レコード出力)
a)有業 〜 〜 -100 ( 50レコード出力)
b)無業 a)男 〜 100 ( 20レコード出力)
b)無業 b)女 〜 100 ( 30レコード出力)
b)無業 〜 a)20〜29歳 100 ( 10レコード出力)
b)無業 〜 b)30〜39歳 100 ( 10レコード出力)
b)無業 〜 c)40〜49歳 100 ( 10レコード出力)
b)無業 〜 d)50〜59歳 100 ( 10レコード出力)
b)無業 〜 e)60〜69歳 100 ( 5レコード出力)
b)無業 〜 f)70歳以上 100 ( 5レコード出力)
b)無業 〜 〜 -100 ( 55レコード出力)
〜 a)男 a)20〜29歳 100 ( 10レコード出力)
〜 a)男 b)30〜39歳 100 ( 15レコード出力)
〜 a)男 c)40〜49歳 100 ( 10レコード出力)
〜 a)男 d)50〜59歳 100 ( 10レコード出力)
〜 a)男 e)60〜69歳 100 ( 5レコード出力)
〜 a)男 f)70歳以上 100 ( 5レコード出力)
〜 a)男 〜 -100 ( 55レコード出力)
〜 b)女 a)20〜29歳 100 ( 10レコード出力)
〜 b)女 b)30〜39歳 100 ( 10レコード出力)
〜 b)女 c)40〜49歳 100 ( 10レコード出力)
〜 b)女 d)50〜59歳 100 ( 10レコード出力)
〜 b)女 e)60〜69歳 100 ( 5レコード出力)
〜 b)女 f)70歳以上 100 ( 5レコード出力)
〜 b)女 〜 -100 ( 50レコード出力)
〜 〜 a)20〜29歳 -100 ( 20レコード出力)
〜 〜 b)30〜39歳 -100 ( 25レコード出力)
〜 〜 c)40〜49歳 -100 ( 20レコード出力)
〜 〜 d)50〜59歳 -100 ( 20レコード出力)
〜 〜 e)60〜69歳 -100 ( 10レコード出力)
〜 〜 f)70歳以上 -100 ( 10レコード出力)
〜 〜 〜 100 (105レコード出力)
【0102】
7.5.3 出力データの変換縮尺
前述の方法により加重度数について丸め処理を行う場合、秘匿処理の対象となる加重度数は標本度数に比べて大きな値になるため、これをそのまま個票形式に変換すると膨大なレコード数になってしまうことが多い。そこで、変換縮尺を指定することで、標本相当のレコード数に変換する機能を付与している。
具体的には、個票データ形式に変換する際に変換縮尺を指定し、母集団ベースの場合は加重度数を変換縮尺で除算した値をレコード数とし、ウェイト1.0に変換縮尺を乗じた値を各レコードのウェイトとして変換を行う。また、標本ベースの場合は属性区分別に基の個票データの標本数をレコード数とし、加重度数を基の個票データの標本数で除算した値をウェイトとして変換を行う。丸め基数と変換縮尺が一致している場合、丸め基数が整数であれば変換後のウェイトも丸め基数と同じ整数値になるメリットがある。
ウェイト付データの丸め処理は加重度数の丸め基数による除算で行っており、変換縮尺の処理は加重度数の変換縮尺による除算で行うことから、丸め処理と変換縮尺の処理には共通する部分が多い。丸め処理の場合はウェイトがゼロ値になる属性は秘匿上の観点からウェイトゼロ値のレコードとして出力しない。また、変換縮尺の処理についても秘匿上の観点からゼロ値を出力しない処理としており、基の個票データにウェイトがゼロ値のレコードが含まれている場合は、変換後の標本レコード数は基のレコード数と一致しなくなる。
なお、秘匿処理を行った出力データには四捨五入による丸め誤差の差分レコードが含まれるため、変換後の標本レコード数は変換前のレコード数よりも多くなるのが通常である。
【0103】
例)差分表(ウェイトが一律100で丸め基数500の場合)
年齢 a)男 b)女 n’
a)20〜29歳 1000 1000 0
b)30〜39歳 1500 1000 0
c)40〜49歳 1000 1000 500
d)50〜59歳 1000 1000 0
e)60〜69歳 500 500 0
f)70歳以上 500 500 -500
差分 -500 0 0
【0104】
(1) セルデータ形式の差分表
F1性別 F2年齢 n'
a)男 a)20〜29歳 1000
a)男 b)30〜39歳 1500
a)男 c)40〜49歳 1000
a)男 d)50〜59歳 1000
a)男 e)60〜69歳 500
a)男 f)70歳以上 500
a)男 差分 -500
b)女 a)20〜29歳 1000
b)女 b)30〜39歳 1000
b)女 c)40〜49歳 1000
b)女 d)50〜59歳 1000
b)女 e)60〜69歳 500
b)女 f)70歳以上 500
b)女 差分 0
差分 a)20〜29歳 0
差分 b)30〜39歳 0
差分 c)40〜49歳 500
差分 d)50〜59歳 0
差分 e)60〜69歳 0
差分 f)70歳以上 -500
差分 差分 0
【0105】
(2)個票データ形式(縮尺100の場合)
F1性別 F2年齢 Weight
a)男 a)20〜29歳 100 (10レコード出力)
a)男 b)30〜39歳 100 (15レコード出力)
a)男 c)40〜49歳 100 (10レコード出力)
a)男 d)50〜59歳 100 (10レコード出力)
a)男 e)60〜69歳 100 ( 5レコード出力)
a)男 f)70歳以上 100 ( 5レコード出力)
a)男 差分 -100 ( 5レコード出力)
b)女 a)20〜29歳 100 (10レコード出力)
b)女 b)30〜39歳 100 (10レコード出力)
b)女 c)40〜49歳 100 (10レコード出力)
b)女 d)50〜59歳 100 (10レコード出力)
b)女 e)60〜69歳 100 ( 5レコード出力)
b)女 f)70歳以上 100 ( 5レコード出力)
b)女 差分 0
差分 a)20〜29歳 0
差分 b)30〜39歳 0
差分 c)40〜49歳 100 ( 5レコード出力)
差分 d)50〜59歳 0
差分 e)60〜69歳 0
差分 f)70歳以上 -100 ( 5レコード出力)
差分 差分 0
注)差分の属性については、分類区分をnull値として出力する。