计算机系统应用教程网站

网站首页 > 技术文章 正文

数据样本量不足,试试大佬都在用的办法(暨反欺诈建模场景实操)

btikc 2024-10-12 10:54:55 技术文章 2 ℃ 0 评论

在反欺诈建模场景下,我们经常会遇到样本不平衡的情况,也就是欺诈标签的样本分布差异较大。当然,这种情形的出现也是完全符合实际业务表现的,毕竟对于欺诈行为的定义,相对正常行为来讲是极少数的,例如银行信用卡的申请材料作假、额度恶意套现等。但是,当我们在实际工作中建立反欺诈模型时,务必要对建模样本是否均衡做出有效的判断与处理,因为这直接会影响到模型训练及其应用的效果。

建模样本的不均衡会导致样本量少的标签特征信息过少,在模型训练过程中很难从中提取出相应的特征分布规律,容易产生过度依赖于有限数量的样本,从而造成模型过拟合等问题。而且,当模型在新的测试样本数据上进行应用时,模型的区分度与准确度将会大打折扣,显然这是我们不希望出现的结果。举个例子,在开发某银行信用卡反欺诈模型时,如果欺诈样本(负样本)的比例远低于非欺诈样本(正样本)的比例,那么模型训练时会较大程度地偏向于拟合非欺诈样本,但实际业务需求是寻找欺诈样本是更为重要的,这种情形很可能会导致模型在训练数据集上的性能表现较好,而在测试数据集上表现很差。

为了解决模型正负样本不均衡的业务问题,在实际工作中可以采用过采样或欠采样的方法进行处理。本文将结合具体样例来依次介绍过采样、欠采样的原理逻辑及其实现过程,同时也附带了相关场景的案例实操数据集与编程代码,便于大家理解与掌握采样方法的应用思路。

1、过采样

过采样方法在实际应用中,主要包括随机过采样与SMOTE法过采样,下面我们对这两种方法的原理逻辑分别做下简单介绍。

(1)随机过采样

随机过采样(RandomOverSampler)是从少数类标签的样本中进行随机采样,以增加新的少数类样本使各个分类达到均衡。举个例子,某建模样本数据包含10000个正样本和100个负样本,随机过采样是每次从100个负样本中随机抽取1个样本作为新的负样本,共反复抽取9900次从而新增9900个负样本,然后与100个原有负样本进行合并得到10000个负样本,接着和10000个正样本构成新的建模训练数据集。这里需要注意的是,对于随机过采样,由于需要重复抽取负样本,如果抽取负样本的比例较大,很有可能会出现模型训练过程中的过拟合现象。

随机过采样在Python语言中,是通过imblearn库的RandomOverSampler()函数实现的,其核心代码如图1所示,其中sample_X、sample_Y分别为原样本的特征数据与目标数据,oversample_X、oversample_Y为随机过采样后对应的特征数据与目标数据,参数random_state为随机种子,以保证每次抽样的结果一致。

编辑切换为居中

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

图1 随机过采样

(2)SMOTE法过采样

SMOTE法过采样是合成了少数类标签样本的过采样方式,是一种针对随机过采样容易导致过拟合问题的优化方案。举个实际场景示例,假设针对负样本进行10倍过采样,其实现过程主要包括以下几个步骤:

a. 根据样本类别分为正样本和负样本;

b. 从负样本中随机选取1个样本点;

c. 寻找与选取样本点最近的10个样本点;

d. 在选取样本点与最近10个样本点之间分别连成10条线段,并在线段上随机选取10个点生成新的样本点;

e. 重复以上步骤,直到负样本数量达到预先设定的目标要求为止。

SMOTE法过采样在Python语言中,是通过imblearn库的SMOTE()函数实现的,其核心代码如图2所示,其中smotesample_X、smotesample_Y分别为SMOTE法过采样后的特征数据与目标数据。

?

编辑切换为居中

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

图2 SMOTE法过采样


2、欠采样

欠采样是从多数类标签的样本中进行随机采样,以减少原多数类样本使各个分类达到均衡。举个例子,某建模样本数据包含10000个正样本和100个负样本,从10000个正样本中随机抽取100个样本作为新的正样本,然后与100个原有负样本合并为200个样本,构成了新的建模训练数据集。这里需要注意的是,对于随机欠采样,在样本抽取过程中,如果舍弃正样本的比例较大,很有可能会出现模型训练过程中的欠拟合现象。

欠采样在Python语言中,是通过imblearn库的RandomUnderSampler()函数实现的,其核心代码如图3所示,其中undersample_X、undersample_Y分别为欠采样后的特征数据与目标数据。

?

编辑切换为居中

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

图3 随机欠采样


对于以上关于随机过采样、SMOTE法过采样、随机欠采样的实现过程,当通过相应函数进行重新采样后,为了便于检测新样本数据的标签分布是否合理时,可以采用Counter()函数进行检验。针对图1~3的不同采样过程,样本分类标签的检验分别为Counter(oversample_Y)、Counter(smotesample_Y)、Counter(undersample_Y)。

综上以上内容介绍,通过过采样或欠采样方法,来解决反欺诈场景下建模样本不均衡的问题时,在具体工作的实践过程中,还需要根据实际样本数据的情况来综合考虑。当建模样本数据量较少时,通常采用过采样方式,这样可以有效利用已有样本数据,而欠采样方法会忽略数量有限的样本数据信息。当建模样本数据量较多时,过采样与欠采样的方法都可以考虑进行选择。此外,对于处理建模样本不均衡的情况,除了以上介绍的随机过采样、SMOTE法过采样、随机欠采样这3种方法,还有ADASYN法采样、特征权重调节法等,但最常用的还是本文介绍的几种方法,大家可以综合选择来进行应用。


3、案例分析

为了进一步说明反欺诈建模场景下解决样本不平衡的问题,现通过实际案例描述下采样分析的主要过程。假设有一份反欺诈建模样本数据集,共有10100条样本,包含10000个非欺诈样本(正样本)和100个欺诈样本(负样本)。取数据集的前10条样本如图4所示,其中ID为样本主键,X1~X6为特征变量,Y为目标变量(1为欺诈,0为非欺诈)。

?

编辑切换为居中

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

图4 数据样例


通过图5代码检验原建模样本目标变量Y的分布情况,输出结果如图6所示,已初步明确建模样本存在严重的分类不平衡情况,负样本1的占比仅约为1%。

?

编辑切换为居中

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

图5 目标变量分析


?

编辑

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

图6 原样本目标分布


针对以上样本不均衡情况,先后采用随机过采样、SMOTE法过采样、随机欠采样方法进行样本调整,具体实现代码如图7所示,同时采用Counter()函数检验每种采样方法得到的目标分布结果,如图8所示。

?

编辑切换为居中

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

图7 样本重新采样

?

编辑切换为居中

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

图8 采样后目标分布


通过不同采样方法对原建模数据进行重新抽样后,由图8的输出结果可知,对于目标变量的欺诈样本与非欺诈移已保持1:1平衡,相比原样本的1:100分布有利于模型的拟合训练。为了对比建模样本在采样前后的影响,可以对不同情况下的样本进行有监督二分类建模,并通过相关指标评估模型的应用效果,具体过程可通过逻辑回归、XGBoost、LightGBM等分类算法进行实现。现给出采用XGBoost决策树集成学习算法来训练模型并评估效果的过程,主要代码如图9所示。

?

编辑切换为居中

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

图9 模型训练与评估

综合以上内容,重点介绍了针对反欺诈场景建模样本不均衡的情况,利用过采样与欠采样的方法可以有效解决样本标签差异的问题,大家可以参考各方法的原理逻辑与实现过程,在实际工作场景中进行综合应用。


为了便于大家进一步理解与掌握建模样本不均衡问题的处理方法,我们围绕以上内容介绍,准备了具体案例的样本数据集Python代码,供各位小伙伴手把手实操练习,跟着实操内容基本就学会本次内容了,详情请大家移步至知识星球查看相关内容。

?

编辑切换为居中

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

?

编辑切换为居中

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

...

~原创文章

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表