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

news2024/10/7 20:32:17

大数据时代的到来,使得很多工作都需要进行数据挖掘,从而发现更多有利的规律,或规避风险,或发现商业价值。比如在支付领域,通过挖掘商户的交易数据,分析商户是否有欺诈、盗刷、赌博、套现等风险。对于有风险的商户,及时进行关闭处理,或者实时中断交易,从而保护个人的资金安全。在金融领域,通过客户的历史还款和多头借贷等数据,挖掘客户的还款能力和还款意愿,进行贷前评估。
  
本文和你一起探索数据挖掘常用的函数toad.metrics.KS_bucket。

文章目录

    • 一、安装toad包
    • 二、导入数据
    • 三、KS_bucket函数参数详解
    • 四、应用KS_bucket函数计算变量的KS值
      • 1 等频分割
      • 2 等距分割
      • 五、循环计算所有变量的KS值

  

一、安装toad包

  
首先打开cmd,安装toad包,安装语句如下:

pip install toad

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

  
  

二、导入数据

  
背景:现需分析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)

展示前几行数据如下:
  

  
  

三、KS_bucket函数参数详解

  
有时我们知道一个函数,但是记不清楚这个函数有哪些参数和具体的使用方法。可以使用Python中自助查看帮助文档的方法,很方便就可以看到这个函数里面有哪些参数,这些参数需要填什么值。
  
具体语句如下:

help(toad.metrics.KS_bucket)

得到结果如下:

Help on function KS_bucket in module toad.metrics:

KS_bucket(score, target, bucket=10, method='quantile', return_splits=False, **kwargs)
    calculate ks value by bucket
    
    Args:
        score (array-like): list of score or probability that the model predict
        target (array-like): list of real target
        bucket (int): n groups that will bin into
        method (str): method to bin score. `quantile` (default), `step`
        return_splits (bool): if need to return splits of bucket
    
    Returns:
        DataFrame

参数详解:
  
score:模型预测出来的分数或概率列表,可以推广到自变量x。
  
target:真实的目标变量列表。
  
bucket:分箱的箱数,默认是10箱。
  
method:分箱的方法,包含等频分箱和等距分箱。
  
return_splits:是否返回分箱的分割点,如果值等于True则返回,否则不返回,默认不返回。

  
  

四、应用KS_bucket函数计算变量的KS值

  

1 等频分割

  
接着,调用toad库下的KS_bucket函数,设置10等分等频分箱,进行数据统计分析,语句如下:

d1=toad.metrics.KS_bucket(date['7天内申请人在多个平台申请借款'], date['y'],bucket=10,method='quantile',return_splits=True)
d1[0]

由于return_splits=True,所以该语句得到一个元组,元组的第一个数据是包含区间、好坏样本数量、占比、KS值等信息的数据框,第二个数据是分箱的分割点。
  
第一个数据具体展示如下:
  
在这里插入图片描述

  
可以发现虽然设置了10等分,但是由于数据在切割时0值的占比已经超过了一半,所以把0先分了一箱,总计分了3箱。
  
第二个数据具体展示如下:
  
在这里插入图片描述
  
为了看得更清晰,我们把第一个数据的结果导出到csv中,具体代码如下:

d1[0].to_csv('d1.csv', encoding='gbk')

得到结果:
  
在这里插入图片描述
  
常用指标详解:
  
min列展示分箱区间的左端点。
  
max列展示分箱区间的右端点。
  
bads列统计对应分箱中坏样本的数量。
  
goods列统计对应分箱中好样本的数量。
  
total列统计对应分箱中总计样本的数量。
  
bad_rate列统计对应分箱中坏样本占比。
  
good_rate列统计对应分箱中好样本占比。
  
odds列统计对应分箱中坏样本率除以好样本率的比率。
  
bad_prop列统计对应分箱中的坏样本占全体坏样本的比率。
  
good_prop列统计对应分箱中好样本占全体好样本的比率。
  
total_prop列统计对应分箱中总计样本占全体样本的比率。
  
cum_bad_rate列统计对应分箱中累计坏样本占累计全体样本的比率。
  
cum_bads_prop列统计对应分箱中累计坏样本占全体坏样本的比率。
  
ks列统计对应分箱中累计好样本率和累计坏样本率的差值。详细的KS原理可以参考本公众号文章:模型评价指标—KS。lift列统计对应分箱中坏样本率和全体坏样本率的比值,该比值越大,说明该分箱中坏样本浓度越高,在策略中会考虑拒绝高lift组客户进件 。

  

2 等距分割

  
为了对比,调用toad库下的KS_bucket函数,设置10等分等距分箱,进行数据统计分析,语句如下:

d1=toad.metrics.KS_bucket(date['7天内申请人在多个平台申请借款'], date['y'],bucket=10,method='step')
d1

得到结果:
  
在这里插入图片描述
  
可以发现,等距分箱是按分割的值大致距离相等来切割。
  
  

五、循环计算所有变量的KS值

  
最后,挑选需要统计KS值的变量,先展示全体变量,语句如下:

columns = list(date.columns)
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个月身份证关联手机号数',
 '三个月银行相关平台数']

从第七变量开始,就是我们想分析的自变量,写循环一次性统计所有需要分析的变量,语句如下:

d1=toad.metrics.KS_bucket(date[columns[7]], date['y'],bucket=10,method='quantile')
d1['name'] = columns[7]
all_woe = d1
for i in columns[8:]:
    #print('变量为:', i)
    d1=toad.metrics.KS_bucket(date[i], date['y'], bucket=10,method = 'quantile')
    d1['name'] = i
    all_woe = all_woe.append(d1)
all_woe.to_csv('all_woe_10deg.csv', encoding='gbk')

得到结果如下:
  
在这里插入图片描述  
至此,在Python中应用toad.metrics.KS_bucket进行数据挖掘已经讲解完毕,感兴趣的同学可以自己实现一遍图片。
  
限时免费进群】群内提供学习Python、玩转Python、风控建模、人工智能、数据分析相关招聘内推信息、优秀文章、学习视频,也可交流学习工作中遇到的相关问题。需要的朋友添加微信号19967879837,加时备注想进的群,比如风控建模。
  
参考文献
https://baike.baidu.com/
https://zhuanlan.zhihu.com/《数据科学与大数据技术》学校排名 - 知乎 (zhihu.com)

你可能感兴趣:
用Python绘制皮卡丘
用Python绘制词云图
Python人脸识别—我的眼里只有你
Python画好看的星空图(唯美的背景)
用Python中的py2neo库操作neo4j,搭建关联图谱
Python浪漫表白源码合集(爱心、玫瑰花、照片墙、星空下的告白)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

孤注一掷——基于文心Ernie-3.0大模型的影评情感分析

孤注一掷——基于文心Ernie-3.0大模型的影评情感分析 文章目录 孤注一掷——基于文心Ernie-3.0大模型的影评情感分析写在前面一、数据直观可视化1.1 各评价所占人数1.2 词云可视化 二、数据处理2.1 清洗数据2.2 划分数据集2.3 加载数据2.4 展示数据 三、RNIE 3.0文心大模型3.1 …

自己实现 SpringMVC 底层机制 系列之--实现任务阶段 3- 从 web.xml动态获取 wyxspringmvc.xml

😀前言 自己实现 SpringMVC 底层机制 系列之–实现任务阶段 3- 从 web.xml动态获取 wyxspringmvc.xml 🏠个人主页:尘觉主页 🧑个人简介:大家好,我是尘觉,希望我的文章可以帮助到大家&#xff…

如何根据蛋白质序列找到蛋白质ID

多数数据集中有蛋白质序列但不存储蛋白质ID,这使得PDB文件获取困难,如何找到蛋白质序列对应的ID,参考以下(还没有找到批处理方法,如果有知道的小伙伴评论区留言): 1. 进入官方网站:…

java 用协程 实现 简单下订单功能

java 用协程有几种方式,本文是是基于kotlin的协程库实现。 kotlin 协程原理 Kotlin 的协程(Coroutines)是一种在 Kotlin 语言中实现异步编程的轻量级工具。它可以实现更简洁和可读性更高的异步代码,并且不需要显式地使用回调函数…

0基础入门C++之类和对象中篇

目录 1.类的6个默认成员函数2.构造函数2.1概念2.2特性 3.析构函数3.1概念3.2特性 4.拷贝构造函数4.1概念4.2 特性 5.赋值运算符重载5.1运算符重载5.2赋值重载5.3赋值运算符重载特性 6.const成员7.取地址及const取地址操作符重载 1.类的6个默认成员函数 通过类和对象上篇的学习&…

操作系统——操作系统内存管理基础

文章目录 1.内存管理介绍2.常见的几种内存管理机制3.快表和多级页表快表多级页表总结 4.分页机制和分段机制的共同点和区别5.逻辑(虚拟)地址和物理地址6.CPU 寻址了解吗?为什么需要虚拟地址空间? 1.内存管理介绍 操作系统的内存管理主要是做什么? 操作系统的内存…

solidwords(6)

从右视图开始,分上下两部分 标题 这里的薄壁要留意一下怎么算的(单向:默认向内;如果想向外记得选反向)

Vue2+Vue3笔记(尚硅谷张天禹老师)day01

只是记录,初心是为了让页面更好看,会有错误 环境准备 下载vue:Vue下载 下面两个是可选的,主要是我想让控制台干净点 vue_dev_tool安装 vue_dev_tool安装 : Vue 控制台出现You are running Vue in development mode. Make sure to turn on production mode when dep…

unity之Input.GetKeyDown与Input.GetKey区别

文章目录 Input.GetKeyDown与Input.GetKey区别 Input.GetKeyDown与Input.GetKey区别 Input.GetKey 和 Input.GetKeyDown 是 Unity 中用于检测按键状态的两个不同函数。它们之间的区别在于何时触发。 Input.GetKey(KeyCode key): 这个函数会在用户按住指定的键时触发&#xff0…

CountDownLatch和CyclicBarrie

前置提要 什么是闭锁对象 闭锁对象(Latch Object)是一种同步工具,用于控制线程的等待和执行顺序。闭锁对象可以让一个或多个线程等待,直到特定的条件满足后才能继续执行。 在Java中,CountDownLatch就是一种常见的闭锁对…

【AI大模型】训练Al大模型

大模型超越AI 前言 洁洁的个人主页 我就问你有没有发挥! 知行合一,志存高远。 目前所指的大模型,是“大规模深度学习模型”的简称,指具有大量参数和复杂结构的机器学习模型,可以处理大规模的数据和复杂的问题&#x…

C语言刷题指南(三)

📙作者简介: 清水加冰,目前大二在读,正在学习C/C、Python、操作系统、数据库等。 📘相关专栏:C语言初阶、C语言进阶、C语言刷题训练营、数据结构刷题训练营、有感兴趣的可以看一看。 欢迎点赞 &#x1f44d…

JS-Array数组方法reduce()

reduce方法 // 可以与箭头函数一起使用 array.reduce((total,curVal) > total curVal, initVal) array.reduce(function(total, currentValue, currentIndex, arr), initialValue) 例子: // a:总和/累加项 // c:每一项的值 const allCount compu…

实验三 nfs 服务器环境搭建

nfs 服务器环境搭建 nfs(Network File System)即网络文件系统,其基于UDP/IP 使用nfs能够在不同计算机之间通过网络进行文件共享,能使使用 者访问网络上其它计算机中的文件就像在访问自己的计算机一样。 【实验目的】 掌握 nfs 环…

RT1052的XBAR

文章目录 XBAR2函数2.1 XBARA_Init2.2XBARA1_Signal_Set XBAR XBAR 是 RT1052 芯片自带的内部外设交错开关矩阵 它可以将 RT1052 内部外设的输出(或 IO 口的输入)映射到另外一部分内部外设的输入(或 IO 口的输出)上,…

WordPress用于您的企业网站的优点和缺点

如今,WordPress 被广泛认为是一个可靠、可扩展且安全的平台,能够为商业网站提供支持。然而,许多人质疑 WordPress 是否是适合企业的平台。 这就是我们创建本指南的原因。通过探索 WordPress 的优点和缺点,您可以确定世界上最受欢…

低代码自动化解析:企业所需了解的全面指南

根据2020年以来与低代码技术相关的积极趋势,Gartner预测到2023年低代码开发技术市场将增长20%。此外,他们还预计,到2026年,非正式IT部门的开发人员将占低代码开发工具用户群至少80%的比例,而这一比例在2021年为60%。基…

服务器感染了.360勒索病毒,如何确保数据文件完整恢复?

引言: 随着科技的不断进步,互联网的普及以及数字化生活的发展,网络安全问题也逐渐成为一个全球性的难题。其中,勒索病毒作为一种危害性极高的恶意软件,在近年来频频袭扰用户。本文91数据恢复将重点介绍 360 勒索病毒&a…

C++快速回顾(二)

前言 在Android音视频开发中,网上知识点过于零碎,自学起来难度非常大,不过音视频大牛Jhuster提出了《Android 音视频从入门到提高 - 任务列表》,结合我自己的工作学习经历,我准备写一个音视频系列blog。C/C是音视频必…

HDU-7314 2023“钉耙编程”杭电多校赛(4)Data Generation

HDU-7314 2023“钉耙编程”杭电多校赛(4)Data Generation 题目大意 给定 n n n和 m m m,求下面的算法中 a n s ans ans的期望值模 998244353 998244353 998244353后的结果。 有 T T T组数据。 1 ≤ T ≤ 1 0 5 , 1 ≤ n ≤ 1 0 18 , 0 ≤ m…