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

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

作者头像
阿黎逸阳
发布2023-08-21 19:46:54
1.3K0
发布2023-08-21 19:46:54
举报

任何事情都是由量变到质变的过程,学习Python也不例外。

只有把一个语言中的常用函数了如指掌了,才能在处理问题的过程中得心应手,快速地找到最优方案。

本文和你一起来探索Python中的toad.selection.select函数,让你以最短的时间明白这个函数的原理。

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

一、安装toad包

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

代码语言:javascript
复制
pip install toad

若安装成功,会显示结果如下:

二、select函数定义 select函数的功能是根据变量的缺失情况、IV值、相关性初步筛选出能入模的变量。

其中缺失情况是指变量缺失值的个数或缺失率,IV的定义可参考风控建模中的IV和WOE一文,相关性是指变量两两之间的相关程度。

其基本调用语法如下:

代码语言:javascript
复制
import toad

toad.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卡。

在进行评分卡搭建之前需要对客户的信息进行筛选,挑选出和客户逾期信息相关性高的变量。

首先读取数据,具体代码如下:

代码语言:javascript
复制
#[1]读取数据
import os
import toad
import numpy as np
import pandas as pd

os.chdir(r'F:\公众号\70.数据分析报告')
date = pd.read_csv('testtdmodel1.csv', encoding='gbk')
date.head(3)

os.chdir:设置数据存放的文件路径。

pd.read_csv:读取数据。

得到结果:

2   实例

为了弄清楚数据框中有哪些列,我们先运行如下代码:

代码语言:javascript
复制
list(date.columns)

得到结果:

代码语言:javascript
复制
['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个月身份证关联手机号数',
 '三个月银行相关平台数']

看下原始数据的行列情况,代码如下:

代码语言:javascript
复制
date.shape

得到结果:

代码语言:javascript
复制
(7252, 45)

说明这是一个7252行45列的数据框,接着删除数据框中无用列,只保留自变量和因变量,代码如下:

代码语言:javascript
复制
drop_columns = ['input_time', '申请状态', '历史最高逾期天数.x', '历史最高逾期天数.y'] # 去掉多余列,只保留自变量和因变量
date_f = date.drop(columns=drop_columns)
date_f.shape

得到结果:

代码语言:javascript
复制
(7252, 41)

最后调用函数删除空值率高于0.7,iv低于0.05的变量,且当两个变量相关性高于0.7时删除iv低的变量,代码如下:

代码语言:javascript
复制
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:

代码语言:javascript
复制
{'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个,可以运行如下代码:

代码语言:javascript
复制
toad.quality(date_f,'y',iv_only=True).tail(15)

得到结果:

可以发现iv低于0.05的变量确实是3个,不过需要注意的是,这里的iv是toad中自带函数计算的,如果有不同的划分方式,iv值会不同。

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-08-05,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

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