合成身份欺诈

合成身份欺诈用例演练

1. 简介

合成身份盗用是一种欺诈类型,犯罪分子将真实和虚假的身份信息结合起来,以开立账户或进行购买。真实信息(如照片或护照号码)通常被窃取,并与虚假信息(如假名、地址或出生日期)组合在一起。然后,欺诈者利用这种合成身份来申请信用卡或进行欺诈性消费。由于这种身份信息是拼凑而成的,因此这种方法有时被称为“科学怪人身份”(Frankenstein identity)。

2. 应用场景

身份欺诈是一种不断演变且广泛存在的欺诈形式,对个人、企业和整个经济构成重大风险。身份欺诈的后果可能是毁灭性的,会导致经济损失、信用记录受损,以及恢复被盗身份的艰难过程。

随着关于新立法的讨论,监管机构将为受害者提供额外的财务保护,并由汇款和收款机构分摊责任。因此,捕获此类欺诈行为变得越来越重要,因为任何从客户账户中非法获取的资金都可能涉及赔偿问题。

身份欺诈是一种普遍且重大的威胁,需要银行的高度关注和主动采取措施。通过有效缓解身份欺诈,银行不仅可以保护客户并维护其信任,还可以为金融体系的整体安全和稳定做出贡献。

3. 解决方案

Neo4j 是一种先进的图数据库,在检测合成身份方面非常有效。它可以对复杂的各种关系进行建模、进行高效的链接分析并识别模式。这使其成为快速、轻松地发现合成身份欺诈特征的各种可疑连接和行为的理想解决方案。

3.1. 图数据库如何提供帮助?

实施 Neo4j 可以帮助执行以前无法实现的分析。以下是几个场景示例:

  • 链接分析: Neo4j 支持高效的链接分析,用于探索身份之间的连接,分析数据点之间的相互关联,从而识别合成身份集群。

  • 模式检测: Neo4j 可以在没有预设起点的情况下识别模式,使其非常适合分析数据形态,而不仅仅是数据本身。

  • 实时分析: Neo4j 支持实时分析,以便快速识别和响应合成身份欺诈。通过持续处理数据,图数据库可以在近乎实时的情况下检测可疑活动并生成警报。

4. 建模

本节将展示示例图上的 Cypher 查询示例。目的是说明查询的结构,并提供关于如何在实际环境中构建数据的指南。我们将在一个包含少量节点的图上进行演示。示例图将基于以下数据模型:

4.1. 数据模型

fs synthetic identity fraud data model

4.1.1 必填字段

以下是开始所需的字段

Customer(客户)节点

  • customerId:包含客户记录的唯一系统标识符。

Passport(护照)节点

  • passportNumber:包含 Customer 使用的护照号码

Phone(电话)节点

  • phoneNumber:包含 Customer 使用的电话号码

Email(电子邮件)节点

  • address:包含 Customer 使用的电子邮件地址

4.2. 演示数据

以下 Cypher 语句将在 Neo4j 数据库中创建示例图:

// Create all people nodes
CREATE (c1:Customer {customerId: "CUS001"})
CREATE (c2:Customer {customerId: "CUS002"})
CREATE (c3:Customer {customerId: "CUS003"})
// Create email node
CREATE (email:Email {address: "michael@abc.com"})
// Create phone node
CREATE (phone:Phone {phoneNumber: "9999990304"})
// Create passport node
CREATE (passport:Passport {passportNumber: 1234567890})


// Create email relationship
CREATE (c1)-[:HAS_EMAIL]->(email)<-[:HAS_EMAIL]-(c2)
// Create phone relationship
CREATE (c2)-[:HAS_PHONE]->(phone)<-[:HAS_PHONE]-(c3)
// Create passport relationship
CREATE (c3)-[:HAS_PASSPORT]->(passport)<-[:HAS_PASSPORT]-(c1)

4.3. Neo4j 方案

如果调用

// Show neo4j scheme
CALL db.schema.visualization()

您将看到以下响应

fs synthetic identity fraud schema

5. Cypher 查询

5.1. 识别共享相同电子邮件的客户

在此查询中,我们将识别所有共享相同电子邮件地址的客户。

  • Customer 节点应连接到同一个 Email 节点。

  • 遍历中已应用了关系的方向。

您可以通过几种不同的方式来表达相同的查询。

// Match all customers sharing an email
MATCH path=(c1:Customer)-[:HAS_EMAIL]->(email)<-[:HAS_EMAIL]-(c2:Customer)
RETURN path

在这里,您可以看到我们为 Customer 节点提供了标签,并指定了要遵循的确切关系。您也可以通过以下方式获得相同的结果:

// Match all customers sharing an email
MATCH path=(c1:Customer)-[]->(email:Email)<-[]-(c2:Customer)
RETURN path

这里的区别在于,这次我们没有指定要遵循的关系类型,但由于我们指定了 Email 节点标签,并且只有一个关系指向 Email 节点,所以我们得到了相同的结果。如果您的图中包含多个连接客户与电子邮件的关系,那么此查询将给出错误的结果。

如果您像下面的查询那样在节点和关系上提供所有标签,则可以保证正确的遍历并确保不会得到任何错误的结果。

// Match all people sharing an email
MATCH path=(c1:Customer)-[:HAS_EMAIL]->(:Email)<-[:HAS_EMAIL]-(c2:Customer)
RETURN path

5.2. 识别共享多个特征的客户

在此查询中,我们将识别任何与他人共享相同电子邮件、电话或护照号码的 Customer

  • Customer 节点应连接到同一个 Email 节点。

  • Customer 节点应连接到同一个 Phone 节点。

  • Customer 节点应连接到同一个 Passport 节点。

  • 遍历中已应用了关系的方向。

// Match all customers sharing an email, phone or passport number
MATCH path=(c1:Customer)-[:HAS_EMAIL|HAS_PHONE|HAS_PASSPORT]->(info)<-[:HAS_EMAIL|HAS_PHONE|HAS_PASSPORT]-(c2:Customer)
RETURN path

6. 图数据科学 (GDS)

6.1. 弱连通分量 (WCC)

弱连通分量 (WCC) 算法用于识别有向图和无向图中连接节点的组。如果两个节点之间存在路径,则认为它们是连接的;一个分量由所有彼此连接的节点组成。

使用此算法的原因在于它可以识别具有相似属性(例如 EmailPhonePassport)的连接节点集群。它生成一个可以在未来调查中重复使用的社区 ID,从而为数据及其周围的社区提供有价值的见解。

6.1.1 创建单分图 (Monopartite Graph)

WCC 算法只能应用于仅包含一个节点标签的单分图。在我们的例子中,节点标签将是 Customer。我们必须修改图表以使数据与 WCC 算法兼容。为此,我们可以使用下面的查询来建立一个新的关系,称为 LINKED,该关系将由算法使用。

// Match all customers sharing an email, phone or passport number
MATCH (c1:Customer)-[:HAS_EMAIL|HAS_PHONE|HAS_PASSPORT]->(info)<-[:HAS_EMAIL|HAS_PHONE|HAS_PASSPORT]-(c2:Customer)
WHERE ID(c1) > ID(c2)
CREATE (c1)-[:LINKED]->(c2)

上面的查询修改了数据模型,并将其更新为如下所示:

fs synthetic identity fraud gds data model

6.1.2 图投影 (Graph Projection)

要开始运行任何图数据科学 (GDS) 算法,首先需要对图的一部分进行投影。这将使您能够有效地分析投影中的数据。

CALL gds.graph.project(
    // graph projection name
    'myGraph',
    // nodes to import into projection
    'Customer',
    // relationship to import into projection
    'LINKED'
)

6.1.2 GDS 流式输出 (Stream)

使用 stream 执行模式时,算法将为每个节点提供组件 ID。这允许直接检查结果或在 Cypher 中进行后续处理,而不会产生任何负面影响。通过对结果进行排序,可以将属于同一组件的节点显示在一起,以便于分析。

CALL gds.wcc.stream('myGraph')
YIELD nodeId, componentId
RETURN gds.util.asNode(nodeId).customerId AS customerId, componentId
ORDER BY componentId, customerId

6.1.3 GDS 写入 (Write)

通过使用“write”执行模式,您可以将每个节点的组件 ID 作为属性添加到 Neo4j 数据库中。您必须使用 writeProperty 配置参数指定新属性的名称。输出将显示一行包含额外指标的摘要,类似于 stats 模式。使用 write 模式允许您将结果直接保存到数据库中。

CALL gds.wcc.write('myGraph', { writeProperty: 'componentId' })
YIELD nodePropertiesWritten, componentCount;
© . This site is unofficial and not affiliated with Neo4j, Inc.