低成本构建金融知识图谱之应用篇--风险传播策略设计

一、金融知识图谱

金融机构中往往知识图谱有着非常好的应用潜力,以银行为例,银行往往有着非常多的客户关系数据,譬如工商、设备、亲属、转账、代理,抵现、担保等。这些数据构建了一个客户关系网络状态,知识图谱往往非常擅长处理这种网状关系。其优势在于:

  • 多度关系关联:知识图谱可以比较方便的关联获取2度以上的关系,这也是其相比传统关系型数据库的优势,传统关系型数据库如果要关系二度关系,往往需要进行两次join,这大大增加了计算的复杂度,对于二度特征的加工,知识图谱往往更加得心应手;
  • 路径查找:知识图谱在关联路径搜索方面也有得天独厚的优势,基于其网状结构,可以很轻松的获取两点之间的最短路径,环状结构等;
  • 图算法:图谱还有一个优势在于计算图算法时候也可以十分快捷,譬如最常用的louvain,pagerank等。

但是金融机构如果要构建一个好用的知识图谱,往往最多的解决方案是问第三方采购,不是说问第三方采购不好,采购最大的弊端在于费钱,然后黑盒。有的朋友说,银行不差钱,科技部或风险部几千万的报价预算采购一个图谱可能对于银行而言根本算不了什么。然而实际上很多金融机构采购了图谱产品后根本不知道怎么去用,其很大一个原因是图谱很多图场景和图算子是黑盒的,应用者压根不知道其内部原理。当然又有同学会说,我们给予业务场景定制化开发不就好了吗,当然定制化开发可以做,但是定制化开发一个场景可能就报价几十,甚至上百万,而且定制化开发的场景往往底层基于java/scala的graphx等接口构建应用,不是策略人员熟悉的python或sql,学习成本又变得很好,而且业务场景往往多变,很难设计的十分具有兼容性,往往最终的结果是钱花了,但是场景复用性不强。

对于一些小型的金融机构或者本身研发能力不是那么强的机构,低成本,门槛构建一个金融知识图谱往往可以在省钱的基础上帮助金融风控人员做好风控。本文着重介绍金融机构基于低成本,低门槛搭建的知识图谱能解决什么金融分析场景,本文所用技术栈主要是neo4j+python+sql,适合主流的风控分析和建模人员。

二、基于知识图谱的金融风险传播策略设计

金融风险传播算法主要解决什么问题呢:设想一个场景,银行一般都有很多黑名单库,这些黑名单散布于整个客户网络中,客户和客户之间有各类关系,如下图所示,如果已知B和A是黑名单,求图中其他节点是黑名单的概率,假设定义一度关系后衰减系数为0.5,黑名单到D共有三条路,A->D路线最大的值为1*0.5=0.5,B->D也为0.5,A->B->C为1*0.5*0.5=0.25,A->B->C 路线小于A->D路线的值,D的黑名单概率值为A->D路线+B->D = 0.5+0.5 = 1,当然我们可以定义任何其他节点的涉黑概率不超过1,也可以基于业务定义不同关系的衰减系数

  • 基于neo4j实现路径搜索

第一步:用python 连接neo4j并创建节点和关系

from py2neo import Node, Relationship,Graph,NodeMatcher,Subgraph
import pandas as pd
g = Graph("http://localhost:7474", auth=("neo4j", ""))#密码用自己的
# 清除原有关系和节点
g.run("""
MATCH (n)
OPTIONAL MATCH (n)-[r]-()
DELETE n, r
""")

g.run("""
// 创建节点  
CREATE (a:Label {name: 'a'}),  
       (b:Label {name: 'b'}),  
       (c:Label {name: 'c'}),  
       (d:Label {name: 'd'}),  
       (e:Label {name: 'e'}); 

""")

g.run("""
// 创建边,这里假设每个节点都与其他节点相连
MATCH (a:Label {name: 'a'}), (b:Label {name: 'b'}), (c:Label {name: 'c'}), (d:Label {name: 'd'}), (e:Label {name: 'e'})
MERGE (a)-[:CONNECTED{weight:0.5}]->(b)
MERGE (b)-[:CONNECTED{weight:0.5}]->(c)
MERGE (c)-[:CONNECTED{weight:0.5}]->(a)
MERGE (d)-[:CONNECTED{weight:0.5}]->(c)
MERGE (a)-[:CONNECTED{weight:0.5}]->(d)
MERGE (b)-[:CONNECTED{weight:0.5}]->(d)
MERGE (b)-[:CONNECTED{weight:0.5}]->(e)
MERGE (e)-[:CONNECTED{weight:0.5}]->(a)

""")

创建后的结果如下图所示

// neo4j cypher sql
MATCH path = (badPerson:Label)-[:CONNECTED*]->(other:Label)  
WHERE other.name <> badPerson.name AND badPerson.name IN ['a', 'b']  
WITH badPerson, other, path, length(path) AS attenuationSteps  
// 提取路径中每个关系的类型和属性  
WITH badPerson, other, attenuationSteps, path,  
     [r IN relationships(path) | {type: type(r), properties: properties(r)}] AS relationDetails  
RETURN badPerson, other, attenuationSteps, path, relationDetails

输出结果:

我们可以看到这里现实了黑名单客户a,b到其他节点d,c,b所有路径的值,以及每一条路径所对应的关系及权重,我们只要计算其他节点b,c,d到每一个黑名单的涉黑概率再求和,就可以初步知道d,c,b的涉黑概率,当然中间的阈值和规则可以结合业务经验自定义调节。

总结而言,我们呢业务应用时候可以基于如下几个步骤进行:

1. 构建图谱网络

2. 黑名单客户打造标签

3. 运行neo4j语句,查找黑名单和非黑名单客户之间所有路径,这里就很好的用到了neo4j图数据库在全链路查找的优势。

4. 用python计算每一个非黑名单客户涉黑概率,当然这里可以自定义不同关系权重,衰减系数,也可以限制关系在4度以内(文中attenuationSteps<4)

码字不易,欢迎各位大佬关注本人公众号:风控视界

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值