理论研究

当前位置: 首页
>内审协会 >理论研究

升级数字化审计思维,深挖数据背后价值 ——利用机器学习社区发现算法识别“借户团伙”

发布日期: 2020-12-15 字体大小:[ ]

浙江德清农村商业银行股份有限公司 潘昊

 

摘要:近年来,随着计算机技术的飞速发展,数据挖掘、人工智能、机器学习、区块链等技术的不断成熟,为数字化审计注入新的活力。本文通过为A农商银行的一个审计案例,来探索新兴技术在数字化审计中的实践运用。本案例主要通过机器学习社区发现算法(Community Detection)来识别客户中具有强关联性的团伙客户,从而挖掘潜在风险,提升审计成效。

关键词:ATM还息、机器学习、社区发现

 

一、案例分析

(一)案例背景

2019年A农商行根据年度审计工作计划,开展了小额贷款审计,在审计过程中偶然发现有客户通过ATM机连续为多名信贷客户的绑定还款账号存入现金,并最终用于归还贷款利息,疑似存在一人代多人归还利息的行为。于是对这几名借款客户进行了重点排查,通过追查信贷资金流向,并调阅信贷档案、影像资料等,最后经过多方面的证据坐实这几笔贷款存在借名问题,审计发现后,相关责任客户经理立即采取措施,消除了资金安全隐患。

这个“雷”虽然暂时挖掉了,但是审计人员仍难松懈,因为这暴露了目前本行审计的一个盲点,不知道这其中还隐藏着多少类似的“雷”。由于类似ATM存现等操作不记录实际操作人,且相关影像资料保存时间短,审计排查困难,给不法分子留下可乘之机,通过ATM存现代他人归还利息的方式几乎不留痕迹,与正常还息客户混杂在一起,巧妙地躲过了现行大数据审计的“天网”。

(二)审计方案

如果逐笔对连续通过ATM存现进行还息的贷款进行分析显然不现实,一是数据量大,客户集中在还息日前进行还息,因此大部分连续还息数据为偶然性数据,且查实问题不仅要查柜面凭证,还需借助视频监控,靠人工核查犹如大海捞针,需花费极大的工作量。二是客户之间关系复杂,通过对单笔贷款的核查犹如管中窥豹,无法统观问题全貌,从而完全排除资金风险。三是ATM只是渠道之一,需要全面收集相关数据,进行统筹分析。针对人工核查存在的重重困境,审计组制定了以大数据分析为主、人工核查为辅的审计方案。通过全面分析还息数据,从数据中提取同一渠道短时间内连续还息的数据构建借款客户关系网络,全面反应还息客户之间的关联关系,再借助机器学习的社区发现算法从复杂的关系网中找到具有较强内部关联关系的客户团体,最后针对这些团体,以人工进行重点核查。

(三)   审计实施

1、数据收集

客户还息的数据来源主要有以下两个方面:

(1)通过绑定还款账户自动扣息。通过绑定活期账户自动扣息的方式是最普遍的还息方式,但是由于扣息为系统自动批扣,因此扣息数据本身无意义,我们需要分析在扣息日前后转入的与当月欠息金额相近的资金来源。

(2)通过柜面或自助终端进行还息。该类还息方式主要为客户不通过活期账户,而是通过柜面或者自助终端直接操作贷款账户进行还息。

通过对以上两个数据源的数据采集、分析、汇总,确保数据的完整性。

2、渠道划分

渠道划的判断依据是渠道的转换是否需要花费时间,比如从柜台A换到柜台B,客户需要重新取号排队,即使不需要排队,也要花费1到2分钟,真正办理业务的时间间隔大概率在三分钟以上,因此类似的情况将其划分为不同的渠道。目前划分的主要渠道有如下几种:

(1)通过他人账号转入资金进行还息的,以他人账号作为渠道标志。

(2)通过ATM存现还息的,以单独的每一台ATM机器编号作为渠道标志。

(3)通过柜台存现进行还息的,以经办人的柜员号作为渠道标志。

(4)通过支付宝转账的,以“支付宝”作为渠道标志。

(5)通过微信转账的,以“微信”作为渠道标志。

(6)批量代发工资的,以批次号作为渠道标志。

(7)…

3、批量交易识别

数据按照渠道划分后,我们根据渠道内交易连续性对数据进行分组。首先对渠道内所有数据按照交易时间进行排序,再计算每笔交易时间与前一笔交易的时间间隔,如果间隔时间小于3分钟,则判定为与前一笔交易连续,构成批量交易,批量交易极有可能由同一人完成操作,我们对每一组批量交易进行编号,主要SQL代码如下:

declare@序号varchar(50)

declare@与上一笔时间差varchar(50)

 

declare@批次号int

set@批次号=0

 

declarec1cursorstaticfor

select序号,与上一笔时间差from还息数据orderby渠道,序号

openc1

fetchnextfromc1into@序号,@与上一笔时间差

while@@FETCH_STATUS=0

begin

   if@与上一笔时间差>=3

   begin

      set@批次号=@批次号+1

   end

   update还息数据set批次号=@批次号where序号=@序号

   fetchnextfromc1into@序号,@与上一笔时间差

end

closec1

deallocatec1

4、构建客户关系

客户之间的关系有直接的关系,比如转账、担保等,也有需要经过数据挖掘的才能发现的间接关系。比如本案例中,当多名客户同一地点、短时间内同时进行还息操作时,他们彼此之间就建立了联系,客户出现同时还息的次数越多这种关系也就越强。我们通过数据分析从海量还息数据中抽取批量还息数据并编号后,首先要做的就是根据这些数据建立客户关系,这里从上述结果数据中抽取以下两组还息数据进行说明:

 

表1:客户还息数据

   

根据第一组数据在节点A、B、C之间构建关系,形成如第一组关系图,根据第二组数据在对节点C、B、D构建关系,形成如第二组的关系图,将关系合并后形成新的关系图。从合并后的图中可以看到,B、C之间的权重为2,表明B、C之间的关系比其与其他节点的关系更加紧密。

图1:客户还息数据关系图

                                         

   

通过以上方法,我们在SQLServer数据库中对全部数据构建关系图。SQL代码如下:

selecta.客户客户1,b.客户客户2,COUNT(*)权重

into客户关系

from还息数据a

innerjoin还息数据b

ona.批次号=b.批次号

anda.客户>b.客户

groupbya.客户,b.客户

以上结果数据通过Python的NetworkX包在FR布局算法下进行可视化展示,结果如下(图中实线表示边的权重大于2,虚线表示权重小于等于2):

图2:完整客户关系图

5、数据降噪

为了减少模型运行速度、提升模型的准确度,通过对客户关联关系图进行初步分析:对于图中度小于1的节点,在现实意中的意义为仅与其他一名客户存在一次关联关系,对于此类数据,我们判定为巧合数据,提前进行剔除。Python代码如下:

defclearG(G):
degrees = nx.degree(G, weight='weight')
while True:
remove_list = []
for din degrees:
if d[1] <= 1:
remove_list.append(d[0])
if len(remove_list)==0:
break
G.remove_nodes_from(remove_list)

降噪后客户关系图如下:

 

图3:降噪后的客户关系图

从上图可以看出,通过数据降噪,我们很大程度上的减少了数据的复杂度,大部分客户之间的关系已经变得明晰。

6、客户关系分析

从图3中可以看出,客户关系图是由多个联通子图构成的非联通图,说明大部分“客户团伙”具有非常明确的关系边界,与团伙外的客户不存在任何关联关系,对于此类团伙客户,我们可以简单的通过提取客户关系图中的极大联通子图进行识别,但是对于较为复杂的关系,比如图3中间部分,团伙人员数量较大,可能是由于存在偶然性的关联,使得多个团伙关联在一起。

对此,为了应对更加复杂的情况以,使得模型具有更高的适用性,本次使用社区发现算法来进行团伙识别,社区发现一种机器学习算法,能在复杂网络关系图中识别具有强关联性的节点组。经过多次试验及测试,以及结合本案例实际情况,最终选定LPA(标签传播算法)对关联关系进行社区划分,并对属于同一团伙的客户使用相同的颜色进行标注,我们首先对客户关系图中包含节点最多的联通子图进行团伙识别查看效果,代码如下:

G=G.subgraph(max(nx.connected_components(G_ALL), key=len))
elarge = [(u, v) for (u, v, d) in G.edges(data=True) if d['weight'] >2]
emiddle = [(u, v) for (u, v, d) in G.edges(data=True) if d['weight'] <= 2]
partition=com.asyn_lpa_communities(G,weight='weight')
dict={}
for i,lin enumerate(partition):
for v in l:
dict[v]=i
values=[dict.get(node) for node in G.nodes()]
pos=nx.spring_layout(G,seed=1)
nx.draw_networkx_edges(G, pos, edgelist=elarge, width=1)
nx.draw_networkx_edges(G, pos, edgelist=emiddle, width=1, alpha=0.6, style='dashed')
nx.draw_networkx_nodes(G,pos,node_color=values,cmap=plt.get_cmap('jet'))
plt.show()

图4:原始关系图

图5:通过LPA社区划分后的关系图

可以看到,原图按照节点间的关联关系成功被划分为4个团伙。最终按此方法对整个客户关系图进行划分的结果如下(原图请见图3):

图6:对全部客户关系进行划分后的关系图

7、人工核查及证据收集

识别团伙后,抽取其中人数较多的团伙进行重点核查。如下图:

图7:人数超过5个的“客户团伙”

人工核查的目的主要是找到实际用款人,并收集相关证据,主要通过以下几个方面进行核查。

(1)核查账户资金情况。通过账户交易情况核查团伙内客户是否存在交易关系,重点核查“团伙”内客户贷款资金去向是否流向同一人。

(2)核查柜面交易凭证、监控录像等核对账户操作人与借款人是否一致,重点核查连续还息的交易数据是否为同一人经办,是否存在代为还息。

(3)核查客户关系。通过分析团伙内客户的家庭成员、担保关系、经营企业、社会关系等核查客户间是否存在关联关系。

(4)通过调阅相关档案、询问相关经办人员了解情况,有必要时直接电话询问客户。

(四)审计成果

通过本次审计,发现辖内一家支行所发放的个人贷款中,有20户贷款共计550万元,还息人员为同一企业的不同财务人员,通过ATM等渠道归还利息规避银行贷后检查,相关贷款实际均由企业使用。另发现涉及15人的批量借户1起,合计贷款金额349万元,3人以上批量借户5起,合计贷款金额455万元。审计发现后,责令相关支行提前收回相关贷款,未造成事实风险,同时对相关客户经理进行了严厉的处罚。

二、审计成效

本次审计发现,批量借户主要以小额信用为主,且实际用款人往往存在一定的信用问题,批量出险后贷款资金往往难以追回。通过本次审计,有效排查了贷款风险,提升了我行信贷资产质量,并充分揭示了我行在小额贷款风险控制中的薄弱点,以及客户经理在贷前调查、贷后管理过程中的一些不足,为下一步贷款业务的内控流程完善、风险管控强化提供了有针对性的借鉴。并且将数据可视化、机器学习等技术在审计项目中的运用,有效提高了我行数字化审计的能力,推动了我行数字化审计的发展。

三、审计启示

计算机技术日新月异,我们要紧随时代发展,在夯实业务知识的同时,多学习先进技术理念,做好知识储备。进一步强化数据思维,深度挖掘数据背后的价值。多借鉴互联网金融的风控经验,持续推进先进技术在审计中的实践运用,用思维丰富审计手段,用技术解决审计难题。