任何事情都是由量变到质变的过程,学习Python也不例外。只有把一个语言中的常用函数了如指掌了,才能在处理问题的过程中得心应手,快速地找到最优方案。本文和你一起来探索Python中的toad.selection.select函数,让你以最短的时间明白这个函数的原理。也可以利用碎片化的时间巩固这个函数,让你在处理工作过程中更高效。
文章目录
- 一、安装toad包
- 二、select函数定义
- 三、select函数实例
- 1 导入库并加载数据
- 2 实例
一、安装toad包
quality是toad库下的函数,调用需先要安装toad包。打开cmd,安装语句如下:
pip install toad
若安装成功,会显示结果如下:
二、select函数定义
select函数的功能是根据变量的缺失情况、IV值、相关性初步筛选出能入模的变量。其中缺失情况是指变量缺失值的个数或缺失率,IV的定义可参考风控建模中的IV和WOE一文,相关性是指变量两两之间的相关程度。其基本调用语法如下:
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卡。在进行评分卡搭建之前需要对客户的信息进行筛选,挑选出和客户逾期信息相关性高的变量。
首先读取数据,具体代码如下:
#[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 实例
为了弄清楚数据框中有哪些列,我们先运行如下代码:
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、玩转Python、风控建模、人工智能学习、数据分析等内容,也可交流工作中遇到的相关问题。需要的朋友添加微信号19967879837,加时备注想进的群,比如学习Python。
你可能感兴趣:
用Python绘制皮卡丘
用Python绘制词云图
用Python绘制520永恒心动
Python人脸识别—我的眼里只有你
Python画好看的星空图(唯美的背景)
【Python】情人节表白烟花(带声音和文字)
用Python中的py2neo库操作neo4j,搭建关联图谱
Python浪漫表白源码合集(爱心、玫瑰花、照片墙、星空下的告白)