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

文摘   教育   2024-04-04 09:40   中国  

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

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

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

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

本文目录
  1. 安装scorecardpy

  2. var_filter函数定义

  3. var_filter函数实例

    3.1 导入用到的库

    3.2 导入数据

    3.3 用默认参数对变量进行筛选

    3.4 设置参数查看变量删除的原因

    3.5 设置强制保留的列


一、安装scorecardpy

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

pip install scorecardpy


二、var_filter函数定义
var_filter是scorecardpy库中一个函数,用于变量筛选,以帮助识别并保留对预测目标变量有重要影响的特征。
其基本调用语法如下:
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指示正面事件的标签或值。在评分卡模型中,通常关心的是违约或不良事件,这个参数用于指定这些事件的标识。。

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


三、var_filter函数实例

1   导入用到的库

首先导入用到的库,具体代码如下:

import numpy as npimport pandas as pd import scorecardpy as sc

其中import xx as yy是为了代码简洁给xx库取了个简洁的别名,后续可以用yy代替xx。

如有未安装库的小伙伴,可自行百度安装。


  导入数据

为了大家复现方便,直接导入scorecardpy自带的数据集germancredit,具体代码如下:

dt = sc.germancredit()print(dt.shape)

得到结果:

(1000, 21)
从结果知,germancredit数据集包含1000行21列。
为了对数据有更清晰的了解,我们打印前几行数据看下,具体代码如下:
dt.head(5)
得到结果:

可以发现数据集中既有数值型数据,也有类别型数据

 用默认参数对变量进行筛选

接着用默认参数应用var_filter函数对变量进行筛选,具体代码如下:

dt_s = sc.var_filter(dt, y='creditability')dt_s.shape

得到结果:

(1000, 14)

从结果知,var_filter可以处理类别型变量和数值型变量,且把原始数据集中21个变量通过变量筛选,保留了14个变量。

 设置参数查看变量删除的原因

有时候我们想查看变量删除的原因,可以设置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']

得到结果:

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


 设置强制保留的列

接着把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列在保留列中。

至此,Python中的var_filter函数已讲解完毕,如想了解更多Python中的函数,可以翻看公众号中“学习Python”模块相关文章。

【部分群限时免费进分群讨论学习Python、玩转Python、风控建模【29.9元进】、人工智能、数据分析相关问题,还提供练习数据资料招聘推信息、优秀文章、学习视频、公众号文章答疑,也可交流工作中遇到的难题。如需添加微信号19967879837,加时备注想进的群,比如学习python。

往期回顾:
一文弄懂随机森林的原理和应用

一文囊括Python中的函数,持续更新。。。

一文囊括Python中的有趣案例,持续更新。。。

【评分卡实现】应用Python中的toad.ScoreCard函数实现评分卡

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

【Python数据挖掘】应用toad包中的KS_bucket函数统计好坏样本率、KS值



限时免费进群

19967879837

添加微信号、手机号

阿黎逸阳的代码
阿黎逸阳,分享大数据和人工智能领域知识,提供风控建模干货经验。 博主履历:世界五百强公司、互联网上市公司、高校、外资银行,多年研究大数据分析、建模以及教学工作。
 最新文章