名前、住所、郵便番号が含まれ、レコード データが添付されていないテーブルがあります。また、すべて同じですが、より多くの情報を含むテーブルがあり、それらが 100% 一致しない場合にテーブルを結合する方法が必要です。
同一でない場合、どのように一致させるのでしょうか? 私は SQL の初心者ですが、ほとんどの場合一致しないことはわかっていますし、この問題を抱えているのは私だけではないはずです。しかし、これを実行するソフトウェアは難しいことがわかっています。
これを行うためのソフトウェアを作成することは、そもそもこれを行う必要がある場合よりもさらに悪いことになります。
Excel でこれを行うことはできますが、レコードの量が 100 万件を超えると困難になります。
答え1
私は以前、データベース マーケティング会社で働いていました (迷惑メールを送信して申し訳ありません)。私たちの仕事は、「Robert Jones 671 Kimbrough SPFD MO 65802」が「Bobbie Joanes 671 Kimbrough St. Sprinfield MO 65809」と同じかどうかを調べることでした。一致しない場合は、潜在顧客に重複したメールを送信するリスクがあり、クライアントが愚か者のように思われるだけでなく、お金を無駄にしてしまうことになります。
私たちのアプローチは、問題をより小さな領域に分解し、異なる基準を適用して答えを出すというものでした。おそらくB. 一致ルールが厳しすぎると、重複を検出できません。一致ルールが緩すぎると、潜在的な顧客を失ってしまいます。
エンティティが一致できるドメインは 3 つありました: 名前、連絡方法、関係。2 つのドメインが一致した場合にのみ一致が許可されました。
連絡方法
連絡方法は郵便、電子メール、電話のいずれかでした。
住所
最初のステップは、提供された住所を標準化することです。最終目標は、入力された住所を、米国郵政公社標準です。前の例では、両方の住所に郵便物が配達される可能性がありますが、それは郵便配達員が差出人の意図を理解したからです。実際の住所は
671 S キムブルーアベニュー スプリングフィールド MO 65806-3342
住所が一貫していれば、住所の照合ははるかに簡単に解決できます。修正できない住所や、複数のテナントがある場所 (Suite 200、Apt B など) のルールについても考慮する必要がありますが、これはビジネス オーナーと調整する必要がある微調整の一部です。また、+4 桁は配送に便利ですが、住所の照合ロジックに考慮しないでください。これらは 5 桁の郵便番号よりも変更される可能性がはるかに高くなります。
覚えておくべきもう 1 つのことは、人が引っ越すので、現在の住所データを持っていることが重要である場合は、過去 X 期間の住所転送情報 (NCOA - National Change of Address) を取得できることです。引っ越した場合、住所転送の書類は一定期間のみ有効で、その期間後にメールを送信した人は、このアドレスではなく、差出人への返送を受け取ります。送信前にメールを NCOA すると、転送が期限切れであっても、現在の住所が確保されます。
私たちのアプローチは、標準化された住所 (行 1 + 郵便番号) からハッシュを作成し、それを比較キーとして使用するというものでした。
電話
電話に関して唯一厄介なのは、市外局番が関連付けられているかどうかです。市外局番は区切りやフォーマットなしで保存し、内線番号は別に保存しました。これは7桁または10桁の電話番号に要約されます。住所があれば、いつもの市外局番をバックフィルします。市外局番が分割されると、通常、1 つの場所が 2 つ (またはそれ以上) の市外局番でサービスされる猶予期間が設けられます。
Eメール
一般的に、メールアドレスは一致するか、一致しないかのどちらかです。どうしても一致させたい場合は、データを整理します。これには、ドメインを調べて存在することを確認し、存在しない場合はトップレベルドメインを追加することが含まれます。joan@aol が表示された場合は、@aol.com を意味している可能性が高いです。メールアドレスの一致率を高めるためのもう 1 つの方法は、アドレスに + が使用されているかどうかです。Google などの一部のプロバイダーでは、[メールアドレス]ベースアドレスに配信される。これは、登録した特定のサイトにメールアドレスを関連付ける便利な方法だと思います。そのアカウントに迷惑メールが流れ始めたら、誰の尻拭いをすればいいか分かります。ただし、マッチングのために、+ から @ までのコンテンツを削除することもできます。
名前
「名前に何の意味がある?ジョーンズという名前を他の綴りで呼ぶ人は、同じ人物である可能性がある」
ウィリアム・マッチスピア
名前に対して実行する必要があるマッチングには 2 種類あることがわかりました。会社名または団体名と個人名です。米国の名前には、接頭辞 (Mr、Mrs、Dr、Fr、Sen、Sgt など)、名、ミドルネーム、2 番目のミドルネームまたは父方の姓、姓/母方の姓、世代 (Jr、Sr、IV)、職業/名誉/学術 (MBA、JD、PhD、esq など) が含まれる場合があります。楽しいと思いませんか?
データが個々の部分でキャプチャされている限り、通常はそれほど悪くはありません。そうでない場合、姓が「de los santos」である私の友人が証明しているように、空白で分割して名前の部分を判断できると想定すると、奇妙な結果になる可能性があります。
会社名、まあ、それは通常、彼らがあなたに与えるものです。注意すべきことは、DBA(事業を行う会社名)です。「Soulless megacorporation LLC DBA Happy cuddly puppy preserve」これは、「Happy cuddly puppy preserve」や「Soulless Megacorporation」と一致する必要があるかもしれません。
名前の一致
個人名のマッチングの最初のパスはサウンドエックス一般的にRDBMSで利用可能であり、入力データに基づいて許容できる可能性があります。Soundexの問題は、ヨーロッパの名前のサブセットにしか適していないことです。よりスマートな音声アプローチであり、私たちが使用したアプローチは、ダブルメタフォンアルゴリズム。これにより、文字列のマッチングの結果が得られました。
上記の例では、Jones と Joanes の完全一致は失敗しますが、音声一致は検出されます。ただし、問題は Bobbie と Robert があることです。想像を絶するほどの努力でこの 2 つが同じように聞こえるようになることは不可能ですが、クライアントは一致が欠落していると主張したため、ニックネームを完全な値に戻すための別のチェック セットを追加し、比較を再実行しました。
企業名の比較では、「ストップワード" - 名前に現れるが、一致目的では無視されるべき意味のない不要な部分 (a、of、the、LLC、corp、univ、university)
その後、単純なタイプミス、文字の転置、省略によって一致しないエンティティが生成されるというフィードバックが寄せられました。この回答が長くなるにつれて、会社名の一致が「Johns used tire barn」から「Johns mega used tire barn」のようなエンティティに失敗するというフィードバックも寄せられました。最終的に、nグラム比較そして、それらのシナリオに対処するのに役立つトークン比較アルゴリズム。それ以来、業界の他の人と話しましたが、彼らはレーベンシュタイン距離文字列の一致を判定します。
関係
関係とは、基本的に、私たちが真実だと知っている別の何かです。ある会社は、営業担当者が顧客にビジネス返信カードに記入してもらうことで特典を得るというプロモーションを実施しました。私たちは「ジョンの中古タイヤ倉庫」の従業員リストを持っていて、不完全な名前データをその参照セットに関連付ける必要がありました。ここでは完全性のためにのみ話します。あなたの問題では、名前と MoC の一致を調べることになります。
もう終わらせろ
実装の詳細は、データの内容と、問題にどれだけの時間と費用を投入したいかによって異なります。
私の一般的なアプローチは、両方のデータセットをデータベースにインポートすることから始まります。すべての属性を持つデータが参照セットです。小さいデータセットが候補セットです。候補テーブルに、参照セット識別子を含む列を追加します。次の例では正規化が欠けていますが、これは意図されたものです。
CREATE TABLE
dbo.reference
(
reference_id int identity(1,1) NOT NULL PRIMARY KEY
, name_prfix varchar(50) NULL
, name_first varchar(50) NOT NULL
, name_middle varchar(50) NULL
, name_last varchar(50) NOT NULL
, name_suffix varchar(20) NULL
, company_name varchar(100) NULL
, address_line1 varchar(70) NULL
, address_line2 varchar(50) NULL
, address_city varchar(50) NULL
, address_state varchar(20) NULL
, address_postalcode varchar(10) NULL
, address_zip4 char(4) NULL
, phone_number varchar(10) NULL
)
CREATE TABLE
dbo.candidate
(
candidate_id int identity(1,1) NOT NULL PRIMARY KEY
, name_prfix varchar(50) NULL
, name_first varchar(50) NOT NULL
, name_middle varchar(50) NULL
, name_last varchar(50) NOT NULL
, name_suffix varchar(20) NULL
, company_name varchar(100) NULL
, address_line1 varchar(70) NULL
, address_line2 varchar(50) NULL
, address_city varchar(50) NULL
, address_state varchar(20) NULL
, address_postalcode varchar(10) NULL
, address_zip4 char(4) NULL
, reference_id int
)
反復TSQL
ステップ 1、直接一致。候補と参照の間に完全一致が存在する場合は、それを Candidate.reference_id に記録し、プロセスから除外します。
ステップ2、ニックネーム拡張および/またはストップワード置換による直接一致
ステップ 3、あいまいな名前の一致による住所の一致 (ダブル メタフォン + ngram + 最小編集距離)
ステップ 4、あいまいなニックネーム拡張および/またはストップワード置換マッチングによる住所の一致 (ダブルメタフォン + ngram + 最小編集距離)
ステップ5、残りの候補者プールを手動でマッチングする
翻訳
SSIS の Enterprise Edition は、ファジー ロジック機能を提供します。基本的に、名前の一致などのための独自のフレームワークを組み立てる必要がなく、TSQL アプローチに記載されているのとほぼ同じことを実行します。
SSIS 2012 リリースでは、住所のクリーンアップや名前の分割に対応するデータ品質サービスも提供されます。