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