Blog

ブログ

データマネジメント

名寄せとデータクレンジング⑤~重複グループの検出

前回クレンジングしたデータをいよいよマッチングさせて重複データを検出します。
検出方法として、マッチング用の項目をキーにテーブル同士で突合させるやり方と、マッチング用のテーブルにデータを一本に結合してから行うやり方があります。ここでは説明しやすい後者で進めてみます。

A・B・Cの三つのデータテーブルがあるとして、氏名・住所・電話番号の三項目のマッチングで考えてみます。重複条件ですが、三項目すべて一致するものは文句なく同一とみなせますので同じキーコードを振ってよいでしょう。
次に[氏名・住所]、[氏名・電話番号]の二項目だけが一致する場合の判断です。
以下の例で考えてみましょう。住所は文字列で示していますが実際はバーコードデータ化されているものとみなして見比べてください。

A1 鈴木一郎 A県B市C町1-1-1-101 033-3333-3333
A2 鈴木一郎 A県B市C町1-1-1-101 090-4444-4444
B3 鈴木一郎 A県B市C町1-1-1   033-3333-3333
C4 鈴木一郎 D県E市F町2-2-2   090-4444-4444

人間の目の直観ではA1~B3までが同じとみなせて、C4は人物としては同じだが別の時系列で登録されたデータ、という推測が成り立ちますが、これを機械的に処理できるロジックが必要となります。
まず、[氏名・住所]と[氏名・電話番号]とでどちらを優位(軸)とするかを決めておく必要があります。条件が複数ある場合、軸を決めておかないと収拾がつかなくなります。[氏名・住所]を優位に考えるのが一般的であり、ここではこちらを軸とします。
[氏名・住所]ではA1とA2の重複グループがあり、B3とC4はそれぞれ単独となります。[氏名・電話番号]はA1とB3のグループ、A2とC4のグループに分けられます。
仮に[氏名・住所]のA1・A2をグループX、[氏名・電話]のA1・B3をグループY、A2・C4をグループZとしてみます。重複状況をまとめると下のようになります。

A1_XY
A2_X_Z
B3__Y
C4___Z

グループXのA1とA2が同一データとして軸になります。そのグループXからグループYとグループZに分かれますが、電話番号が同じであることを理由にXYZに含まれるデータをすべて同じ条件で同一とみなしてよいかどうかは軸となる住所が判断材料となります。
直観的にB3が許容されるのは部屋番号が省略されているが建物としては同じであり、C4がそれよりは優先順位が下がるのは全く違う都道府県市町村だからです。
住所(バーコード)は一致しないが電話番号が一致する場合、例えば郵便番号(この場合でいうと概ね「A県B市C町」の部分)が一致していれば同一と許容する、というルールがあればB3はXグループとしてすくい上げることができます。郵便番号では大雑把すぎると考えるならバーコードデータの10桁ぐらいまでの一致で許容するなどの手もありますし、有償のコードが使えるのであれば、11桁の住所コード(丁目・小字までを指す)を利用するのがよいでしょう。
C4は同じ鈴木一郎さんのはずですが、同一とするかどうかは名寄せの目的によるかもしれません。仮にA1~B3の登録年月日がここ数年間のものであるのに対してC4だけ10年前のものだったとします。そしてテーブルCは元々昔の情報が多くこれを活性化させたいという場合、C4も条件つきで関連づけさせるのが適当です。
その場合、重複状態を広く採用してステータス分けしておくやり方があります。例えば三点一致をステータス0、[氏名・住所]の二点一致をステータス1、ステータス0か1に紐づく[氏名・電話番号]一致のうち郵便番号一致をステータス3、郵便番号も一致しないものをステータス4、などです。これについては、次回の名寄せをする際の何をもって正のデータとするか、という問題と関わって行きます。

グループを分かりやすく認識するためにXYZで説明しましたが、グループコードの決め方としては、例えば名寄せ前にはA1~C4それぞれのID(ユニークキー)をグループコードとしてセットしておき、上記の例であれば、まずグループXであるA1・A2は一律A1とし(便宜上昇順先頭としたが一定のルールであれば何でもよい)、更に同じと認められたB3もグループコードA1を付与する、ということを繰り返して行けば不整合は生じないはずです。新たな体系のグループコードを振って行く場合には別なルールを設定すればよいですが、グループ化していく過程の考え方はこれが基本です。

ところで、こうした作業をするにあたってあらゆる数学的組み合わせを考えて行くと、こんなシンプルな条件では例外が全く拾えないのでは、という疑問を持たれるかもしれません。
仰るとおりなのですが、例えば以下のようなデータがあるとします。

A5 中田五郎 A県B市C町5-5-5-505 055-555-5555
A6 山田睦美 A県B市C町6-6-6-606 090-6666-6666
B7 仲田吾郎 A県B市C町5-5-5-505 090-6666-6666
C8 谷村八重 A県B市C町6-6-6-606 055-555-5555

組み合わせとしては考えられますが、もしこんな状態のデータであるなら、まずその成り立ちを疑うべきです。常識的な運用で積み上げられたデータであるなら、ある程度の秩序と意味をもって成り立っているはずで、ありえない組み合わせをいちいち想定することにあまり意味はなく、氏名や住所など最重要となる情報を軸にしておかないと大量のワーニングリストを延々とアイチェックする羽目に陥ります。
勿論、「中田五郎」と入力するつもりが「仲田吾郎」となっしまっているものが混じっている可能性はあります。また、バーコードのみを軸にすると部屋番号のある無しで別々の重複グループが出来上がってしまう場合(複数のグループを統合するロジックは複雑)の対策など考えておくべきことはあります。氏名や住所以外を軸とした検証をやってみることも大いに意味はありますが、まずは確実な紐づけを完了させた上でないと整理がつきません。前々回(③)書いたとおり、名寄せはなるべくシンプルにまとめるのが理想なのです。

(つづく)