网站首页 > 技术文章 正文
在反欺诈建模场景下,我们经常会遇到样本不平衡的情况,也就是欺诈标签的样本分布差异较大。当然,这种情形的出现也是完全符合实际业务表现的,毕竟对于欺诈行为的定义,相对正常行为来讲是极少数的,例如银行信用卡的申请材料作假、额度恶意套现等。但是,当我们在实际工作中建立反欺诈模型时,务必要对建模样本是否均衡做出有效的判断与处理,因为这直接会影响到模型训练及其应用的效果。
建模样本的不均衡会导致样本量少的标签特征信息过少,在模型训练过程中很难从中提取出相应的特征分布规律,容易产生过度依赖于有限数量的样本,从而造成模型过拟合等问题。而且,当模型在新的测试样本数据上进行应用时,模型的区分度与准确度将会大打折扣,显然这是我们不希望出现的结果。举个例子,在开发某银行信用卡反欺诈模型时,如果欺诈样本(负样本)的比例远低于非欺诈样本(正样本)的比例,那么模型训练时会较大程度地偏向于拟合非欺诈样本,但实际业务需求是寻找欺诈样本是更为重要的,这种情形很可能会导致模型在训练数据集上的性能表现较好,而在测试数据集上表现很差。
为了解决模型正负样本不均衡的业务问题,在实际工作中可以采用过采样或欠采样的方法进行处理。本文将结合具体样例来依次介绍过采样、欠采样的原理逻辑及其实现过程,同时也附带了相关场景的案例实操数据集与编程代码,便于大家理解与掌握采样方法的应用思路。
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 字(可选)
...
~原创文章
猜你喜欢
- 2024-10-12 深度学习难分样本挖掘(Hard Mining)
- 2024-10-12 推荐系统系列之隐语义模型 基于隐语义模型的协同过滤
- 2024-10-12 「机器学习」利用图网络小数据学习进行性质预测
- 2024-10-12 论文荐读:理解图表示学习中的负采样
- 2024-10-12 策略产品经理干货系列之推荐系统离线评估方法与指标介绍
- 2024-10-12 终于搞懂了PR曲线 pr曲线调色在哪里
- 2024-10-12 记:多标签分类问题 多标签分类 focal loss
- 2024-10-12 开始构建机器学习模型之前,我们该怎么选择样本?
- 2024-10-12 推荐系统之隐含语义模型LFM(2)负样本采集
- 2024-10-12 对比学习效果差?谷歌提出弱语义负样本,有效学习高级特征
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)