【问题标题】:Flagging possible identical users in an account management system在帐户管理系统中标记可能的相同用户
【发布时间】:2011-04-19 19:59:20
【问题描述】:

我正在为帐户管理系统上的滥用检测机制研究可能的架构。我想要的是根据表中的某些相关字段检测可能的重复用户。为了简化问题,假设我有一个包含以下字段的 USER 表:

Name
Nationality
Current Address
Login
Interests

很可能一个用户在这个表中创建了多条记录。此用户创建他/她的帐户可能存在某种模式。挖掘此表以标记可能重复的记录需要什么。另一个问题是规模。如果我们假设有一百万用户,那么在计算上将一个用户与其余用户进行匹配是不现实的。如果这些记录分布在不同地理位置的不同机器上会怎样?

我可以使用哪些技术来解决这个问题?我试图以与技术无关的方式提出这个问题,希望人们可以为我提供多种视角。

谢谢

【问题讨论】:

  • 可能您正在搜索的是近似检测具有一些相似性参数的重复项,这是理论,也许它会对您有所帮助:www-cse.ucsd.edu/users/elkan/approxdup.ps
  • @dfens - 本文有一些有趣的结果。感谢分享。
  • 不是一个真正的答案,但也许集群可以帮助你。这是一个活跃的研究主题,有很多论文......我有一种直觉告诉我“重复”应该以某种方式出现在同一个集群中。
  • @Matthieu M- 有没有在 RDBMS 上运行聚类算法的示例?
  • 我恐怕不知道,希望更多有见识的人看看这个:)

标签: database algorithm search runtime data-mining


【解决方案1】:

答案实际上取决于您如何为用户建模以及什么构成重复。

可能有一个用户使用了所有哈利波特角色的名字。祝你好运找到那个模式:)

如果您正在寻找大致相似的记录,请尝试以下简单方法: 散列文档中的每个单词并选择最小的木瓦。对 k 个不同的哈希函数执行此操作。连接这些最小哈希。你所拥有的几乎是重复的。

为了清楚起见,假设一个记录有单词 w1....wn。假设您的哈希函数是 h1...hk。

让 m_i = min_j (h_i(w_j)

签名是 S = m1.m2.m3....mk

这个签名很酷的一点是,如果两个文档包含 90% 的相同单词,那么这两个文档的签名相同的几率是 90%。因此,您无需查找近似重复项,而是查找签名中的精确重复项。如果你想增加匹配的数量,那么你减少 k 的值,如果你得到太多的误报,那么你增加 k 的数量。

当然还有隐含用户特征的方法,比如他们的IP地址和cookie等。

【讨论】:

  • @user485440 - 你能详细说明你选择最小木瓦的意思吗?我也有点困惑,为什么我们需要使用 k 个不同的哈希函数然后将它们连接起来?我还想知道,在可接受的运行时内有哪些散列函数用于散列字母数字文本?
  • 如果 k 值较低(比如 1),两条相差 20-30% 的记录也可能具有相同的签名。随着您增加 K,这些记录具有相同签名的可能性将越来越小。但是两条记录说 99% 相同。然后即使 k = 10 也很可能具有相同的签名。希望这会有所帮助。
  • 另外,我对性能良好的哈希不太了解,但也许这值得另一个关于 SO 的问题。
  • @user485440 - 所以想法是将哈希应用于记录。跟踪散列结果并将其与随后在该记录上应用另一个散列连接起来,并为 k 个不同的散列构建一串散列。对需要比较的其他记录执行相同操作。如果哈希匹配,我们有一个重复。这就是你的建议吗?执行散列然后对散列结果进行模式匹配不会有开销吗?将其与一百万以上/十亿条记录相乘,将会产生什么样的性能影响?
  • 我认为我的原始帖子可能不够清晰。我添加了更多文字来解释这个想法。但基本上使用基于最小哈希的签名的优点是,您现在可以查找不接近匹配的精确匹配,这可以使用哈希表或 n.log n 使用排序在线性时间内完成。
猜你喜欢
  • 2011-06-04
  • 2018-12-19
  • 2021-10-29
  • 2014-11-12
  • 2017-07-07
  • 1970-01-01
  • 1970-01-01
  • 2012-10-16
  • 2018-12-25
相关资源
最近更新 更多