索赔欺诈

1. 引言

索赔欺诈,尤其是伪造伤害索赔,使保险公司损失数十亿,并提高诚信客户的保费。传统的欺诈检测缓慢且不准确。图数据库通过可视化索赔人、医疗记录和社交媒体之间的复杂连接来提供解决方案。这揭示了表明欺诈的不一致之处,例如受重伤但未接受医疗治疗的索赔人。通过使用图数据库,保险公司可以更好地检测欺诈,保护其财务,并确保资源流向真正需要它们的人。

2. 场景

索赔欺诈类型

  • 汽车保险欺诈:伪造事故、虚假鞭打索赔、夸大维修费用和车辆遗弃

  • 财产保险欺诈:纵火、虚假入室盗窃索赔、夸大损失评估和虚构财产损失

  • 夸大损失:夸大伤害、丢失物品价值或医疗费用

  • “撞车骗保”:为虚假索赔而策划的事故

问题的严重程度

  • 欺诈案件上升:2023年,检测到11亿英镑的欺诈性索赔,比2022年增加4%,检测到的欺诈性索赔数量增长16%

  • 平均索赔金额:2023年为13,000英镑

  • 汽车欺诈普遍性:2023年检测到45,800起欺诈性汽车索赔,价值5.01亿英镑

  • 有组织犯罪参与:复杂性增加,检测难度加大

挑战

  • 复杂欺诈模式:传统系统难以检测复杂欺诈

  • 复杂欺诈策略:欺诈者不断演变策略

  • 需要实时检测:需要高级分析和机器学习

  • 数据共享与协作:由于竞争和数据隐私,面临挑战

3. 解决方案

图数据库提供了一种新的欺诈检测方法。它们利用图论,准确地建模实体之间的复杂关系和模式。图模型表示实体和关系,例如客户账户、交易及其连接。

使用图数据库进行欺诈检测有以下几个好处

  • 增强欺诈检测:可视化客户互动可以揭示隐藏的欺诈模式

  • 实时分析:图数据库支持实时监控和对欺诈的更快响应

  • 提高准确性:图数据库比传统数据库能更准确地识别模式和异常

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

  1. 链接分析:Neo4j 可以探索索赔人、医疗专业人员及其他相关方之间的连接,以揭示欺诈网络。

  2. 模式检测:图数据库擅长在没有起始点的情况下识别模式,分析数据形状而非仅仅数据本身,这对于揭示复杂的欺诈方案至关重要。

  3. 实时检测:Neo4j 支持实时检测可疑活动。

4. 建模

本节提供了 Cypher 查询示例,以演示如何构建数据以及查询在实际场景中可能是什么样子。示例图将包括个人、医疗专业人员、索赔、车辆及其他相关实体的节点,以及 HAS_CLAIM、TREATED_BY 和 INVOLVED_IN 等关系,以展示实体如何连接。

4.1. 数据模型

4.1.1. 必填字段

Claimant 节点

  • name: 索赔人姓名

MedicalProfessional 节点

  • name: 医疗专业人员姓名

Claim 节点

  • claimID: 索赔的唯一标识符

  • date: 索赔日期

  • amountClaimed: 索赔金额

Vehicle 节点

  • VIN: 车辆识别码

关系

(Claimant)-[:HAS_CLAIM]->(Claim)
(Claim)-[:TREATED_BY]->(MedicalProfessional)
(Claimant)-[:OWNS]->(Vehicle)
(Vehicle)-[:INVOLVED_IN]->(Claim)
(MedicalProfessional)-[:TREATS]->(Claimant)

4.2. 演示数据

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

//
// 1. Create Claimants
//
CREATE (c1:Claimant {name: "John Doe"})
CREATE (c2:Claimant {name: "Jane Smith"})
CREATE (c3:Claimant {name: "Bob Johnson"})


//
// 2. Create Medical Professionals
//
CREATE (m1:MedicalProfessional {name: "Dr. Gregory House"})
CREATE (m2:MedicalProfessional {name: "Dr. John Watson"})


//
// 3. Create Vehicles
//
CREATE (v1:Vehicle {VIN: "VIN-12345"})
CREATE (v2:Vehicle {VIN: "VIN-67890"})
CREATE (v3:Vehicle {VIN: "VIN-111213"})


//
// 4. Create Claims
//
CREATE (cl1:Claim {claimID: "CL100", date: date("2025-01-01"), amountClaimed: 5000})
CREATE (cl2:Claim {claimID: "CL101", date: date("2025-01-05"), amountClaimed: 2000})
CREATE (cl3:Claim {claimID: "CL102", date: date("2025-01-10"), amountClaimed: 10000})
CREATE (cl4:Claim {claimID: "CL103", date: date("2025-01-12"), amountClaimed: 8000})


//
// 5. Establish Relationships
//


// John Doe has claim CL100, treated by Dr. House.
// John Doe owns VIN-12345, which was involved in CL100.
CREATE (c1)-[:HAS_CLAIM]->(cl1)
CREATE (cl1)-[:TREATED_BY]->(m1)
CREATE (c1)-[:OWNS]->(v1)
CREATE (v1)-[:INVOLVED_IN]->(cl1)
CREATE (m1)-[:TREATS]->(c1)


// Jane Smith has claim CL101, treated by Dr. Watson.
// Jane Smith owns VIN-67890, which was involved in CL101.
CREATE (c2)-[:HAS_CLAIM]->(cl2)
CREATE (cl2)-[:TREATED_BY]->(m2)
CREATE (c2)-[:OWNS]->(v2)
CREATE (v2)-[:INVOLVED_IN]->(cl2)
CREATE (m2)-[:TREATS]->(c2)


// Bob Johnson has claim CL102, treated by Dr. Watson.
// Bob Johnson owns VIN-111213, which was involved in CL102.
CREATE (c3)-[:HAS_CLAIM]->(cl3)
CREATE (cl3)-[:TREATED_BY]->(m2)
CREATE (c3)-[:OWNS]->(v3)
CREATE (v3)-[:INVOLVED_IN]->(cl3)
CREATE (m2)-[:TREATS]->(c3)


// Create a second claim for John Doe (CL103),
// which is also treated by Dr. House and involves the same vehicle VIN-12345.
CREATE (c1)-[:HAS_CLAIM]->(cl4)
CREATE (cl4)-[:TREATED_BY]->(m1)
CREATE (v1)-[:INVOLVED_IN]->(cl4)
CREATE (m1)-[:TREATS]->(c1)

4.3. Neo4j 模式

如果您调用

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

您将看到以下响应

insurance claims fraud schema

5. Cypher 查询

5.1. 识别多重索赔的索赔人

在此查询中,我们将识别提交了多于一次索赔的索赔人,因为多重索赔有时可能是一个危险信号。

查看图

MATCH path=(c:Claimant)-[:HAS_CLAIM]->(cl:Claim)
WITH c, count(cl) AS numClaims
WHERE numClaims > 1
RETURN path

查看统计数据

MATCH (m:MedicalProfessional)<-[:TREATED_BY]-(cl:Claim)
WITH m, count(cl) AS claimCount, sum(cl.amountClaimed) AS totalAmount
WHERE claimCount > 1 OR totalAmount > 5000
RETURN m.name AS MedicalProfessional, claimCount, totalAmount
ORDER BY totalAmount DESC

功能

  • 统计每个 MedicalProfessional 关联的索赔数量。

  • 计算索赔总金额。

  • 筛选出处理多起索赔或与大额索赔相关的医生。

5.2. 识别医疗专业人员的异常模式

找出在索赔中异常频繁出现,或与异常高额索赔总额相关的医生或医疗专业人员。

查看图

MATCH path=(m:MedicalProfessional)<-[:TREATED_BY]-(cl:Claim)
WITH m, count(cl) AS claimCount, sum(cl.amountClaimed) AS totalAmount, path
WHERE claimCount > 1 OR totalAmount > 5000
RETURN path

返回统计数据

MATCH (m:MedicalProfessional)<-[:TREATED_BY]-(cl:Claim)
WITH m, count(cl) AS claimCount, sum(cl.amountClaimed) AS totalAmount
WHERE claimCount > 1 OR totalAmount > 5000
RETURN m.name AS MedicalProfessional, claimCount, totalAmount
ORDER BY totalAmount DESC

功能

  • 统计每个 MedicalProfessional 关联的索赔数量。

  • 计算索赔总金额。

  • 筛选出处理多起索赔或与大额索赔相关的医生。

5.3. 识别潜在的“撞车骗保”诈骗

“撞车骗保”诈骗通常涉及伪造事故,同一车辆或同一伙人反复出现在多起索赔中。一个简单的模式是:* 单一车辆涉及多起索赔,且索赔人可能不同或索赔日期/金额可疑。

查看图

MATCH (v:Vehicle)-[:INVOLVED_IN]->(cl:Claim)
WITH v, collect(cl) AS allClaims
WHERE size(allClaims) > 1
UNWIND allClaims AS claim
MATCH path=(v)-[:INVOLVED_IN]->(claim)
RETURN path

返回统计数据

MATCH (v:Vehicle)-[:INVOLVED_IN]->(cl:Claim)
WITH v, count(cl) AS claimCount
WHERE claimCount > 1
RETURN v.VIN AS Vehicle, claimCount

功能

  • 收集与每辆车相关联的所有索赔。

  • 筛选出出现在多于一项索赔中的记录

6. 图数据科学 (GDS)

图数据科学 (GDS) 通过分析网络结构和模式,提供强大的算法用于高级欺诈检测。在此,我们将探讨关键算法及其在保险欺诈检测中的应用。

6.1. 图投影

在运行任何 GDS 算法之前,您必须创建图投影。投影是图的内存副本,已针对分析处理进行了优化。

6.1.1. 基本投影

这是包含我们欺诈检测图中所有节点类型和关系的基本投影

CALL gds.graph.project(
    'fraud-graph',
    // Node labels to include
    ['Claimant', 'MedicalProfessional', 'Claim', 'Vehicle'],
    // Relationship types to include
    {
        HAS_CLAIM: {orientation: 'UNDIRECTED'},
        TREATED_BY: {orientation: 'UNDIRECTED'},
        OWNS: {orientation: 'UNDIRECTED'},
        INVOLVED_IN: {orientation: 'UNDIRECTED'}
    }
);

6.1.2. 专用投影

对于特定分析,您可能希望创建更集中的投影。例如,用于分析索赔人关系

// Project a graph of only claimants who share medical professionals
CALL gds.graph.project(
    'claimant-network',
    'Claimant',
    {
        SHARES_DOCTOR: {
            type: 'TREATED_BY',
            orientation: 'UNDIRECTED'
        }
    }
);

6.1.3. 管理投影

用于管理投影的有用命令

// List all projections
CALL gds.graph.list();

// Drop a projection when done
CALL gds.graph.drop('fraud-graph');

6.2. 社区检测

社区检测算法有助于识别节点群集,这些节点群集内部连接比与网络其他部分的连接更密集。

6.2.1. Louvain 方法

Louvain 方法在欺诈网络中检测社区方面特别有效

CALL gds.louvain.stream('fraud-graph')
YIELD nodeId, communityId
RETURN gds.util.asNode(nodeId).name AS name, communityId
ORDER BY communityId ASC

这有助于识别:* 经常一起提交索赔的索赔人群体 * 始终与同一索赔人群体合作的医疗专业人员 * 涉及多起索赔且与同一批人相关的车辆

6.3. 中心性算法

中心性算法有助于识别网络中最具影响力或最可疑的节点。

6.3.1. PageRank

PageRank 有助于识别欺诈网络中的关键参与者

CALL gds.pageRank.stream('fraud-graph')
YIELD nodeId, score
RETURN gds.util.asNode(nodeId).name AS name, score
ORDER BY score DESC

这揭示了:* 与索赔连接异常高的医疗专业人员 * 多个欺诈方案的核心索赔人 * 经常涉及可疑索赔的车辆

6.3.2. 中介中心性

识别充当不同社区之间桥梁的节点

CALL gds.betweenness.stream('fraud-graph')
YIELD nodeId, score
WITH gds.util.asNode(nodeId) as node, score
RETURN
    labels(node)[0] as type,
    CASE labels(node)[0]
        WHEN 'Claimant' THEN node.name
        WHEN 'MedicalProfessional' THEN node.name
        WHEN 'Claim' THEN node.claimID
        WHEN 'Vehicle' THEN node.VIN
        ELSE 'Unknown'
    END as identifier,
    score as betweenness_score
ORDER BY score DESC
LIMIT 20;

此分析揭示了:* 欺诈网络中的关键中介(中介中心性分数高)* 连接原本分离群体的实体 * 潜在的欺诈团伙协调者 * 连接不同索赔人群体的医疗专业人员

6.4. 节点相似性

节点相似性算法有助于识别可能表明欺诈行为的模式。

6.4.1. Node2Vec

Node2Vec 生成可用于测量节点相似性的向量嵌入。以下是如何有效使用它的方法

// First, generate and store embeddings
CALL gds.node2vec.write('fraud-graph', {
    embeddingDimension: 128,
    walkLength: 80,
    walksPerNode: 10,
    writeProperty: 'embedding'
})
YIELD nodePropertiesWritten;

// Then find similar nodes using cosine similarity
// For example, find claimants similar to 'John Doe'
MATCH (source:Claimant {name: 'John Doe'})
MATCH (other:Claimant)
WHERE other <> source
WITH source, other,
     gds.similarity.cosine(source.embedding, other.embedding) AS similarity
RETURN other.name AS similar_claimant,
       similarity
ORDER BY similarity DESC
LIMIT 5;

这种方法有助于识别:* 行为模式相似的索赔人群体 * 患者网络相似的医疗专业人员 * 具有可疑特征的索赔 * 基于行为相似性的潜在欺诈团伙

6.5. 弱连接组件

WCC 有助于识别潜在欺诈活动的孤立群集

// First identify the components
CALL gds.wcc.stream('fraud-graph')
YIELD nodeId, componentId
WITH gds.util.asNode(nodeId) as node, componentId
// Group by component and collect node information
WITH componentId,
     collect(DISTINCT labels(node)[0]) as nodeTypes,
     count(*) as componentSize,
     collect(DISTINCT
        CASE labels(node)[0]
            WHEN 'Claimant' THEN node.name
            WHEN 'MedicalProfessional' THEN node.name
            WHEN 'Claim' THEN node.claimID
            WHEN 'Vehicle' THEN node.VIN
            ELSE null
        END
     ) as entities
// Filter out null values and return meaningful information
WITH componentId,
     componentSize,
     nodeTypes,
     [x IN entities WHERE x IS NOT NULL] as connectedEntities
RETURN
    componentId,
    componentSize as size,
    nodeTypes as types,
    connectedEntities as entities
ORDER BY size DESC
LIMIT 10;

此查询提供

  • componentId: 每个连接组件的唯一标识符

  • size: 组件中的节点数量

  • types: 组件中存在的节点类型(索赔人、索赔、车辆等)

  • entities: 组件中可识别实体的列表(姓名、索赔 ID、VIN)

这些 GDS 算法提供了强大的工具,用于

  • 识别索赔中的可疑模式

  • 检测有组织的欺诈团伙

  • 衡量实体之间连接的强度

  • 发现看似无关的索赔之间隐藏的关系

© . All rights reserved.