筛选样本_智能风控(梅子行)笔记—用XGBoost进行特征筛选

本文介绍了如何使用XGBoost进行特征筛选,特别是在风控场景下。通过SolveKS和SolvePSI两个关键指标评估模型性能,并讨论了XGBoost自带的Featureimportance在高相关性特征时的局限性。文中实现了一种筛选算法,通过minscore和maxdelvarnums控制筛选过程,并对比了特征筛选前后KS和PSI的变化。此外,还提及了IV指标在特征有效性分析中的限制。

199624fe2edc9927dad7d2e21296de01.png

本文参考下链 ,如果对数据集或书内更多更多讲解内容感兴趣,请直接购买

智能风控(原理,算法与工程实践)​www.amazon.cn

这篇手码了一遍梅子行在书中的递归筛选方案,梳理的框架上是这样的.

  1. 首先定义了在风控场景下,特征迭代筛选和两个关键性指标:
  • KS: 模型的正负样本体现的关键指标,这与普通学习任务中的针对AUC,Precision等的优化方向不一样,所以基本自己定义了一个评价指标。
  • PSI: 模型各个在各个检测分段上的检测稳定性.
也就是区分能力要强,模型结果要稳定.

需要注意的是,我们在使用XGBoost的时候其实有自带一个Featureimportance功能(上一篇写xgboost有提到,分为weight, gain和cover三种不同形式),如果我们在入模之前没有对模型特征做相关性的处理的话,直接使用XGBoost进行特征筛选是不合理的. 我下面举个例子:

af856d8a60eacb79866ad65d37a3271a.png

如果有两个特征的分布是像上图这样的,可以发现他们的相关性一定是差不多的,在XGBOOST用于分裂时2个特征肯定会被随机用来分树,那么这两个本身如果重要性比较高的话,特征的真正重要性就会丢失。

回到书中的内容,这节先定义了2个评估模型效果的函数

SolveKS:

用于计算当前模型在某数据集上的KS,KS值对模型的评价不会受到样本不均衡问题的影响.
这些函数都继承自之前XGBoost父类
注意这个函数还加了个Weight参数,这是为了还原真实样本比例下的比例,举个例子,正样本有100,负样本有10000,对负样本按照0.4的比例进行下采样,就会得到4000的负样本,对100的正样本和4000的负样本进行建模,但是需要将负样本的权重设置为2.5,才能还原到初始的正负样本的比例
def sloveKS(self, model, X, Y, Weight):  
    Y_predict = [s[1] for s in model.predict_proba(X)]  
    nrows = X.shape[0]  
    #还原权重  
    lis = [(Y_predict[i], Y.values[i], Weight[i]) for i in range(nrows)]
    #按照预测概率倒序排列  
    ks_lis = sorted(lis, key=lambda x: x[0], reverse=True)        
    KS = list()  
    bad = sum([w for (p, y, w) in ks_lis if y > 0.5])  
    good = sum([w for (p, y, w) in ks_lis if y <= 0.5])  
    bad
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值