在現代欺詐和各類金融犯罪中,欺詐者通過改變自身身份等達到逃避風控規則的欺詐目的。您可以通過圖數據庫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)等。
6.1
示例數據如下:
  • 點文件:
    //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~5分鐘。
  • 創建GDB實例后,您需要創建賬號和密碼、設置安全組,保證您具有GDB實例的訪問權限。具體操作,請參見創建賬號設置白名單

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]]
      6.2
  • 通用場景
    • 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]]
      6.3
      //查詢已知欺詐保單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]]
      6.5
    • 最短路徑:
      //查詢投保人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]]
      6.6
    • 共同鄰居:
      //查詢保單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]]
      6.7
    • 協同推薦:
      //已知保單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]

6、客戶效果

某頭部保險公司,經測算其關聯查詢性能是原有保險反欺詐方案的10~100倍。在原先的客戶信息系統中,查詢一個保單關聯的信息(投保、理賠、疾病等信息),是通過兩表之間的多次JOIN實現,當屬性多、邏輯復雜時需要經過幾十次甚至百次數據庫交互,網絡通信的開銷帶來極大的性能損耗。通過使用阿里云圖數據庫GDB的存儲方案,可以帶來10~100倍的性能提升。