不均衡学习

本文探讨了在风控领域遇到的不均衡学习问题,包括幸存者偏差和样本不均衡。介绍了代价敏感加权、SMOTE过采样算法以及半监督学习中的S3VM和LP方法。通过调整样本权重、合成新样本和利用无标签样本,以提高模型的性能和泛化能力。
摘要由CSDN通过智能技术生成

本文是《智能风控、算法和工程实践》第五章学习笔记。

幸存者偏差

  由于风控模型的拒绝属性,会导致幸存者偏差和样本不均衡两个问题。 幸存者偏差是指,每次模型迭代时,使用的样本都是被前一个模型筛选过的,只有高于前一版模型分数阈值的样本,才可以进入当前模型训练,于是样本空间就会不完备。进入模型的样本就是幸存者,它们不携带或者很少携带被拒绝的样本的信息,导致样本逐渐偏离真实分布。
  于是随着模型迭代,区分能力强的特征被弱化,甚至对模型起到完全相反的作用。想要修正有偏差的信息,就需要用无偏差的数据重新训练模型。因此核心问题就是如何获取无偏差的数据。
传统的解决方法就是使用拒绝推断为拒绝样本添加伪标记和权重。拒绝推断的方法见: 拒绝推断
  书中介绍的方法是一些其他的机器学习方法,具体有:

  1. 增量学习
  2. 生成对抗网络——GAN模型
  3. 高斯混合模型——GMM算法

  这里就不再深入学习以上的算法了,因为实际工作中用不用得到拒绝推断还是个问号。

样本不均衡

  在风控场景下,负样本的占比要远远小于正样本的占比。当不同类别的样本量有较大差异时,在梯度下降的过程中就会很难收敛到最优解。因为在每一次梯度下降的过程中,负样本所贡献的信息有限,导致模型无法很好地学习负样本。通俗说就是,负样本越多,模型的区分效果通常会越好,KS值会越大。

代价敏感加权方案

  下探是解决不均衡问题最直接的方法。就是在拒绝域中随机接收一些样本,以此来积累负样本。但这样风险较高,会牺牲一部分收益,而且较难量化每次下探的量。
  对少数类样本进行加权处理,使模型进行均衡训练,即代价敏感加权方案,又叫作展开法。在逻辑回归中,可以通过参数class_weight="balanced"调整正负样本的权重,大多数情况下样本加权可以增强模型的表现。
  类权重的计算方法如下:
w e i g h t = n _ s a m p l e s n _ c l a s s e s ∗ n p . b i n c o u n t ( y ) weight=\frac{n\_samples}{n\_classes*np.bincount(y)} weight=n_classesnp.bincount(y)n_samples
  其中,n_samples为样本数,n_classes为类别数量,np.bincount(y)会输出每个类别的样本数。

插值过采样方案

  插值过采样方案又叫作SMOTE算法,是机器学习中常用的采样方法。基本思想就是在现有少数类样本之间进行插值,人工合成新样本。SMOTE算法的原理如下图:

  为了解决SMOTE算法的过拟合问题,Adaptive Synthetic Sampling方法被提出,主要包括:Borderline-SMOTE和Adaptive Synthetic Sampling(ADA-SYN)算法。

  1. Borderline-SMOTE
      对靠近边界的minority样本创造新数据。其与SMOTE的不同是:SMOTE是对每一个少数类样本产生综合新样本,而Borderline-SMOTE仅对靠近边界的少数样本创造新数据。

  Borderline-SMOTE算法只对近邻中多数类样本大于少数类样本的点进行合成新样本。但是如果一个样本的近邻都是多数类样本, 则会被认为是噪声,不合成新样本。

  1. ADA-SYN
      根据多数类和少数类的密度分布,动态改变权重,决定要生成多少少数类的新数据。

  2. 基于聚类的随机采样(CBO)

  可以用来解决类内不平衡问题,主要利用的聚类的方法。具体的过程如下:

随机选择K个样本作为K个簇,并且计算K类样本在特征空间的平均值,作为聚类中心;
对于剩下的每一个样本,计算它和K个聚类中心的欧氏距离,根据欧式聚类将其分配到最近的类簇中;
更新每个簇的聚类中心,直到所有的样本都用完;

  CBO会使用过采样的方法填充多数类和少数类的类簇,所以每个类的样本数相同。少数类的样本个数为多数类样本除以少数类的类别数。即上图中60/2=30。

过采样算法实战

  由于SMOTE算法是基于样本空间进行插值,会放大数据集中的噪声和异常,因此要对训练样本进行清洗。这里使用lightgbm对数据进行拟合,将预测结果较差的样本权重降低,并且不参与SMOTE算法的插值过程。列出核心代码:

def  lgb_test(train_x,train_y,test_x,test_y):
    clf =lgb.LGBMClassifier(boosting_type = 'gbdt',
                           objective = 'binary',
                           metric = 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值