「CRMと基幹システムで同じ顧客が別々に登録されている」「DMを同じ人に何通も送ってしまっている」「表記ゆれで顧客データが統一できない」——こうしたデータ品質の問題は、企業規模が大きくなるほど深刻になります。本記事では、重複顧客データを自動検出・統合する名寄せシステムの開発手順を、実際に動くデモを交えながら解説します。Python・PostgreSQL・Elasticsearchを組み合わせることで、金融・医療・ECなどの大規模データにも対応できる本格的なシステムを構築できます。
名寄せとは何か
名寄せとは、複数のデータソースに散在する同一人物・同一企業のレコードを「これは同じだ」と判定して統合するプロセスです。「田中太郎」と「田中 太郎」、「090-1111-2222」と「09011112222」のように、表記は異なっても実体が同じデータを見つけ出します。
名寄せが必要になる代表的な場面は4つあります。CRM・SFA・ECサイトなど複数システムに散在する顧客情報の統合、DM重複送付防止によるコスト削減、正確なユニークユーザー数の把握、M&A時の顧客データ統合です。
| 業界 | 主な用途 | 期待効果 |
|---|---|---|
| 金融 | 口座名義の表記ゆれ統一・マネロン対策 | リスク管理精度向上 |
| 通販・EC | 複数アカウント統合・不正購入検知 | DM費用削減・不正防止 |
| 医療・製薬 | 患者マスタ重複排除・治験データ統合 | 医療安全向上 |
| BtoB企業 | 名刺管理とCRMの同期・M&A後の統合 | 営業効率向上 |
実際に動かしてみる(デモ)
以下は実際に名寄せ処理を体験できるデモです。「テストデータで精度を試す」ボタンを押すか、CSVファイルをアップロードして「重複を検出」を押すと、レーベンシュタイン距離アルゴリズムで類似度を計算し、重複候補を表示します。結果はCSVでダウンロードできます。データはすべてブラウザ内で処理され、サーバーには送信されません。
🔍 名寄せ支援ツール
表記ゆれを自動検出して、重複データを見つけます
• 正規化処理:全角/半角、大文字/小文字、スペースを統一して比較
• 閾値70%以上:類似度が70%を超えるペアを重複候補として表示
• 完全ブラウザ処理:データはサーバーに送信されず、安全
開発手順(8ステップ)
STEP 1:システム要件定義とアーキテクチャ設計
まず「何のために名寄せをするか」を明確にします。顧客マスタの統合なのか、マーケティングの重複排除なのか、コスト削減なのかによってシステムの設計が変わります。推奨技術スタックはPython(データ処理)・PostgreSQL・Elasticsearch(全文検索)・Redis(キャッシュ)・React(管理画面)の組み合わせです。100万件以上のデータを扱う場合、単純な総当たり比較では処理時間が膨大になるため、インデックスとクラスタリングの設計が最初から必要です。
STEP 2:名寄せアルゴリズムの選定と実装
代表的なアルゴリズムが5つあります。レーベンシュタイン距離は編集距離で汎用的に使えます。Jaro-Winkler距離は先頭一致に重みをつけるため人名のマッチングに向いています。N-gramは文字列を固定長で分割して比較するため日本語に強いです。TF-IDF+コサイン類似度は文書全体の類似度計算に使います。Pythonライブラリとしてはpython-Levenshtein・jellyfish・fuzzywuzzy・dedupeなどが使えます。
STEP 3:データ正規化とプリプロセッシング
名寄せ精度を上げる最重要ステップです。全角→半角・大文字→小文字・カタカナ→ひらがなの文字正規化、スペース・記号の除去、「株」→「株式会社」などの略称展開、「1-2-3」と「1丁目2番3号」の住所正規化、「090-1234-5678」→「09012345678」の電話番号正規化を行います。正規化の精度がそのまま名寄せの精度に直結します。
STEP 4:データベース設計と最適化
テーブル構成はcustomers(顧客マスタ)・duplicate_pairs(重複ペア管理)・merge_history(統合履歴)・normalization_rules(正規化ルール)の4つが基本です。正規化済みデータを事前計算してインデックス化することで、検索速度が100倍以上改善されます。大規模データでは特にこの事前計算が処理時間を左右します。
STEP 5:効率的な候補絞り込み(ブロッキング)
100万件のデータで総当たり比較すると5,000億回の計算が必要になります。ブロッキングとは「明らかに異なるレコードは比較しない」という手法です。名前の頭文字・郵便番号・電話番号の市外局番でグループ化し、同グループ内のみで比較することで計算量を1/1,000以下に削減できます。Sorted Neighborhood法(ソート後、近隣N件のみ比較)も効果的です。
STEP 6:管理画面とワークフローの構築
担当者が重複候補を確認・承認するための管理画面が必要です。重複候補一覧(類似度順・フィルター機能)・2レコードを並べて差分ハイライトする詳細比較画面・マージ実行画面・統合履歴とロールバック機能・閾値やブロッキングルールの設定画面・夜間バッチのスケジュール設定が最低限必要な機能です。
STEP 7:機械学習による精度向上(オプション)
ルールベースの名寄せに限界を感じたら機械学習を導入します。担当者が「同一人物」「別人」とラベル付けしたデータを学習データとして、ロジスティック回帰・ランダムフォレスト・XGBoostで重複判定モデルを訓練します。最低でも数千件のラベル付きデータが必要で、初期のラベリング作業はコストがかかります。Pythonのdedupeライブラリは能動学習で効率よく学習データを収集できます。
STEP 8:運用・保守とKPI設定
運用時は適合率(Precision)・再現率(Recall)・F1スコアの3指標で精度を監視します。特に別人を同一と判定するFalse Positiveは業務上の問題になりやすいため注意が必要です。運用フローは夜間バッチで名寄せを実行し、重複候補を管理画面に表示、担当者が確認・承認、承認データを自動統合、週次レポートで精度確認というサイクルが標準的です。
開発・運用コストの目安
Python + PostgreSQL + Reactの構成なら、MVPを10万円程度から構築できます。大規模データ対応や機械学習の追加は段階的に投資できます。
| フェーズ | 内容 | 費用目安 |
|---|---|---|
| フェーズ1(MVP) | CSV取込・レーベンシュタイン・管理画面 | 10万〜30万円 |
| フェーズ2(拡張) | ブロッキング・バッチ処理・Elasticsearch連携 | 10万〜30万円 |
| フェーズ3(大規模対応) | 機械学習・100万件以上対応・API連携 | 10万〜50万円 |
| サーバー(計算用) | データ量に応じてスケール | 月5,000円〜30,000円 |
| PostgreSQL | マネージドDBサービス | 月3,000円〜15,000円 |
| Elasticsearch | 全文検索・類似検索 | 月5,000円〜20,000円 |
| 月額運用費(目安) | サーバー+DB+監視ツール | 月2万〜8万円 |
ROIの目安として、DM送付コストは重複10%削減で100万通あたり年間50万円の削減になります。某大手通販企業の事例では顧客DB500万件が名寄せ後420万件(重複16%削減)となり、DM送付コストの年間削減額は約800万円、初年度で投資額の3倍を回収しています。
よくある質問
名寄せの精度はどのくらいですか?
正規化処理とアルゴリズムの組み合わせによりますが、適切に設計すれば適合率90%以上を達成できます。ただし「精度を上げるほど見逃しが増える」というトレードオフがあるため、業務上どちらのリスクが大きいかで閾値を調整します。
既存システムと連携できますか?
REST APIを通じてSalesforce・kintone・各種CRMと連携できます。バッチ処理でのCSV取込も対応可能です。既存システムのDBに直接接続してリアルタイムで名寄せを実行する構成も構築できます。
個人情報の取り扱いは大丈夫ですか?
名寄せシステムは個人情報を大量に扱うため、個人情報保護法への準拠が必要です。通信の暗号化(HTTPS・TLS)、アクセスログの記録、権限管理、データの保存期間の設定が最低限必要な対策です。
まとめ
名寄せシステムは金融・医療・EC・BtoB企業など幅広い業界で導入が進んでいます。Python + PostgreSQL + Reactの構成でMVPを10万円程度から始めて、データ量や要件に応じて段階的に拡張できます。デモで確認した通り、レーベンシュタイン距離と正規化処理の組み合わせだけでも実用的な精度が出ます。
開発のご相談や見積もりはお気軽にお問い合わせください。要件定義からリリースまで一貫してサポートします。
