在现代欺诈和各类金融犯罪中,欺诈者通过改变自身身份等达到逃避风控规则的欺诈目的。您可以通过图数据库GDB建立追踪用户行为的图结构,实时分析欺诈行为的离散数据,识别欺诈环,帮助您快速防范和解决欺诈行为。
背景信息
保险理赔欺诈一般根据保险提供商所具备的患者、疾病和索赔等数据,分析与被保人相关的理赔单、疾病等实体的关联关系,识别异常理赔记录,发现欺诈团伙。
1、数据和模型
以保险领域公开数据集为例。更多信息,请参见数据模型参考下载。
数据包括保险行业基本元素,可以将数据模型抽象为下图:
- 点:投保人(policyholder)、保单(incharge)、理赔(claim)、病人(patient)、疾病(disease)。
- 边:疾病-病人(has_disease)、投保人-理赔(policyholder_of_claim)、保单-理赔(inchagre_of_claim)、病人-理赔(insured_of_claim)、相似理赔(similar_claim)、投保人关联(policyholder_connection)。
- 属性:姓名(name),是否高危(high_risk)、风险分数(risk_score)、疾病名称(disease_name)、相似度(similarity_score)、关联等级(level)、理赔时间(claim_date)、保额(charge)等。
示例数据如下:
- 点文件:
//policyholder投保人信息。 ~id,~label,FNAME:string,LNAME:string,RISK_SCORE:int,HIGH_RISK:int PH3068,policyholder,ADAM,OCHSENBEIN,88,1 PH3069,policyholder,MALINDA,MEHSERLE,42,0 PH3070,policyholder,SANDRA,KUHTA,20,0 PH3071,policyholder,DORA,TAHU,62,1 //incharge保单信息。 ~id,~label,FNAME:string,LNAME:string,RISK_SCORE:int,SERVICE_ID:string PI18675,incharge,ROSCOE,ROSCOE,0,S10444 PI18676,incharge,AUDRIE,AUDRIE,24,S12029 PI18677,incharge,WINTER,WINTER,25,S15709 PI18678,incharge,LILA,LILA,27,S16484 PI18679,incharge,NANCIE,NANCIE,31,S12306 ...
- 边文件:
//has_disease疾病-病人。 ~id,~from,~to,~label 10529764572383,105297,64572383,has_disease 10529764572383,105297,64572383,has_disease 10529764572384,105297,64572384,has_disease 10529764572389,105297,64572389,has_disease 10941664572116,109416,64572116,has_disease 10941664572116,109416,64572116,has_disease 10941664572117,109416,64572117,has_disease //policyholder_of_claim投保人-理赔。 ~id,~from,~to,~label C1528PH2963,C1528,PH2963,policyholder_of_claim C1529PH1353,C1529,PH1353,policyholder_of_claim C1530PH1071,C1530,PH1071,policyholder_of_claim C1531PH8102,C1531,PH8102,policyholder_of_claim C1532PH4768,C1532,PH4768,policyholder_of_claim C1533PH2287,C1533,PH2287,policyholder_of_claim C1534PH6948,C1534,PH6948,policyholder_of_claim C1535PH621,C1535,PH621,policyholder_of_claim
2、创建实例
3、数据导入
图数据库GDB支持从多种数据源将数据导入至图数据库GDB,您可以使用以下两种方式进行数据导入:
4、连接实例
图数据库GDB支持多种方法连接实例,您可以通过以下五种方式连接实例:
- 通过GDB控制台直接登录数据管理服务DMS,更加方便快捷地远程访问、在线管理您的GDB数据库。具体操作,请参见通过DMS登录GDB数据库。
- 通过开源组件GDB Console可视化控制台登录图数据库,可视化界面,操作简单,并可根据业务需求对可视化界面进行二次开发。具体操作,请参见通过开源组件GDB Console登录图数据库。
- 通过Gremlin Console连接实例,命令行模式,适合Gremlin内核版本,适合用于查询语句性能优化。具体操作,请参见通过Gremlin Console连接实例。
- 通过Cypher Shell连接实例,命令行模式,适合Cypher内核版本。具体操作,请参见通过Cypher Shell连接实例 。
- 通过SDK连接,支持Java、Python、.Net、Go、Node.js五种SDK。具体操作,请参见SDK参考。
5、使用范例
- 简单查询
- 数据统计:
//统计点的数目。 gremlin> g.V().count() ==>120571 //统计边的数目。 gremlin> g.E().count() ==>215943 //统计每种类型点的数量。 gremlin> g.V().group().by(label).by(count()) ==>[policyholder:10006,disease:397,patient:166,claim:100001,incharge:10001] //统计每种类型边的数量。 gremlin> g.E().group().by(label).by(count()) ==>[inchagre_of_claim:100001,insured_of_claim:12,similar_claim:15279,policyholder_connection:347,policyholder_of_claim:99983,has_disease:321]
- 过滤查询、排序查询:
//查询理赔单C4377的投保、理赔、被保情况。 gremlin> g.V('C4377').outE('policyholder_of_claim','inchagre_of_claim','insured_of_claim').path() ==>[v[C4377],e[C4377PI26607][C4377-inchagre_of_claim->PI26607]] ==>[v[C4377],e[C437711279][C4377-insured_of_claim->11279]] ==>[v[C4377],e[C4377PH3759][C4377-policyholder_of_claim->PH3759]]
- 数据统计:
- 通用场景
- K阶邻居:
//已知保单C4377为欺诈保单,查询和理赔单C4377有相同理赔病人的理赔单,说明该理赔人有涉嫌骗保的嫌疑。 gremlin> g.V('C4377').repeat(bothE('insured_of_claim').otherV().simplePath()).times(2).path() ==>[v[C4377],e[C437711279][C4377-insured_of_claim->11279],v[11279],e[C1016011279][C10160-insured_of_claim->11279],v[C10160]] ==>[v[C4377],e[C437711279][C4377-insured_of_claim->11279],v[11279],e[C2658611279][C26586-insured_of_claim->11279],v[C26586]] ==>[v[C4377],e[C437711279][C4377-insured_of_claim->11279],v[11279],e[C2675411279][C26754-insured_of_claim->11279],v[C26754]] ==>[v[C4377],e[C437711279][C4377-insured_of_claim->11279],v[11279],e[C2896311279][C28963-insured_of_claim->11279],v[C28963]] ==>[v[C4377],e[C437711279][C4377-insured_of_claim->11279],v[11279],e[C367911279][C3679-insured_of_claim->11279],v[C3679]] ==>[v[C4377],e[C437711279][C4377-insured_of_claim->11279],v[11279],e[C6759411279][C67594-insured_of_claim->11279],v[C67594]] ==>[v[C4377],e[C437711279][C4377-insured_of_claim->11279],v[11279],e[C6939511279][C69395-insured_of_claim->11279],v[C69395]] ==>[v[C4377],e[C437711279][C4377-insured_of_claim->11279],v[11279],e[C8727811279][C87278-insured_of_claim->11279],v[C87278]] ==>[v[C4377],e[C437711279][C4377-insured_of_claim->11279],v[11279],e[C8760311279][C87603-insured_of_claim->11279],v[C87603]] ==>[v[C4377],e[C437711279][C4377-insured_of_claim->11279],v[11279],e[C9615511279][C96155-insured_of_claim->11279],v[C96155]] ==>[v[C4377],e[C437711279][C4377-insured_of_claim->11279],v[11279],e[C9654511279][C96545-insured_of_claim->11279],v[C96545]]
//查询已知欺诈保单C4377的投保人的社交关系,可以对这些人的理赔情况提前预警。 gremlin> g.V('C4377').outE('policyholder_of_claim').inV().repeat(bothE('policyholder_connection').otherV().simplePath()).times(3).path() ==>[v[C4377],e[C4377PH3759][C4377-policyholder_of_claim->PH3759],v[PH3759],e[PH3759PH512][PH3759-policyholder_connection->PH512],v[PH512],e[PH512PH1569][PH512-policyholder_connection->PH1569],v[PH1569],e[PH1569PH4722][PH1569-policyholder_connection->PH4722],v[PH4722]] ==>[v[C4377],e[C4377PH3759][C4377-policyholder_of_claim->PH3759],v[PH3759],e[PH3759PH512][PH3759-policyholder_connection->PH512],v[PH512],e[PH512PH1569][PH512-policyholder_connection->PH1569],v[PH1569],e[PH1569PH4731][PH1569-policyholder_connection->PH4731],v[PH4731]]
- 最短路径:
//查询投保人PH3759和投保人PH4722的最短路径,分析投保人之间的关联关系。 gremlin> g.V('PH3759').repeat(bothE().otherV().simplePath()) .until(hasId('PH4722').or().loops().is(gt(3L))) //hasId()部分控制结束ID,gt()部分查询深度。 .hasId('PH4722').path().dedup() ==>[v[PH3759],e[PH3759PH512][PH3759-policyholder_connection->PH512],v[PH512],e[PH512PH1569][PH512-policyholder_connection->PH1569],v[PH1569],e[PH1569PH4722][PH1569-policyholder_connection->PH4722],v[PH4722]] ==>[v[PH3759],e[PH3759PH512][PH3759-policyholder_connection->PH512],v[PH512],e[PH512PH1569][PH512-policyholder_connection->PH1569],v[PH1569],e[PH1569PH4731][PH1569-policyholder_connection->PH4731],v[PH4731],e[PH1565PH4731][PH1565-policyholder_connection->PH4731],v[PH1565],e[PH1565PH4722][PH1565-policyholder_connection->PH4722],v[PH4722]]
- 共同邻居:
//查询保单C4377和保单C67594的共同邻居,从而找到两个保单的共同投保人。 gremlin> g.V('C4377').repeat(bothE('policyholder_of_claim').otherV().simplePath()).times(2).hasId('C67594').path().dedup() //hasId()部分控制结束ID。 ==>[v[C4377],e[C4377PH3759][C4377-policyholder_of_claim->PH3759],v[PH3759],e[C67594PH3759][C67594-policyholder_of_claim->PH3759],v[C67594]]==>[v[2987000],e[3][2987000-t_a1->315.0],v[315.0],e[938][2987172-t_a1->315.0],v[2987172]] ==>[v[2987000],e[4][2987000-t_a2->87.0],v[87.0],e[939][2987172-t_a2->87.0],v[2987172]] ==>[v[2987000],e[5][2987000-t_p->W],v[W],e[940][2987172-t_p->W],v[2987172]]
- 协同推荐:
//已知保单C4377为欺诈保单,查找和保单C4377有共同投保人的保单,并按照共同邻居的个数进行排序,从而找到欺诈疑似涉诈保单。 gremlin> g.V('C4377').both('policyholder_of_claim').aggregate("policyholder_of_claim").both('policyholder_of_claim').has(id, neq('C4377')).as("recomm_claim") .flatMap(__.both().where(within("policyholder_of_claim")).count()).as("comm_cnt").order().by(desc) .select("recomm_claim", "comm_cnt").dedup() ==>[recomm_claim:v[C26754],comm_cnt:1] ==>[recomm_claim:v[C26586],comm_cnt:1] ==>[recomm_claim:v[C10160],comm_cnt:1] ==>[recomm_claim:v[C28963],comm_cnt:1] ==>[recomm_claim:v[C3679],comm_cnt:1] ==>[recomm_claim:v[C67594],comm_cnt:1] ==>[recomm_claim:v[C69395],comm_cnt:1] ==>[recomm_claim:v[C87278],comm_cnt:1] ==>[recomm_claim:v[C87603],comm_cnt:1] ==>[recomm_claim:v[C96155],comm_cnt:1] ==>[recomm_claim:v[C96545],comm_cnt:1]
- 与已知涉诈保单相似的保单:
//查询和相似的保单,根据相似度分数取前10。 gremlin> g.V('C4377') .sideEffect(out().store('v1n')) .as('v1') .select('v1n').unfold().in().limit(100).simplePath().dedup().as('v2') .project('i', 'u') .by(select('v2').out().where(within('v1n')).count()) .by(union(select('v2').out().fold(),select('v1n')).unfold().dedup().count()) .project('Transaction', '相似度') .by(select('v2').id()) .by(math('i/u')) .order().by(select('相似度'), desc).limit(10) ==>[Transaction:C96545,相似度:0.992619926199262] ==>[Transaction:C15383,相似度:0.9871086556169429] ==>[Transaction:C17300,相似度:0.9871086556169429] ==>[Transaction:C30519,相似度:0.9871086556169429] ==>[Transaction:C56230,相似度:0.9871086556169429] ==>[Transaction:C60174,相似度:0.9871086556169429] ==>[Transaction:C6591,相似度:0.9871086556169429] ==>[Transaction:C66712,相似度:0.9871086556169429] ==>[Transaction:C68975,相似度:0.9871086556169429] ==>[Transaction:C7181,相似度:0.9871086556169429]
- K阶邻居:
6、客户效果
某头部保险公司,经测算其关联查询性能是原有保险反欺诈方案的10~100倍。在原先的客户信息系统中,查询一个保单关联的信息(投保、理赔、疾病等信息),是通过两表之间的多次JOIN实现,当属性多、逻辑复杂时需要经过几十次甚至百次数据库交互,网络通信的开销带来极大的性能损耗。通过使用阿里云图数据库GDB的存储方案,可以带来10~100倍的性能提升。