database - 在帐户管理系统中标记可能的相同用户

标签 database algorithm search runtime data-mining

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

Name
Nationality
Current Address
Login
Interests

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

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

谢谢

最佳答案

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

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

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

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

令 m_i = min_j (h_i(w_j)

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

这个签名的妙处在于,如果两个文档包含 90% 的相同单词,那么两个文档的签名相同的可能性为 90%。因此,您不是寻找近似重复项,而是寻找签名中的精确重复项。如果你想增加匹配的数量,那么你减少 k 的值,如果你得到太多误报,那么你增加 k 的数量。

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

关于database - 在帐户管理系统中标记可能的相同用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3838971/

相关文章:

mysql - siremis 的数据库配置错误 : SQLSTATE[HY000] [1045] Access denied for user 'siremis' @'localhost' (using password: YES)

mysql - 如何通过过程在三个不同的表中一次插入多行

algorithm - 您是在递归算法中以广度优先还是深度优先进行搜索?

javascript - 使用 javascript 编写预序遍历代码

Postgresql:可能在 lob 内进行全文搜索吗?

java - Java 中可搜索的对象列表

android - 在 Raspberry Pi 上编程 Python

objective-c - 关系不更新的 NSFetchedResultsController

objective-c - 算法代码优化 : Find the Equilibirum: Find an index in an array such that its prefix sum equals its suffix sum

c - Boyer-Moore-Horspool 实现