15

私は以下の問題を抱えていましたが、機械学習を使うことができると思っていましたが、私の使用事例ではうまくいくとは確信していません。機械学習によるデータの重複除外

名前、住所、電子メール、電話などの顧客データを含む約1億レコードのデータセットがあり、この顧客データを消去し、データセット内の可能な重複を特定する方法を探したいと考えています。

ほとんどのデータは、検証のない外部システムを使用して手動で入力されているため、多くのお客様がDB内に複数のプロファイルを持ち、各レコードに異なるデータを持つことがあります。

インスタンスの場合連絡先の詳細が異なる顧客John Doeの5つのエントリがあります。

異なる顧客を表す複数のレコードが電子メールなどの主要フィールドに一致する場合もあります。たとえば、顧客が電子メールアドレスを持っていないのにデータ入力システムが必要とする場合、コンサルタントはランダムな電子メールアドレスを使用して、同じ電子メールアドレスを使用する多くの異なる顧客プロファイルを生み出し、電話機や住所などにも同様に適用されます。

すべてのデータはElasticsearchでインデックスされ、SQL Serverデータベースに格納されます。私の最初の考えは、Mahoutを機械学習プラットフォーム(これはJavaショップなので)として使用し、データを格納するためにHベースを使用することでした(Hadoopエコシステムに適合しているかどうか、 )、しかし私はそれについてもっと読んだほど、私はそれが私の場合にどのように動作するのかというと混乱しています。なぜなら、この問題がどこにあるのかわからないので、クラスタリングアルゴリズムまたは分類アルゴリズムを使用できますか?もちろん、プロファイルの一意性を構成するもの、つまりどのフィールドを構成するかについては、ある規則を使用する必要があります。

これは、新しい顧客プロファイルを入力したときに可能性のある重複を検証および検出するために当社のデータ入力システムが使用できるソートの顧客プロファイル重複除外サービスとして最初に導入された考えであり、分析プラットフォームを使用して顧客に関する洞察を収集します。

任意のフィードバックを大幅に理解されるであろう:)

ありがとう。

+1

'時にはそれぞれのレコードに異なるデータがあります.'なので、機械学習アルゴリズムは重複をどのように見つけるべきですか? John Doeがほぼ同じデータで追加された場合、同じ人物であるかどうかはどうやって知ることができますか? IMHOあなたは流行語arroundを投げているとあなたの顧客データベースのタイトなリレーショナルモデルです。 –

+0

@thomas本当に私は流行語を投げかけていますが、真実は私が大きなデータを得ようとしていることです。これは学ぶ良い機会になると思っています。これがうまくいくかどうかわかりませんでした。アイデアは、私はビジネスのように一意性を表す例のような電子メールのようなキーフィールドにマッチする必要があるということです。あなたが入力をありがとう。 –

+0

Sql Serverのエディションは不明ですが、SSIS(ファジーグループ化とファジールックアップ)のデータクレンジング変換を利用することができます。http://msdn.microsoft.com/en-us/magazine/cc163731 aspx –

答えて

14

実際にはこれに関する多くの研究が行われており、人々はこれに対してさまざまな種類の機械学習アルゴリズムを使用してきました。個人的にはgenetic programmingを試してみましたが、合理的にうまくいきましたが、個人的には手動で調整することを好みます。

私はこのテーマに関する研究論文の参考資料がいくつかあります。 StackOverflowのは、あまりにも多くのリンクをしたいが、ここではGoogleのを使用して十分なものでなければならないbibliograpic情報ではありません。

  • リンク検出設定、アンドリー・ニコロフ、マチューD'Aquin、エンリコ・モッタ
  • の教師なし学習機械学習録音リンケージ、マシュー・マイケルソンとクレイグA. Knoblock
  • 学習の連携のためのスキームをブロック類似性メトリック、シュウRong1、興Niu1、エヴァン魏Xiang2、Haofen Wang1、強Yang2、そして龍YU1
  • 学習に基づくマッチングインスタンスのためのアプローチ遺伝的プログラミング、Robert Isele、Christian Bizerを使用したルール

これはすべての研究ですが、あなたの問題に対する実用的な解決策を探しているなら、私はDukeと呼ばれるこの種の重複排除のためのオープンソースエンジンを構築しました。 Luceneでデータを索引付けし、さらに詳細な比較を行う前に一致を検索します。手動セットアップが必要ですが、遺伝的プログラミング(上のリンクを参照)を使用してセットアップを作成するスクリプトがあります。 Duke(see thread)用のElasticSearchプラグインを作成したい人もいますが、これまでに何も行われていません。

とにかく、それは私があなたの場合にとるアプローチです。

8

ちょうど同様の問題に遭遇しましたので少しGoogleでした。このライブラリのドキュメント https://dedupe.io/developers/library/en/latest/

「重複排除Pythonライブラリ」と呼ばれるライブラリを検索し、共通の問題と解決策の詳細デデュープエントリと同様に、デデュープ分野の論文を持っています。あなたがそれを使用していなくても、文書を読むのは良いことです。

+0

私は完全に同意します、Dedupeは本当に良く見えます。著者が書いた記事は、読んだだけでも読める価値がありますトピックの紹介:http://www.cs.utexas.edu/~ml/papers/marlin-dissertation-06.pdf –