25

我有以下问题,我想我可以使用机器学习,但我不完全确定它是否适用于我的用例。

我有一个包含大约一亿条记录的数据集,其中包含客户数据,包括姓名、地址、电子邮件、电话等,我想找到一种方法来清理这些客户数据并识别数据集中可能存在的重复项。

大多数数据是使用外部系统手动输入的,没有经过验证,因此我们的许多客户最终在我们的数据库中拥有多个配置文件,有时每条记录中的数据不同。

例如,对于客户 John Doe,我们可能有 5 个不同的条目,每个条目都有不同的联系方式。

我们还遇到了代表不同客户的多条记录在电子邮件等关键字段上匹配的情况。例如,当客户没有电子邮件地址但数据输入系统需要它时,我们的顾问将使用随机电子邮件地址,从而导致许多不同的客户资料使用相同的电子邮件地址,电话、地址等也是如此。

我们所有的数据都在 Elasticsearch 中建立索引并存储在 SQL Server 数据库中。我的第一个想法是使用 Mahout 作为机器学习平台(因为这是一个 Java 商店),也许使用 H-base 来存储我们的数据(只是因为它适合 Hadoop 生态系统,不确定它是否有任何实际价值(我可以使用聚类算法或分类算法吗?当然,对于什么构成配置文件的唯一性,即哪些字段,必须使用某些规则。

我们的想法是首先将其部署为客户资料重复数据删除器服务,我们的数据输入系统可以在输入新客户资料时使用该服务来验证和检测可能的重复项,并且将来可能将其开发为分析平台以收集洞察我们的客户。

任何反馈将不胜感激:)

谢谢。

4

2 回答 2

16

实际上已经有很多研究,人们为此使用了许多不同类型的机器学习算法。我个人尝试过基因编程,效果相当不错,但我个人还是更喜欢手动调整匹配。

我有一些关于这个主题的研究论文的参考资料。StackOverflow 不想要太多的链接,但这里是使用谷歌应该足够的书目信息:

  • 链路发现配置的无监督学习,Andriy Nikolov,Mathieu d'Aquin,Enrico Motta
  • 一种基于相似度度量的实例匹配机器学习方法,Shu Rong1, Xing Niu1, Evan Wei Xiang2, Haofen Wang1, Qiang Yang2, and Yong Yu1
  • 学习记录链接的阻塞方案,Matthew Michelson 和 Craig A. Knoblock
  • 使用遗传编程学习链接规则,Robert Isele 和 Christian Bizer

不过,这都是研究。如果您正在为您的问题寻找实用的解决方案,我已经为这种类型的重复数据删除构建了一个开源引擎,称为Duke。它使用 Lucene 对数据进行索引,然后在进行更详细的比较之前搜索匹配项。它需要手动设置,尽管有一个脚本可以使用基因编程(见上面的链接)为您创建设置。还有一个人想为 Duke 制作一个 ElasticSearch 插件(参见线程),但到目前为止还没有做任何事情。

无论如何,这就是我在你的情况下采取的方法。

于 2013-05-14T11:05:41.797 回答
12

刚刚遇到类似的问题,所以有点谷歌。找到一个名为“Dedupe Python Library”的库 https://dedupe.io/developers/library/en/latest/

该库的文档详细介绍了对条目进行去重时的常见问题和解决方案以及去重领域的论文。因此,即使您不使用它,仍然可以阅读文档。

于 2014-06-25T06:00:38.933 回答