反欺诈案件之聚类算法应用
2022-3-5线上直播《互联网业务风险管理之反欺诈策略解析》,文末扫码报名即可~
文章来源于反欺诈攻防战,作者正丽
前言
我们知道聚类算法属于无监督学习,是应用在没有打标的分析样本上,但这不意味着在有标签的场景中不能使用聚类算法,标签对于聚类算法的应用依然有很大价值。
本文给出聚类模型在反欺诈案调场景中的一个应用举例,利用有限打标样本帮助提升案调效率,在聚类模型的应用上给大家提供一种尝试思路。
正文
1. 案例背景
在案件调查中经常会遇到的一个问题就是,“我已经通过调查发现有些申请是异常的,作弊的,那么如何将同样手法的历史申请都给过滤出来,又如何在线上对这种手法的申请作实时拦截或者预警呢?”
关键是对作弊手法的掌握,也就意味着抓取作弊特征是核心。
当然案调人员也会复盘作弊手法,对作弊人群在行为上表现出来的特征进行刻画,这是关键前提,但是不能止步于此,因为在后续提取拦截或者预警规则时,还需要进一步确定哪些特征比较有效,这些特征对应变量的阈值该如何选择。
比如案调人员发现部分申请渠道存在流量作弊的问题,现在想排查一下历史上有哪些渠道存在同样的作弊情况,此时肯定不会采取对所有渠道进行一一排查的方式,不然需要投入太多人力。
这里就可以用聚类分析帮助缩小调查范围,帮助提升案调效率。
以如下测试样本作示例说明,其中 id 代表渠道编码,x1-x6 是可能与作弊手法相关的特征变量,涵盖案调已发现的明显作弊特征。同时在 C001-C100 这 100 个渠道中,渠道 C004\C006\C010\C011 已被调查出有作弊行为。
import pandas as pd
data = pd.read_excel('D:/km_sample.xlsx')
data.head()
输出示例:
采取聚类算法中的 K-means 均值聚类方法,我们先通过均值漂移算法得到初始聚类中心点,由此会得到 7 个簇中心点。
'''变量标准化处理,减少量纲和异常值影响'''
from sklearn.preprocessing import normalize
data2=data[['x1','x2','x3','x4','x5','x6']]
x=normalize(data2.values.data,axis=0,norm='max')
'''通过MeanShift算法进行初步聚类,帮助去噪'''
from sklearn.cluster import MeanShift
ms=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 KMeans
model=KMeans(n_clusters=3) ##此处选择三个簇
model.fit(center_)
'''聚类结果'''
predicted_label=model.predict(x)
df=pd.DataFrame(x)
df.columns=data2.columns
df['predicted_label']=predicted_label
df
输出示例:
这样就将 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金融风险管理与评分卡建模』。
在对这些可疑渠道展开调查时,通常会关注以下几个评估指标:
报警率
#分母中被模型预测为可疑渠道/#有效渠道 捕获率
#分母中被模型预测为可疑渠道/#实际作弊渠道 准确率
#分母中实际被调查为作弊渠道/#被模型预测为可疑渠道
以上提供了无监督学习应用在反欺诈业务中的一种思路,案例非常简化,实际处理过程中还有诸多环节需要考虑,比如作弊特征的选择、特征变量的时间切片处理、不同簇对应的业务画像、聚类个数的选择、作弊特征变量预警线的设置等,原则是让聚类模型更好地服务于业务目标,这中间甚至会出现部分特征区分能力非常强,不需要通过聚类模型来分析的情况。
2022-3-5线上直播《互联网业务风险管理之反欺诈策略解析》,扫码报名即可~
欢迎添加:
商务合作:安然:13911850028
欢迎加入联盟粉丝通讯录:免费加入+免费发布信息,详情可添加管理萌萌:risk0392回复通讯录
欢迎加入风控干货知识星球:详情可添加管理Vivian:risk0392回复知识星球