BulletTech官方微信

V2

2022/04/09阅读:27主题:自定义主题1

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

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

1 前言

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

2 共享的身份信息

在上一节中,已经定义了客户和实体的关系,如客户拥有电子邮件、电话、SSN等,如果有多个客户使用相同的信息,这些联系即可以确保他们被联系在一起,这在很大程度上帮助我们解构了复杂的关系。但是如果要运行特定的图算法,还需要对这些关系进行一些处理,因为图算法适用的图结构各有不同,有的算法适用于同构的图,即图中所有节点的类型相同,只有同一种关系。有的算法适用于异构的图,其中含有多种类型的节点和关系。

Neo4J提供的示例使用了弱连接分量(Weakly Connected Components)[1]算法寻找无向图中连接的节点,该算法适用于同构图,因此创建一种新的关系 - SHARED_IDENTIFIERS 计算每个客户之间共享的实体信息的数量,如客户A和B的电子邮件、电话和SSN相同,则SHARED_IDENTIFIERS的属性count为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;

输出为:

requiredMemory nodeCount relationshipCount
"8804 KiB" 2433 1517

确保内存足够就可以正式创建图:

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]

Weakly Connected Components: https://neo4j.com/docs/graph-data-science/current/algorithms/wcc/

[2]

apoc.periodic.iterate: https://neo4j.com/labs/apoc/4.2/overview/apoc.periodic/apoc.periodic.iterate/

分类:

人工智能

标签:

人工智能

作者介绍

BulletTech官方微信
V2