任何事情都是由量变到质变的过程,学习Python也不例外。
只有把一个语言中的常用函数了如指掌了,才能在处理问题的过程中得心应手,快速地找到最优方案。
本文和你一起来探索Python中的toad.selection.select函数,让你以最短的时间明白这个函数的原理。
也可以利用碎片化的时间巩固这个函数,让你在处理工作过程中更高效。
安装toad包
select函数定义
select函数实例
3.1 导入库并加载数据
3.2 实例

quality是toad库下的函数,调用需先要安装toad包。打开cmd,安装语句如下:
pip install toad

select函数的功能是根据变量的缺失情况、IV值、相关性初步筛选出能入模的变量。
其中缺失情况是指变量缺失值的个数或缺失率,IV的定义可参考风控建模中的IV和WOE一文,相关性是指变量两两之间的相关程度。
其基本调用语法如下:
import toadtoad.selection.select(frame, target='target', empty=0.9, iv=0.02, corr=0.7, return_drop=False, exclude=None)frame:数据集。
target:目标列或因变量列。 empty:缺失值个数超过该阈值时删除变量,若值小于1,则变量缺失率高于该阈值时删除变量。
iv:删除iv低于该阈值的变量。 corr:当两个变量相关性高于该阈值时,删除iv低的变量。 return_drop:布尔值,是否返回删除变量的列名,默认False。 exclude:指定不被删除的列名。 三、select函数实例 1 导入库并加载数据
背景:现需分析7252个客户的多头、关联风险、法院执行、风险名单和逾期信息,用于构建客户的贷前评分卡A卡。
在进行评分卡搭建之前需要对客户的信息进行筛选,挑选出和客户逾期信息相关性高的变量。
首先读取数据,具体代码如下:
#[1]读取数据import osimport toadimport numpy as npimport pandas as pdos.chdir(r'F:\公众号\70.数据分析报告')date = pd.read_csv('testtdmodel1.csv', encoding='gbk')date.head(3)os.chdir:设置数据存放的文件路径。
pd.read_csv:读取数据。
得到结果:
2 实例
为了弄清楚数据框中有哪些列,我们先运行如下代码:
list(date.columns)得到结果:
['input_time','申请状态','历史最高逾期天数.x','原始分','历史最高逾期天数.y','y','Ratio','7天内申请人在多个平台申请借款','1个月内申请人在多个平台申请借款','3个月内申请人在多个平台申请借款','7天内借款人手机申请借款平台数','1个月内借款人手机申请借款平台数','3个月内借款人手机申请借款平台数','7天内借款人身份证申请借款平台数','1个月内借款人身份证申请借款平台数','3个月内借款人身份证申请借款平台数','7天内关联P2P网贷平台数','1个月内关联P2P网贷平台数','3个月内关联P2P网贷平台数','7天内申请人关联融资租赁平台数','1个月内申请人关联融资租赁平台数','3个月手机号关联身份证数','1个月内申请人关联一般消费分期平台数','3个月内申请人关联一般消费分期平台数','风险名单占比','一度关联节点个数','二度关联节点个数','一度风险名单个数','二度风险名单个数','一度风险名单占比','二度风险名单占比','X3个月内申请人手机号作为第二联系人手机号出现的次数','X3个月内申请人手机号作为前三联系人手机号出现的次数','是否命中法院执行模糊名单','是否命中法院结案模糊名单','是否命中手机风险关注名单','是否命中身份证风险关注名单','命中中风险关注名单笔数','客户异常借款笔数','信用异常笔数','执行标的','申请人执行标的是否超过100000','3个月内申请人关联融资租赁平台数','3个月身份证关联手机号数','三个月银行相关平台数']看下原始数据的行列情况,代码如下: date.shape得到结果: (7252, 45)说明这是一个7252行45列的数据框,接着删除数据框中无用列,只保留自变量和因变量,代码如下: drop_columns = ['input_time', '申请状态', '历史最高逾期天数.x', '历史最高逾期天数.y'] # 去掉多余列,只保留自变量和因变量date_f = date.drop(columns=drop_columns)date_f.shape得到结果: (7252, 41)最后调用函数删除空值率高于0.7,iv低于0.05的变量,且当两个变量相关性高于0.7时删除iv低的变量,代码如下: selected_data, drop_lst= toad.selection.select(date_f,target = 'y', empty = 0.7, iv = 0.05, corr = 0.7, return_drop=True)display(selected_test)drop_lst得到结果1:
得到结果2: {'empty': array([], dtype=float64),'iv': array(['X3个月内申请人手机号作为前三联系人手机号出现的次数', '是否命中法院结案模糊名单', '申请人执行标的是否超过100000'],dtype=object),'corr': array(['1个月内借款人身份证申请借款平台数', '3个月内申请人在多个平台申请借款', '1个月内借款人手机申请借款平台数','3个月内借款人手机申请借款平台数', '7天内申请人关联融资租赁平台数', '3个月内借款人身份证申请借款平台数','3个月内关联P2P网贷平台数', '1个月内申请人关联一般消费分期平台数', '7天内借款人手机申请借款平台数','一度风险名单个数', '是否命中手机风险关注名单', '7天内申请人在多个平台申请借款', '1个月内关联P2P网贷平台数'],dtype=object)}从结果1知,原始变量41个,经过筛选后剩下25个变量。
从结果2知,没有变量因为缺失率高于0.7而删除,因为iv低于0.05而删除的变量有3个,因为相关性高于0.7而删除的低iv变量13个。
如果把return_drop=True的值改成False,则不会返回drop_lst的值,这个可以根据需要进行设置。
为了验证删除iv低于0.05的变量是否真的为3个,可以运行如下代码:
toad.quality(date_f,'y',iv_only=True).tail(15)得到结果:
可以发现iv低于0.05的变量确实是3个,不过需要注意的是,这里的iv是toad中自带函数计算的,如果有不同的划分方式,iv值会不同。
至此,Python中的select函数已讲解完毕,如想了解更多Python中的函数,可以翻看公众号中“学习Python”模块相关文章。
一文囊括风控模型搭建(原理+Python实现),持续更新。。。


扫一扫关注我
19967879837
投稿微信号、手机号



