前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Python常用函数】一文让你彻底掌握Python中的scorecardpy.var_filter函数

【Python常用函数】一文让你彻底掌握Python中的scorecardpy.var_filter函数

作者头像
阿黎逸阳
发布2024-04-10 19:36:34
600
发布2024-04-10 19:36:34
举报

scorecardpy是一个用于构建评分卡模型的Python库。

在评分卡模型的构建过程中,变量选择是一个关键的步骤,而var_filter函数则是用于进行变量筛选的工具。

本文和你一起来探索scorecardpy中的var_filter函数,让你以最短的时间明白这个函数的原理。

也可以利用碎片化的时间巩固这个函数,让你在处理工作过程中更高效。

一、安装scorecardpy

var_filter是scorecardpy库下的函数,调用需先要安装库。打开cmd,安装语句如下:

代码语言:javascript
复制
pip install scorecardpy

二、var_filter函数定义

代码语言:javascript
复制
var_filter是scorecardpy库中一个函数,用于变量筛选,以帮助识别并保留对预测目标变量有重要影响的特征。其基本调用语法如下:
代码语言:javascript
复制
import scorecardpy as sc
  
sc.var_filter(dt, y, x=None, iv_limit=0.02, missing_limit=0.95, identical_limit=0.95, var_rm=None, var_kp=None, return_rm_reason=False, positive='bad|1')

参数详解:

dt:数据框,通常是DataFrame,包含所有待筛选的变量和目标变量。

y:目标变量名,即需要预测或分类的列名。

x:如果指定了x,则只对x列表中的变量进行筛选,否则考虑dt中除y以外的所有变量。

iv_limit:IV(信息价值)阈值,默认值0.02,只有当变量的IV值大于这个阈值时,该变量才会被保留。该值用于衡量一个变量对目标变量的预测能力。

missing_limit:缺失值占比阈值,默认值0.95,如果一个变量的缺失值占比超过这个阈值,那么该变量会被剔除。

identical_limit:相同值占比阈值,默认值0.95,如果一个变量的相同值占比(该变量某一取值占全部样本的比例)超过这个阈值,那么该变量会被认为是不具有区分度的,会被剔除。

var_rm:需要手动剔除的变量列表,默认值None。即使这些变量的统计指标满足其他条件,它们也会被从数据集中移除。

var_kp:需要手动保留的变量列表,默认值None。这些变量即使不满足其他筛选条件,也会被保留在数据集中。

return_rm_reason:是否返回被剔除变量的原因,默认值False。如果值为True,则返回被剔除变量的原因,可以帮助使用者了解哪些变量因何原因被剔除。

positive:指示正面事件的标签或值。在评分卡模型中,通常关心的是违约或不良事件,这个参数用于指定这些事件的标识。。

根据数据特性和业务需求合理设置这些参数,可以有效地筛选出对模型构建有贡献的变量,并剔除那些对模型性能没有帮助或者可能引入噪声的变量。这有助于简化模型,提高模型的稳定性和预测性能。

代码语言:javascript
复制
三、var_filter函数实例

1 导入用到的库 首先导入用到的库,具体代码如下:‍ 2 导入数据 为了大家复现方便,直接导入scorecardpy自带的数据集germancredit,具体代码如下: dt = sc.germancredit() print(dt.shape) 得到结果: (1000, 21) 从结果知,germancredit数据集包含1000行21列。 为了对数据有更清晰的了解,我们打印前几行数据看下,具体代码如下: dt.head(5) 得到结果:

可以发现数据集中既有数值型数据,也有类别型数据 3 用默认参数对变量进行筛选 接着用默认参数应用var_filter函数对变量进行筛选,具体代码如下: dt_s = sc.var_filter(dt, y='creditability') dt_s.shape 得到结果: (1000, 14) 从结果知,var_filter可以处理类别型变量和数值型变量,且把原始数据集中21个变量通过变量筛选,保留了14个变量。 4 设置参数查看变量删除的原因 有时候我们想查看变量删除的原因,可以设置return_rm_reason为True实现,具体代码如下: dt_s = sc.var_filter(dt, y='creditability', return_rm_reason=True) 查看变量删除的原因,具体代码如下: dt_s['rm'] 得到结果:

可以发现,变量foreign_worker删除的原因是单一值占比超过了95%,变量job删除的原因是IV值低于0.02,其他变量的删除原因详见rm_reason列。 接着来看下删除变量保留的数据集,具体代码如下: dt_s['dt'] 得到结果:

代码语言:text
复制

从结果知,var_filter函数把原始数据集中21个变量通过变量筛选,保留了14个变量。


5  设置强制保留的列
接着把IV低于0.02的job列,设置var_kp参数强制保留下来,具体代码如下:
dt_s = sc.var_filter(dt, y='creditability', var_kp='job')
dt_s.shape
得到结果:
(1000, 15)
可以发现当前保留的列比之前的14列多了1列。
进一步打印保留变量列名,具体代码如下:

list(dt_s.columns)
得到结果:
['age_in_years',
 'credit_amount',
 'credit_history',
 'duration_in_month',
 'housing',
 'installment_rate_in_percentage_of_disposable_income',
 'job',
 'other_debtors_or_guarantors',
 'other_installment_plans',
 'present_employment_since',
 'property',
 'purpose',
 'savings_account_and_bonds',
 'status_of_existing_checking_account',
 'creditability']
从结果知,job列在保留列中。
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2024-04-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 阿黎逸阳的代码 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档