在现代欺诈和各类金融犯罪中,欺诈者通过改变自身身份等达到逃避风控规则的欺诈目的。您可以通过图数据库GDB建立跟踪用户行为的图结构,实时分析欺诈行为的离散数据,识别欺诈环,帮助您快速防范和解决欺诈行为。
1、数据模型
以金融交易领域公开数据集IEEE-CIS Fraud Detection数据集为例。更多信息,请参见数据模型参考下载。
数据是由电商平台Vesta提供的交易记录,包括了交易相关的设备、地址、邮箱等信息,可以将数据模型抽象为下图:
在本文示例中,需要对交易涉及到属性信息进行较多的过滤、统计等操作,所以这里将交易记录及其属性信息建模成边;如果在实际的业务中更关注交易记录本身,可以考虑将交易记录的属性信息直接建模成点的属性。
示例数据如下:
点文件:
//Transaction交易信息。 ~id,~label,is_fraud:int 2987000,"transaction",0 2987001,"transaction",0 2987002,"transaction",0 2987003,"transaction",0 2987004,"transaction",0 //DeviceType设备类型信息。 ~id,~label "mobile","devicetype" "desktop","devicetype"
边文件:
~id,~from,~to,~label 1,2987000,"","t_e_p" 2,2987000,"","t_e_r" 3,2987000,"315.0","t_a1" 4,2987000,"87.0","t_a2"
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() ==>592789 //统计边的数目。 gremlin> g.E().count() ==>2533038
过滤查询、排序查询:
//查询ID为2987000的交易信息。 gremlin> g.V('2987000').valueMap(true) ==>[id:2987000,label:transaction,is_fraud:[0]] //查询ID为2987000的交易信息。 gremlin> g.V('2987000').outE() ==>e[3][2987000-t_a1->315.0] ==>e[4][2987000-t_a2->87.0] ==>e[5][2987000-t_p->W]
通用场景
K阶邻居:
//查询和交易记录2987000有相同地址的其他交易记录。 gremlin> g.V('2987000').repeat(bothE('t_a1').otherV().simplePath()).times(2).path() //bothE() 部分控制查询边类型,times()部分控制查询深度。 ==>[v[2987000],e[3][2987000-t_a1->315.0],v[315.0],e[86][2987015-t_a1->315.0],v[2987015]] ==>[v[2987000],e[3][2987000-t_a1->315.0],v[315.0],e[171][2987031-t_a1->315.0],v[2987031]] ==>[v[2987000],e[3][2987000-t_a1->315.0],v[315.0],e[196][2987036-t_a1->315.0],v[2987036]] ==>[v[2987000],e[3][2987000-t_a1->315.0],v[315.0],e[305][2987056-t_a1->315.0],v[2987056]] ==>[v[2987000],e[3][2987000-t_a1->315.0],v[315.0],e[356][2987066-t_a1->315.0],v[2987066]] ==>[v[2987000],e[3][2987000-t_a1->315.0],v[315.0],e[399][2987073-t_a1->315.0],v[2987073]] ==>[v[2987000],e[3][2987000-t_a1->315.0],v[315.0],e[411][2987075-t_a1->315.0],v[2987075]] ==>[v[2987000],e[3][2987000-t_a1->315.0],v[315.0],e[451][2987083-t_a1->315.0],v[2987083]] ==>[v[2987000],e[3][2987000-t_a1->315.0],v[315.0],e[510][2987094-t_a1->315.0],v[2987094]] ......
最短路径:
//查询交易记录2987000和交易记录2987172的最短路径,最大深度为2。 gremlin> g.V('2987000').repeat(bothE().otherV().simplePath()) .until(hasId('2987172').or().loops().is(gt(2L))) //hasId()部分控制结束ID,gt()部分查询深度。 .hasId('2987172').path().dedup() ==>[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]]
共同邻居:
//查询交易记录2987000和交易记录2987172的共同邻居,从而找到具备相同属性(地址、设备)的交易记录。 gremlin> g.V('2987000').repeat(bothE().otherV().simplePath()).times(2).hasId('2987172').path().dedup() //hasId()部分控制结束ID。 ==>[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]]
Jaccard相似度:
//查询和交易记录2987000相似的交易记录,根据相似度分数取前10。 gremlin> g.V('2987000') .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:2987015,相似度:1.0] ==>[Transaction:2987056,相似度:1.0] ==>[Transaction:2987216,相似度:1.0] ==>[Transaction:2987251,相似度:1.0] ==>[Transaction:2987371,相似度:1.0] ==>[Transaction:2987474,相似度:1.0] ==>[Transaction:2987699,相似度:1.0] ==>[Transaction:2987707,相似度:1.0] ==>[Transaction:2987735,相似度:1.0] ==>[Transaction:2987770,相似度:1.0]
6、客户效果
某头部商业银行信用卡中心,自动构建890个特征,发现涉嫌欺诈商户12个、预测逾期用户1.86万人、套现卡片2.2万张、识别欺诈团伙102个,模型召回命中率92.4%(客户模型为60%)。