首页 防骗技巧 正文
  • 本文约881字,阅读需4分钟
  • 310
  • 0

Neo4J图数据库反欺诈分析实战(三) - 识别犯罪团伙

温馨提示:本文最后更新于2024年2月7日 13:05,若内容或图片失效,请在下方留言或联系博主。
摘要

同时介绍了常用的技术要点,如WITH、MERGE、SET、APOC、内存估算、创建图及运行图算法,下回讲解为危险人群进行评分,有效识别欺诈罪犯。

1 简介

上次在Neo4J图数据库反欺诈分析实践(二)-准备数据中,作者介绍了如何将数据导入Neo4J分析平台,并对客户和交易信息做了一些简单的描述性分析。 接下来防骗数据库,需要有针对性地搜索诈骗犯罪分子,他们的身份信息(如电话号码、身份证号码等)与许多其他账户交织在一起,因此可以通过这些共享信息找到线索。

2 共享身份信息

上一节已经定义了客户和实体之间的关系,比如客户有电子邮件、电话号码、SSN等。如果有多个客户使用相同的信息,这些连接可以确保他们链接在一起,这就是很常见。 它在很大程度上帮助我们解构复杂的关系。 但是防骗数据库,如果要运行特定的图算法,则需要对这些关系进行一些处理,因为图算法适用于不同的图结构。 有些算法适用于同构图,即图中的所有节点都是同一类型,并且只有同一类关系。 有些算法适用于包含多种类型的节点和关系的异构图。

Neo4J 提供的示例使用弱连通分量 [1] 算法来查找无向图中的连通节点。 该算法适用于同构图,因此创建了一种新的关系 - 在每个客户之间计算的 SHARED_IDENTIFIERS。 实体信息的数量。 如果客户A和B的电子邮件、电话号码和SSN相同,则SHARED_IDENTIFIERS的属性计数为3。

// 创建SHARED_IDENTIFIERS关系
MATCH (c1:Client)-[:HAS_EMAIL|:HAS_PHONE|:HAS_SSN]->(info)
<-[:HAS_EMAIL|:HAS_PHONE|:HAS_SSN]-(c2:Client)
WHERE c1.id<>c2.id
WITH c1, c2, count(*) as cnt
MERGE (c1) - [:SHARED_IDENTIFIERS {count: cnt}] - (c2);

命令中的WITH关键字可以将查询语句串在一起,以便下一步可以使用上一步中的变量。 MERGE 关键字用途广泛。 综上所述,它可以使图形中存在一种模式。 如果该模式不存在,它将创建一个新模式。 这里它用于创建关系。 请注意,示例中的数据量很小,只有 30 万个节点。 如果节点数量巨大,建议使用Neo4J提供的APOC[2]方法批量执行操作。

3 创建图表

在运行任何算法之前,您必须首先创建一个图。 您可以使用之前创建的 SHARED_IDENTIFIERS 关系来构建图形并将其映射到内存。 因此,Neo4J建议在构建图和运行算法之前进行内存估计,以确保计算资源能够满足需求:

CALL gds.graph.create.cypher.estimate(
'MATCH (c:Client) RETURN id(c) AS id',
'MATCH (c1:Client)-[r:SHARED_IDENTIFIERS]-(c2:Client)
WHERE c1.id<>c2.id
RETURN id(c1) AS source,id(c2) AS target,r.count AS weight')
YIELD requiredMemory,nodeCount,relationshipCount;

输出是:

防骗数据库是什么意思_防骗数据库_防诈骗数据库是什么

预估结果

确保有足够的内存来正式创建图形:

CALL gds.graph.create('WCC', 'Client',
 {
     SHARED_IDENTIFIERS:{
         type: 'SHARED_IDENTIFIERS',
         properties: {
             count: {
                 property: 'count'
                }
            }
        }
 }
) YIELD graphName,nodeCount,relationshipCount,createMillis;

如果运行正常,可以使用CALL gds.graph.list(); 命令查看创建的图表。

4 执行WCC算法聚类

同样,建议在执行算法之前估计内存资源,但这里不再赘述。 使用以下命令运行 WCC。 SET 指令可以为新属性赋值。 这里,对客户所在的集群进行了标记。 正如您所看到的,代码排除了集群中只有一个客户的情况,因为这些人与其他人没有关系。

CALL gds.wcc.stream('WCC')
YIELD componentId,nodeId
WITH componentId AS cluster,gds.util.asNode(nodeId) AS client
WITH cluster, collect(client.id) AS clients --collect合并一个序列
WITH *,size(clients) AS clusterSize
WHERE clusterSize>1
UNWIND clients AS client --UNWIND展开一个序列
MATCH(c:Client)
WHERE c.id=client
SET c.firstPartyFraudGroup=cluster;

WCC算法帮助识别出需要关注的人群,下一步算法可以根据聚类结果继续计算。

5 总结

这部分完成群体关系的重新整合,识别具有相似特征的群体,以方便后续分析。 同时介绍了常用的技术点,如WITH、MERGE、SET、APOC、内存估计、图创建和操作图算法。 下一次我们将讲解如何对危险群体进行评分,有效识别诈骗犯罪分子。

参考

[1] 弱连通分量:

[2] apoc.periodic.iterate:

评论