机器学习——样本不均衡学习

1、样本不均衡定义

一般在分类机器学习中,每种类别的样本是均衡的,也就是不同目标值的样本总量是接近的,但是在很多场景下的样本没有办法做到理想情况,甚至部分情况本身就是不均衡情况:
(1)很多场景下,数据集本身不平和,部分类别的数据多于其他数据;
(2)固定场景下,例如风控的场景,负样本的比例远远小于正样本的占比;
(3)梯度下降过程中,不同类别的样本量比较大时,模型本身很难做到收敛最优解。

2、解决方案

不同场景下,对样本不均衡的解决方案侧重点不同,下面以金融风控举例:
(1)下探法:将被拒绝的用户放进来,充当负样本。缺点也很明显,容易风险高,成本也较高;
(2)代价敏感:对少数样本进行加权处理,让模型进行均衡训练;
(3)采样法:通过多正样本进行欠采样,或者负样本进行过采样的方式平衡样本;
(4)半监督学习

2.1 代价敏感

通过改变少数样本的权重,从而让模型得到一定的均衡训练。但是代价敏感加权增大了负样本在模型中的贡献度,但本身并没有为模型增加额外的信息,这就没有办法解决选择偏误的问题,也没办法带来负面影响。
在逻辑回归中就可以通过参数class_weight='balanced’来调整正负样本的权重,我们以逻辑回归评分卡为例,调整逻辑回归的class_weight的参数,看看结果,该例子链接:逻辑回归评分卡

# 导入模块
import pandas as pd
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import roc_auc_score,roc_curve,auc

data = pd.read_csv('Bcard.txt')
feature_lst = ['person_info','finance_info','credit_info','act_info']
# 划分数据
train = data[data.obs_mth != '2018-11-30'].reset_index().copy()
val = data[data.obs_mth == '2018-11-30'].reset_index().copy()
x = train[feature_lst]
y = train['bad_ind']
val_x = val[feature_lst]
val_y = val['bad_ind']

# 查看正负样本的数量
print('训练集:\n',y.value_counts())
print('跨时间验证集:\n',val_y.value_counts())

# 训练模型
lr_model = LogisticRegression(C=0.1)
lr_model.fit(x,y)

# 训练集
print('参数调整前的ks值')
y_pred = lr_model.predict_proba(x)[:,1] #取出训练集预测值
fpr_lr_train,tpr_lr_train,_ = roc_curve(y,y_pred) #计算TPR和FPR
train_ks = abs(fpr_lr_train - tpr_lr_train).max() #计算训练集KS
print('train_ks : ',train_ks)

#验证集
y_pred 
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AIGC人工智残

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值