银行欺诈检测
本交互式 Neo4j 图谱教程涵盖了银行欺诈检测场景。
问题介绍
银行和保险公司每年因欺诈损失数十亿美元。传统的欺诈检测方法在最大限度地减少这些损失方面发挥着重要作用。然而,越来越复杂的欺诈者已经开发出各种方法来逃避侦查,他们既协同作案,又利用各种其他手段构建虚假身份。
场景说明
虽然没有任何欺诈预防措施是完美的,但改进的巨大机会在于超越单个数据点,着眼于连接它们的关系。这些关系往往在为时已晚时才被注意到——这很不幸,因为这些关系通常蕴含着最佳线索。
典型场景
虽然每个第一方欺诈串通的精确细节因操作而异,但以下模式说明了欺诈团伙的常见运作方式
-
两名或更多人员组成一个欺诈团伙
-
该团伙共享一部分合法联系信息,即电话号码和地址,并将它们组合起来创建多个虚假身份
-
团伙成员使用这些虚假身份开设账户
-
新账户被添加到原始账户中:无担保信用额度、信用卡、透支保护、个人贷款等。
-
这些账户正常使用,有常规购物和及时还款
-
由于观察到负责任的信用行为,银行会随着时间推移增加循环信用额度
-
有一天,该团伙“爆发”,协调他们的活动,透支所有信用额度,然后消失
-
有时欺诈者会更进一步,在上述步骤之前立即使用假支票将其所有余额清零,使损失翻倍
-
收款流程随之启动,但代理人始终无法联系到欺诈者
-
无法收回的债务被核销
银行欺诈图数据模型
图数据库已成为克服这些障碍的理想工具。Cypher 等语言提供了简单的语义,用于在图谱中检测团伙,并实时在内存中导航连接。
下面的图数据模型展示了数据在图数据库中的实际外观,并说明了如何通过简单地遍历图谱来查找团伙

图1. 银行欺诈
实体链接分析
下面演示了对上述数据模型执行实体链接分析。下表中的方括号用于隔离集合的单个元素。
查找共享多个合法联系信息的账户持有人
MATCH (accountHolder:AccountHolder)-[]->(contactInformation)
WITH contactInformation,
count(accountHolder) AS RingSize
MATCH (contactInformation)<-[]-(accountHolder)
WITH collect(accountHolder.UniqueId) AS AccountHolders,
contactInformation, RingSize
WHERE RingSize > 1
RETURN AccountHolders AS FraudRing,
labels(contactInformation) AS ContactType,
RingSize
ORDER BY RingSize DESC
确定潜在欺诈团伙的财务风险
MATCH (accountHolder:AccountHolder)-[]->(contactInformation)
WITH contactInformation,
count(accountHolder) AS RingSize
MATCH (contactInformation)<-[]-(accountHolder),
(accountHolder)-[r:HAS_CREDITCARD|HAS_UNSECUREDLOAN]->(unsecuredAccount)
WITH collect(DISTINCT accountHolder.UniqueId) AS AccountHolders,
contactInformation, RingSize,
SUM(CASE type(r)
WHEN 'HAS_CREDITCARD' THEN unsecuredAccount.Limit
WHEN 'HAS_UNSECUREDLOAN' THEN unsecuredAccount.Balance
ELSE 0
END) as FinancialRisk
WHERE RingSize > 1
RETURN AccountHolders AS FraudRing,
labels(contactInformation) AS ContactType,
RingSize,
round(FinancialRisk) as FinancialRisk
ORDER BY FinancialRisk DESC
此页面有帮助吗?