使用机器学习进行数据去重

27

我有一个问题,想用机器学习来解决,但不确定它是否适用于我的用例。

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

大部分数据是使用外部系统手动输入的,没有经过验证,因此我们的许多客户在我们的数据库中拥有一个以上的档案,有时每个记录中的数据都不同。例如,我们可能会为客户John Doe拥有5个不同的条目,每个条目都具有不同的联系方式。

我们还有这样一种情况,即代表不同客户的多个记录在关键字段(如电子邮件)上匹配。例如,当客户没有电子邮件地址,但数据输入系统需要它时,我们的顾问将使用随机的电子邮件地址,导致许多不同的客户档案使用相同的电子邮件地址,电话号码,地址等。

我们所有的数据都在Elasticsearch中进行索引,并存储在SQL Server数据库中。我的第一个想法是使用Mahout作为机器学习平台(因为这是一个Java商店),也许使用H-base来存储我们的数据(只是因为它符合Hadoop生态系统,不确定它是否真正有价值),但我越看越糊涂,因为我不确定它会在我的情况下起作用,首先我不确定我可以使用什么样的算法,因为我不确定这个问题属于哪种算法类型,我能使用聚类算法或分类算法吗?当然,一定要使用某些规则来确定档案的唯一性,即哪些字段。

想法是最初部署此服务作为客户档案去重器,我们的数据输入系统可以使用它来验证并检测可能的重复项,并在将来将其发展成一个分析平台,以收集有关我们的客户的见解。

任何反馈都将不胜感激:)

谢谢。


1
有时每个记录中的数据都不同,那么机器学习算法应该如何找到重复项呢?此外,如果John Doe添加了几乎相同的数据,你怎么知道他是同一个人?在我看来,你只需要在客户数据库中建立一个紧密的关系模型,而不是抛出流行词汇。 - Thomas Jungblut
@thomas 确实如你所说,我在使用流行词汇,但事实是我正在尝试进入大数据领域,并认为这是一个学习的好机会,这就是为什么我说我不知道这是否有效的原因。我的想法是,我需要匹配关键字段,比如电子邮件,这些字段在业务上代表唯一性,尽管并非总是如此。感谢您的建议。 - John K
不确定您的Sql Server是哪个版本,但您可能可以利用SSIS中的数据清洗转换(模糊分组和模糊查找):http://msdn.microsoft.com/en-us/magazine/cc163731.aspx - Adrian Torrie
请查看以下链接:http://chairnerd.seatgeek.com/fuzzywuzzy-fuzzy-string-matching-in-python/ - Sudip Bhandari
2个回答

16
有很多关于这个问题的研究,人们使用了许多不同种类的机器学习算法。我个人尝试过遗传编程,效果还不错,但我个人仍然更喜欢手动调整匹配。我有一些关于这个主题的研究论文的参考资料。StackOverflow不希望有太多链接,但这里是使用Google足够的文献信息:无监督学习链接发现配置,Andriy Nikolov, Mathieu d’Aquin, Enrico Motta;基于相似性度量的实例匹配的机器学习方法,Shu Rong1, Xing Niu1, Evan Wei Xiang2, Haofen Wang1, Qiang Yang2和Yong Yu1;学习记录链接的阻塞方案,Matthew Michelson和Craig A. Knoblock;使用遗传编程学习链接规则,Robert Isele和Christian Bizer。
这只是研究成果。如果您正在寻找解决问题的实际方案,我已经构建了一个开源引擎来进行此类去重,称为Duke。它使用Lucene对数据进行索引,然后在执行更详细的比较之前搜索匹配项。它需要手动设置,尽管有一个脚本可以使用遗传编程(请参见上面的链接)为您创建设置。还有一个人想要为Duke创建ElasticSearch插件(请参阅线程),但目前没有任何进展。

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


11

刚遇到类似问题,于是Google了一下。发现一个名为“Dedupe Python Library”的库。 https://dedupe.io/developers/library/en/latest/

这个库的文档详细介绍了在去重条目时常见的问题和解决方案以及在去重领域的论文。即使您没有使用它,仍然有必要阅读文档。


2
我完全同意,Dedupe看起来非常不错,如果你想了解这个主题,作者写的文章非常值得一读:http://www.cs.utexas.edu/~ml/papers/marlin-dissertation-06.pdf - Ole Henrik Skogstrøm
3
Dedupe其实是一个糟糕的库。安装和启动难度大,而且会根据数据集崩溃或冻结。 - Brian Yeh
是的,它仍然会崩溃,并且非常难设置。 - Mohsin Asif
是的,它仍然会崩溃,并且设置起来非常困难。 - Mohsin Asif

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接