龙空技术网

风控欺诈坏人太少,没法建模?试下这个解决目标样本不平衡的方法

番茄风控大数据宣 294

前言:

而今朋友们对“python反欺诈”都比较着重,兄弟们都需要分析一些“python反欺诈”的相关知识。那么小编同时在网上网罗了一些对于“python反欺诈””的相关知识,希望各位老铁们能喜欢,小伙伴们一起来学习一下吧!

反欺诈是信贷业务的典型场景,对于从事风控的小伙伴来讲,可以通过策略或模型来防范欺诈风险。其中,针对反欺诈模型的开发,众所周知,建模样本数据的目标分布往往是不平衡的,毕竟欺诈行为表现往往是小众群体。对于样本数据的不平衡情况,我们最常采用的解决方法是重采样,例如随机过采样、随机欠采样、SMOTE过采样等。本文将给大家介绍一种更为简单的方法,即采样分类权重法来有效降低目标分布不平衡给模型训练带来的影响。为了便于大家的理解,我们围绕具体场景与样本数据,来完整建立一个反欺诈模型,从中探究分类权重对模型拟合训练产生的效果。

本文选取的样本数据包含20000条样本和12个字段,部分样例如图1所示,其中ID为样本主键;X01~X10为特征变量,取值类型均为数值型;Target为目标变量,取值1和0,代表是否欺诈,具体分布如图2所示。

编辑

添加图片注释,不超过 140 字(可选)

图1 样本数据样例

编辑

添加图片注释,不超过 140 字(可选)

图2 欺诈目标分布

从上图的欺诈目标分布可以看到,欺诈样本(Target=1)的占比仅有3.115%,属于样本目标不均衡情况,若将此数据直接用来模型训练,得到的模型效果表现必然较差,理由是模型变量在拟合过程中,由于非欺诈样本(Target=0)的占比过高,对应样本的权重信息表现更为明显,导致模型的区分性能降低。针对此类情况,本文将尝试通过赋予正负样本以合适的类别权重,以优化二者分布不平衡对模型训练带来的影响。在模型拟合训练之前,我们先简单分析下样本特征的统计指标,并根据情况采取适当的数据预处理。通过describe()函数输出样本数据特征的常见eda指标,具体结果如图3所示。

编辑

添加图片注释,不超过 140 字(可选)

图3 样本特征分布

根据上图特征变量的分布指标count可知,特征X08、X09、X10存在缺失值,为了保证模型的正常训练,我们对特征的缺失情况进行处理,这里采用特征的平均值来填充,处理过程如图4所示。

编辑

添加图片注释,不超过 140 字(可选)

图4 缺失值处理

当特征缺失值处理完成后,我们通过特征相关性与特征预测性来依次分析下特征变量的效果。其中,特征相关性采用pearson系数来评价,特征预测性采用IV指标来研究。图5是通过corr(method='pearson')方法得到的特征变量之间的相关性系数,可以看出各变量之间的系数值均低于0.7,且多数低于0.5,可以认为变量的相关程度较弱,在很大程度上可以减弱模型的共线性(若采用逻辑回归来构建模型)。

编辑

添加图片注释,不超过 140 字(可选)

图5 特征相关性分布

特征的预测性通过变量IV值来反映,具体实现过程如图6所示,为了便于分析,这里采用自动化函数包来输出各字段的IV值,最终分布结果如图7所示。

编辑

添加图片注释,不超过 140 字(可选)

图6 特征预测性实现

编辑

添加图片注释,不超过 140 字(可选)

图7 特征IV值分布

从特征变量的IV值结果可知,各字段对目标变量的预测能力整体表现较好,虽然特征X07、X09、X10的IV值偏低,但仍可以满足大于阈值0.02的常见应用标准。经过以上特征分析,我们可以将所有变量用来拟合训练模型。

模型训练的具体算法,我们选择最常用的传统模型—逻辑回归来构建反欺诈模型,接下来便到了本文要讲的重点内容,也就是分类权重的参数配置。我们先来了解下在python环境中逻辑回归LogisticRegression默认的参数组合,具体如图8所示。

编辑

添加图片注释,不超过 140 字(可选)

图8 逻辑回归默认参数

在逻辑回归LR的默认参数中,class_weight(分类权重)是我们要探究的对象,这个参数可以自定义目标变量类别权重的大小关系,可以直接影响模型训练过程对待目标值的重视程度。通常情况下,在定义逻辑回归模型训练参数过程中,我们经常在意penalty(正则化方法)、max_iter(迭代次数)、tol(容忍度)、random_state(随机种子)等参数,很少去关注class_weight(分类权重),往往直接取其默认状态,也就是class_weight=None,此时模型训练对于目标1和0是同等看待的,显然在实际场景中,我们希望模型训练更注重欺诈样本(Target=1)的数据信息表现。

针对以上情况介绍,我们来重点探究下class_weight的权重分配对模型训练效果的影响,首先描述下class_weight的具体取值类型:

(1)None:代表目标分布类型同等重要,即目标0:1的权重关系为1:1;

(2){0:1,m:n}:代表目标0:1的权重关系为m:n;

(3)balanced:代表目标0:1的权重关系为平衡状态,与样本数据量相关。

围绕以上情形,我们将依次来分析不同class_weight条件下的模型效果,由于反欺诈模型更注重于在欺诈识别结果中有多少真正的欺诈被识别出来,因此可以选取模型指标Recall(召回率)来分析模型效果。这里不建议采用准确率(Accuracy)来评级模型,理由是在样本数据不平衡情况下,模型的准确率始终很高,不具有研究意义。我们先在逻辑回归LR的默认参数下输出模型的效果,此时class_weight=None,其原理逻辑等价于class_weight={0:1,1:1},模型训练与模型评估的过程如图9所示。

编辑

添加图片注释,不超过 140 字(可选)

图9 模型训练与评估

在模型输出的指标结果中,召回率Recall=0.3258。当然,这个指标数据说明模型效果是比较差的,接下来我们依次调整class_weight的分类权重关系,也就是不断增大目标1(欺诈)的权重占比,来反复完成模型训练与模型评估的过程,从而探究模型Recall(召回率)效果的变化情况,这里选取的class_weight(分类权重)实验值依次从1:1、1:5、1:10、1:20等取值情况不断递增。通过多组参数的研究对比,得到不同class_weight分类权重情形的模型指标结果如图10所示。

编辑

添加图片注释,不超过 140 字(可选)

图10 不同分类权重的模型效果

由以上结果可知,随着目标类别1(欺诈)的权重占比增大,模型对欺诈样本的学习能力增强,有效促进了模型对欺诈识别能力的提升,模型召回率指标在一定范围呈现上升的趋势。其中,class_weight取值为None与1:1的本质相同,Recall结果自然相等;当class_weight取值为平衡状态balanced时,模型效果表现较佳,将以上分布结果反映在可视化图表上具体如图11所示。

编辑

添加图片注释,不超过 140 字(可选)

图11 分类权重与模型效果关系

通过以上研究得知,在建模样本不平衡的场景下,若采用逻辑回归LR来建立模型时,在不采用过采样、欠采样等方法的情况下,可以尝试定义合适的class_weight分类权重参数,来优化模型训练的效果。在具体实践过程中,针对目标类别设置多个权重比例值,依次训练模型并取模型效果表现的最佳者,或者可以直接赋予模型参数class_weight='balanced',这样可以较大程度保证模型的效果。

综合以上内容,我们围绕信贷反欺诈场景,针对样本数据不平衡情形,介绍了一种比较简单但效果明显的解决方法:自定义分类权重class_weight,在实际场景中具有较好的调参意义,并能够获得较佳的模型效果。

为了便于大家进一步理解分类权重对样本不平衡场景的作用,本文额外附带与以上内容同步的python代码与样本数据,供大家参考学习,详情请移至知识星球查看相关内容。

编辑切换为居中

添加图片注释,不超过 140 字(可选)

...

~原创文章

标签: #python反欺诈