vlambda博客
学习文章列表

反欺诈案件之聚类算法应用

2022-3-5线上直播《互联网业务风险管理之反欺诈策略解析》,文末扫码报名即可~

文章来源于反欺诈攻防战,作者正丽

前言

我们知道聚类算法属于无监督学习,是应用在没有打标的分析样本上,但这不意味着在有标签的场景中不能使用聚类算法,标签对于聚类算法的应用依然有很大价值。


本文给出聚类模型在反欺诈案调场景中的一个应用举例,利用有限打标样本帮助提升案调效率,在聚类模型的应用上给大家提供一种尝试思路。


正文

1. 案例背景 

在案件调查中经常会遇到的一个问题就是,“我已经通过调查发现有些申请是异常的,作弊的,那么如何将同样手法的历史申请都给过滤出来,又如何在线上对这种手法的申请作实时拦截或者预警呢?”


关键是对作弊手法的掌握,也就意味着抓取作弊特征是核心。


当然案调人员也会复盘作弊手法,对作弊人群在行为上表现出来的特征进行刻画,这是关键前提,但是不能止步于此,因为在后续提取拦截或者预警规则时,还需要进一步确定哪些特征比较有效,这些特征对应变量的阈值该如何选择。


比如案调人员发现部分申请渠道存在流量作弊的问题,现在想排查一下历史上有哪些渠道存在同样的作弊情况,此时肯定不会采取对所有渠道进行一一排查的方式,不然需要投入太多人力。


这里就可以用聚类分析帮助缩小调查范围,帮助提升案调效率。


2. 案例详解 
1)样本描述 

以如下测试样本作示例说明,其中 id 代表渠道编码,x1-x6 是可能与作弊手法相关的特征变量,涵盖案调已发现的明显作弊特征。同时在 C001-C100 这 100 个渠道中,渠道 C004\C006\C010\C011 已被调查出有作弊行为。

import pandas as pddata = pd.read_excel('D:/km_sample.xlsx')data.head()

输出示例:

反欺诈案件之聚类算法应用


2)应用聚类模型 

采取聚类算法中的 K-means 均值聚类方法,我们先通过均值漂移算法得到初始聚类中心点,由此会得到 7 个簇中心点。

'''变量标准化处理,减少量纲和异常值影响'''from sklearn.preprocessing import normalizedata2=data[['x1','x2','x3','x4','x5','x6']]x=normalize(data2.values.data,axis=0,norm='max')
'''通过MeanShift算法进行初步聚类,帮助去噪'''from sklearn.cluster import MeanShiftms=MeanShift()ms.fit(x)
'''得到许多的初始聚类中心'''print(len(set(ms.labels_))) ##得到中心点个数center_=ms.cluster_centers_ ##得到聚类中心点


在这 7 个中心点的基础上应用 K-means 方法,进行二次聚类,而在 SAS 中这个过程是用 proc fastclus 语句实现的,一般用 CCC 法确定簇的最佳个数。

'''使用上面得到的聚类中心进行Kmeans均值聚类'''from sklearn.cluster import KMeansmodel=KMeans(n_clusters=3) ##此处选择三个簇model.fit(center_)
'''聚类结果'''predicted_label=model.predict(x)df=pd.DataFrame(x)df.columns=data2.columnsdf['predicted_label']=predicted_labeldf

输出示例:

反欺诈案件之聚类算法应用


这样就将 100 个渠道分到了三个不同簇(类别)中,而之前被标记为作弊的四个渠道都被模型分到了簇 1 中。

'''合并样本'''output_label=pd.merge(data,df['predicted_label'],left_index=True,right_index=True,how='outer')
'''得到欺诈渠道所在的簇'''output_label[output_label['fraud_label']=='欺诈']

输出示例:

反欺诈案件之聚类算法应用


同在簇 1 的还有 C087/C093/C100 这三个渠道。

'''得到欺诈渠道所在簇中待标记样本'''output_label[output_label['predicted_label']==1]

输出示例:

反欺诈案件之聚类算法应用


至此通过聚类模型就圈出了需要优先调查的对象范围,正是渠道 C087/C093/C100。


此外,我们还可以观察各个簇在不同变量上的分布情况。
'''观察x1和x3在各个簇的分布情况'''x_axis=np.array(df['x1'])y_axis=np.array(df['x3'])plt.scatter(x_axis,y_axis,c=predicted_label)plt.show

示例结果:

反欺诈案件之聚类算法应用



也可以筛选出影响簇划分结果的主要是哪些变量。

'''找出影响聚类结果的主要特征'''##每一个特征的全局方差var_dct_all=df.var()
##每一个簇内特征的方差var_dct_clt=df.groupby('predicted_label').var().mean()
##计算聚类后方差减少的占比for i in var_dct_clt.keys(): print(i,(var_dct_all[i]-var_dct_clt[i])/var_dct_all[i])

输出示例:

可以看出变量 x1 和 x4 的方差在簇内簇外有显著差异,因此当前聚类的结果主要是受到 x1 和 x4 对应的特征所影响。


以上 python 代码参考梅子行著书『智能风控:Python金融风险管理与评分卡建模』。


3)模型评估 

在对这些可疑渠道展开调查时,通常会关注以下几个评估指标:

  • 报警率

    #分母中被模型预测为可疑渠道/#有效渠道
  • 捕获率

    #分母中被模型预测为可疑渠道/#实际作弊渠道
  • 准确率

    #分母中实际被调查为作弊渠道/#被模型预测为可疑渠道


这些指标可用来验证模型效果以及模型调优,同时也能帮助筛选出有效作弊特征,制定合理预警规则。


4)小结 

以上提供了无监督学习应用在反欺诈业务中的一种思路,案例非常简化,实际处理过程中还有诸多环节需要考虑,比如作弊特征的选择、特征变量的时间切片处理、不同簇对应的业务画像、聚类个数的选择、作弊特征变量预警线的设置等,原则是让聚类模型更好地服务于业务目标,这中间甚至会出现部分特征区分能力非常强,不需要通过聚类模型来分析的情况。

2022-3-5线上直播《互联网业务风险管理之反欺诈策略解析》,扫码报名即可~

欢迎添加:

商务合作:安然:13911850028

欢迎加入联盟粉丝通讯录:免费加入+免费发布信息,详情可添加管理萌萌:risk0392回复通讯录

欢迎加入风控干货知识星球:详情可添加管理Vivian:risk0392回复知识星球