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

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

文章目录

    • 一、安装toad包
    • 二、quality函数定义
    • 三、quality函数实例
      • 1 导入库并加载数据
      • 2 实例
        • 例1:默认参数调用quality函数
        • 例2:iv_only参数设置为True
    • 四、对比十等分计算iv值

  

一、安装toad包

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

pip install toad

若安装成功,会显示结果如下:
  
在这里插入图片描述

  
  

二、quality函数定义

  
quality函数的功能是计算数据框中变量的iv、gini、entropy、unique四个指标。其中iv的定义可参考风控建模中的IV和WOE一文,gini和entropy的定义可自行百度。这三个指标的作用都是衡量变量对某个事件发生的区分能力。unique计算变量的取值个数。
  
其基本调用语法如下:

import toad

toad.quality(dataframe, target='target', cpu_cores=0, iv_only=False)

dataframe:数据集。
  
target:目标列或因变量列。
  
cpu_cores:将使用的最大 CPU 内核数,“0”表示将使用所有 CPU,“-1”表示将使用除一个之外的所有 CPU。
  
iv_only:布尔值,是否只展示iv列,默认是false。
  

  
  

三、quality函数实例

  

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 实例

  

例1:默认参数调用quality函数

  
我们先来看下只输入数据框和因变量,其余参数采用默认值,会是什么效果,代码如下:

to_drop = ['input_time', '申请状态', '历史最高逾期天数.x'] # 去掉ID列和month列
quality_result = toad.quality(date.drop(to_drop,axis=1),'y')
quality_result

得到结果:
  
在这里插入图片描述

  
从结果知,计算出了对应变量的iv、gini、entropy、unique四个指标的值,并且按iv进行了降序排列。如果熟悉建模的同学应该清楚,这个函数可以用在变量挑选。

  
  

例2:iv_only参数设置为True

  
接着来看下iv_only设置成True的结果,代码如下:

to_drop = ['input_time', '申请状态', '历史最高逾期天数.x'] # 去掉ID列和month列
toad.quality(date.drop(to_drop,axis=1),'y',iv_only=True)

得到结果:
  
在这里插入图片描述
  
对比例1可以发现,iv_only设置成True时,iv、gini、entropy三个指标只计算了iv值。如果数据量很大,特征比较多,但想节省计算时间,这种设置比较适合。

  
  

四、对比十等分计算iv值

  
为了对比用toad.quality函数计算iv和十等分计算iv的区别。先定义10等分切割计算iv的函数,具体代码如下:

#等频切割变量函数
def bin_frequency(x,y,n=10): # x为待分箱的变量,y为target变量.n为分箱数量
    total = y.count()       #1 计算总样本数
    bad = y.sum()           #2 计算坏样本数
    good = total-bad        #3 计算好样本数
    if x.value_counts().shape[0]==2:    #4 如果该变量值是0和1则只分两组
        d1 = pd.DataFrame({'x':x,'y':y,'bucket':pd.cut(x,2)})
    else:
        d1 = pd.DataFrame({'x':x,'y':y,'bucket':pd.qcut(x,n,duplicates='drop')})  #5 用pd.cut实现等频分箱
    d2 = d1.groupby('bucket',as_index=True)  #6 按照分箱结果进行分组聚合
    d3 = pd.DataFrame(d2.x.min(),columns=['min_bin'])
    d3['min_bin'] = d2.x.min()               #7 箱体的左边界
    d3['max_bin'] = d2.x.max()               #8 箱体的右边界
    d3['bad'] = d2.y.sum()                   #9 每个箱体中坏样本的数量
    d3['total'] = d2.y.count()               #10 每个箱体的总样本数
    d3['bad_rate'] = d3['bad']/d3['total']   #11 每个箱体中坏样本所占总样本数的比例
    d3['badattr'] = d3['bad']/bad            #12 每个箱体中坏样本所占坏样本总数的比例
    d3['goodattr'] = (d3['total'] - d3['bad'])/good    #13 每个箱体中好样本所占好样本总数的比例
    d3['WOEi'] = np.log(d3['badattr']/d3['goodattr'])  #14 计算每个箱体的woe值
    IV = ((d3['badattr']-d3['goodattr'])*d3['WOEi']).sum()  #15 计算变量的iv值
    d3['IVi'] = (d3['badattr']-d3['goodattr'])*d3['WOEi']   #16 计算IV
    d4 = (d3.sort_values(by='min_bin')).reset_index(drop=True) #17 对箱体从大到小进行排序
    cut = []
    cut.append(float('-inf'))
    for i in d4.min_bin:
        cut.append(i)
        cut.append(float('inf'))
        WOEi = list(d4['WOEi'].round(3))
    return IV,cut,WOEi,d4

调用函数计算单个变量的iv值,具体代码如下:

IV,cut,WOEi,d4 = bin_frequency(date['1个月内申请人在多个平台申请借款'], date['y'], 10)
print(IV)
d4

得到结果:
  
在这里插入图片描述
  

可以发现10等分计算变量【1个月内申请人在多个平台申请借款】的iv时值为0.397。而在例1中用toad.quality函数计算得到的结果是0.613,明显toad.quality计算的值高于10等分计算的值。说明不同的切割方式,对变量的iv值有较大的影响。那是所有的变量都是如此吗?
  
我们用批量的方式,把数据框中的变量10等分iv值计算出来,然后和toad.quality方式计算的iv进行对比。先循环计算10等分iv值,具体代码如下:

columns = list(quality_result.index)
dt = date
dt = dt.fillna(-999999)
dt = dt.replace('NaN', -999999)
pd.set_option("display.max_rows", 1000)
pd.set_option("display.max_columns", 1000)
pd.set_option('display.max_columns',None)
IV_table = [0]
IV_name = ['xx']
for i in columns:    
    try:
        IV,cut,WOEi,d4 = bin_frequency(dt[i], dt['y'], 10)
        IV_table.append(IV)
        IV_name.append(i)
        print('变量【', i, '】的', 'IV=', IV, end='\n')
        display(d4)
    except:
        print(i)
        pass
    #print('=======================================' ,end='\n')
IV_name_table = pd.DataFrame({'IV_name':IV_name, 'iv_value':IV_table})
IV_name_table

得到结果:
  

在这里插入图片描述
  
把两个结果拼到一起对比,代码如下:
  

IV_name_table = IV_name_table.loc[1:, :]  #去除第一行无用值
quality_result['IV_name'] = quality_result.index  #加变量名列
pd.merge(IV_name_table, quality_result, on=['IV_name'], how='left') #合并数据

得到结果:
  
在这里插入图片描述
  
其中,iv_value列是十等分计算得到的iv值,iv列是toad.quality函数计算得到的iv值。可以发现,两者计算有些变量的差距还是挺大的,但大体趋势一致。在使用时可以根据具体场景选择两种方法中的一种进行计算,也可两者都计算,求并集挑选变量。
  
至此,Python中的quality函数已讲解完毕,如想了解更多Python中的函数,可以翻看公众号中“学习Python”模块相关文章。

  
【限时免费进群】 在群内讨论学习Python、玩转Python、风控建模、人工智能学习、数据分析等内容,也可交流工作中遇到的相关问题。需要的朋友添加微信号19967879837,加时备注想进的群,比如学习Python。
  
你可能感兴趣:
用Python绘制皮卡丘
用Python绘制词云图
Python人脸识别—我的眼里只有你
Python画好看的星空图(唯美的背景)
用Python中的py2neo库操作neo4j,搭建关联图谱
Python浪漫表白源码合集(爱心、玫瑰花、照片墙、星空下的告白)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/72402.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

远程通信-RPC

项目场景: 在分布式微服务架构中,远程通信是最基本的需求。 常见的远程通信方式,有基于 REST 架构的 HTTP协议、RPC 框架。 下面,从三个维度了解一下 RPC。 1、什么是远程调用 2、什么是 RPC 3、RPC 的运用场景和优 什么是远程调用…

【Zabbix安装-5.5版本】

Zabbix安装(rpm包安装) Index of /zabbix/zabbix/5.5/rhel/8/x86_64/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror rpm包链接:https://mirrors.tuna.tsinghua.edu.cn/zabbix/zabbix/5.5/rhel/8/x86_64/zabbix-release-5.5-1.e…

【福建事业单位-数学运算】03经济利润-排列组合与概率

【福建事业单位-数学运算】03经济利润-排列组合与概率 一、经济利润1.1常规经济——考的多、难具体数值——方程无数值,给比例——赋值 1.2 分段计费1.3 函数最值(销售总量 单价 * 销量 ; 总利润 单利 * 销量)总结 二、排列组合2…

f1tenth仿真设置

文章目录 一、安装依赖二、进入工作空间克隆三、编译四、运行 一、安装依赖 tf2_geometry_msgs ackermann_msgs joy map_server sudo apt-get install ros-noetic-tf2-geometry-msgs ros-noetic-ackermann-msgs ros-melodic-joy ros-noetic-map-server 二、进入工作空间克隆…

软件测试基础篇——LAMP环境搭建

LAMP 1、Linux系统的其他命令 find命令:在目录下查找文件 ​ 格式一:find 路径 参数 文件名 ​ 路径:如果没有指定路径,默认是在当前目录下 ​ 参数:-name 根据文件名来查找,区分大小写; -…

化工行业案例 | 甄知科技助力万华化学重构IT服务价值,打造信息中心ERP!

随着科技的发展,新材料的应用领域与日俱增,近年来,全球化工新材料产业发展整体步入高技术引领、产品迭代速度快、产业规模和需求不断扩大的阶段。一体化协同与数字化转型策略是实现化工新材料生产原料自给、节能降耗、降低排放和物料成本的重…

C语言必会题目(2)

W...Y的主页 😊 代码仓库分享💕 今天继续分享C语言必会的题目,上一篇文章主要是一些选择题,而今天我们主要内容为编程题的推荐与讲解 准备好迎接下面的题了吗?开始发车了!!! 输入…

数据结构【图的类型定义和存储结构】

数据结构之图 图的定义和概念图的定义图的术语 图的类型定义图的存储结构数组(邻接矩阵)表示法无向图的邻接矩阵表示法有向图的邻接矩阵表示法网(即有权图)的邻接矩阵表示法 邻接矩阵的ADT定义邻接表(链式)…

【C++】STL初识

1.STL的基本概念 2.vector存放内置数据类型 #include <iostream> using namespace std; #include <vector> #include <algorithm>void MyPrint(int val) {cout << val << endl; }void test01() {//创建vector容器对象&#xff0c;并且通过模板参…

Rx.NET in Action 中文介绍 前言及序言

Rx 处理器目录 (Catalog of Rx operators) 目标可选方式Rx 处理器(Operator)创建 Observable Creating Observables直接创建 By explicit logicCreate Defer根据范围创建 By specificationRangeRepeatGenerateTimerInterval Return使用预设 Predefined primitivesThrow …

wifi列表消失 后总结

故障现象&#xff1a; 管理源身份打开cmd &#xff0c;然后重启网络服务 Fn 加信号塔 开启二者为自动&#xff1a; 刷新网络&#xff1a; Fn 加信号塔 重启的时间可以放长一些 半个小时左右

小龟带你敲排序之冒泡排序

冒泡排序 一. 定义二.题目三. 思路分析&#xff08;图文结合&#xff09;四. 代码演示 一. 定义 冒泡排序&#xff08;Bubble Sort&#xff0c;台湾译为&#xff1a;泡沫排序或气泡排序&#xff09;是一种简单的排序算法。它重复地走访过要排序的数列&#xff0c;一次比较两个元…

自定义类型:结构体,枚举,联合

自定义类型&#xff1a;结构体&#xff0c;枚举&#xff0c;联合 结构体 1 结构体的声明 1.1 结构的基础知识 结构是一些值的集合&#xff0c;这些值称为成员变量。结构的每个成员可以是不同类型的变量。 1.2结构的声明 struct tag {member-listvariable-list }; 例如描述…

阿里云免费服务器领取入口_限制条件_申请指南

阿里云免费服务器领取&#xff0c;个人和企业用户均可以申请&#xff0c;个人免费服务器1核2GB 每月750小时&#xff0c;企业u1服务器2核8GB免费使用3个月&#xff0c;阿里云百科分享阿里云免费服务器申请入口、个人和企业免费配置、申请资格条件及云服务器免费使用时长&#x…

【数学建模】--时间序列分析

时间序列分析概念与时间序列分解模型 定义&#xff1a;时间序列也称动态序列&#xff0c;是指将某种现象的指标数值按照时间顺序排列而成的数值序列。时间序列分析大致可分成三大部分&#xff0c;分别是描述过去&#xff0c;分线规律和预测未来&#xff0c;本讲将主要介绍时间序…

双指针算法

文章目录 双指针算法leetcode题目 双指针算法 双指针算法可以实现对于时间复杂度降一维度&#xff0c;使得O(n2)的算法时间复杂度变为O(n) 指针类型 对撞指针快慢指针 对撞指针 一般是用于顺序结构中的&#xff0c;也可以称为左右指针&#xff0c;从两端向中间移动&#xff0c…

超导热催生meme,换汤不换药的投机轮回

文/章鱼哥 出品/陀螺财经 币圈对炒作meme概念的热情从未消亡过。 随着一种名为LK-99的物质被发现&#xff0c;围绕超导的兴奋不仅激发了科学界&#xff0c;加密货币相关概念也与之沸腾。不出所料&#xff0c;与此前围绕元宇宙、AI大肆炒作一样&#xff0c;许多meme代币已经出现…

Maven基础总结

前言 Maven 是一个项目管理工具&#xff0c;可以对 Java 项目进行构建、依赖管理。 基本要求掌握 配置Maven环境直接查。 得会在IDEA创建Maven的java项目吧、会创建Maven的web项目吧、会创建多模块项目吧。 得会配置插件pligin、依赖dependency吧 一、Maven四大特性 1、…

github版面混乱加载不出的解决办法

最近出现打开github 界面加载不成功&#xff0c;网页访问乱码&#xff0c;打开chrome的检查发现 github的github.githubassets.com 拒绝访问&#xff0c; 解法&#xff1a; 1.先打开hosts文件所在的目录C:\Windows\System32\drivers\etc 2.右键点击hosts文件-选择用记事本或者…

使用阿里云服务器部署和使用GitLab

本文阿里云百科分享使用阿里云服务器部署和使用GitLab&#xff0c;GitLab是Ruby开发的自托管的Git项目仓库&#xff0c;可通过Web界面访问公开的或者私人的项目。本教程介绍如何部署和使用GitLab。 目录 准备工作 部署GitLab环境 使用GitLab 登录GitLab 生成密钥对文件并…