今天来讲一下IV值的计算问题

因本人从事风控建模行业,故不可避免需要明白IV值的整个今生前世,故此次来讲解IV值。

一、IV的定义及必备常见知识

IV是什么?全称是Information Value,中文意思是信息价值,或者信息量。

那它有什么内在含义呢?网上公认的答案:变量的预测能力。且通常来讲,变量的IV值越高,则该变量的预测能力越强

这就对选取哪些x进行建模,起到了关键的作用了,但是IV也有其限制的范围。

首先、模型必须是有监督模型(即有y标签变量),其次、y标签必须是二分类(即y只有两类y1,y2)

常见的IV取值范围代表意思如下:

若IV在(-∞,0.02]区间,视为无预测力变量

若IV在(0.02,0.1]区间,视为较弱预测力变量

若IV在(0.1,+∞)区间,视为预测力可以,而实际应用中,也是保留IV值大于0.1的变量进行筛选。

二、IV计算过程

在了解IV计算过程之前,必须明白另一个概念"WOE"

WOE的全称是“Weight of Evidence”,即证据权重。计算公式为:

简单的理解就是 该分箱 坏样本(即b)占比除以好样本(即g)占比的自然对数。(如果对分箱有疑问的同学,可以先简单理解成如果x=0、1、2、3,那么x=0就是一箱,x=1、2、3也是各为一箱)

而从公式也可以体现出WOE的含义:当前分箱中“坏样本占所有坏样本的比例”和“好样本占所有好样本的比例”的差异。很容易可以看出,当差异越大,则该分箱响应坏样本的的可能性就越大;当差异越小,则该分箱响应坏样本的可能性就越小。

这里坏样本指的是响应样本,其实网上很多文章也是约定俗成一直这么叫,其原因是因为风控建模的y标签往往选取在“客户是不是坏客户”,“客户是否会违约”,“客户是否有欺诈行为”等等命题上,所以响应的样本均指向坏客户,所以见多了、叫多了自然很多人称响应样本为坏样本,未响应样本为好样本,这种概念明白就好,不必过多深究。

WOE计算代码如下

先创建数据集

计算X1的WOE

由此可见X1=1的分箱WOE=1.2大于X1=0的分箱WOE(-1.5),即可得知X1=1更有可能性得到响应,而实际数据也是如此。

明白了WOE计算之后,IV值的计算公式就简单了

代码如下

即可得IV=1.58,证明X1变量具有超强预测力

在实际应用中,极少有这样超强预测力的变量,随着样本量的增加,偶然误差逐渐降低,系统误差趋于平均,通常有IV值大于0.2的变量已经算是极少。

以上就是IV值计算全过程。

三、文献参考+附加代码

https://blog.csdn.net/iModel/article/details/79420437

下次会写k-means聚类算法,有时间再把分箱的问题也详细一下。

# -*- coding:utf-8 -*-
# Author:Bemyid
from numpy import log
from pandas import DataFrame as df
import  pandas as pddef createDateset():dataSet=[[0, 1, 0],[0, 0, 0],[0, 1, 0],[1, 0, 1],[1, 0, 0],[1, 1, 1],[0, 1, 1],[1, 1, 1],[1, 0, 1],[1, 0, 1]]return dataSetdef calcWOE(dataset,col,targe):subdata=df(dataset.groupby(col)[col].count())suby=df(dataset.groupby(col)[targe].sum())data=df(pd.merge(subdata,suby,how="left",left_index=True,right_index=True))b_total=data[targe].sum()total=data[col].sum()g_total=total-b_totaldata["bad"]=data.apply(lambda x:round(x[targe]/b_total,3),axis=1)data["good"]=data.apply(lambda x:round((x[col]-x[targe])/g_total,3),axis=1)data["WOE"]=data.apply(lambda x:log(x.bad/x.good),axis=1)return data.loc[:,["bad","good","WOE"]]def calcIV(dataset):dataset["IV"]=dataset.apply(lambda x:(x.bad-x.good)*x.WOE,axis=1)IV=sum(dataset["IV"])return IVif __name__ == '__main__':data=createDateset()data=df(data,columns=["x1","x2","y"])data_WOE=calcWOE(data,"x1","y")print(data_WOE)data_IV=calcIV(data_WOE)print(data_IV)

图示代码,轻松解决IV值计算问题(python)相关推荐

  1. 电脑开机卡住了怎么办_苹果电脑忘记开机密码怎么办?一段代码轻松解决

    长时间不用Mac电脑忘记开机密码怎么办呢?不要着急,这里macw小编解决妙招,照着这个办法重设密码就可以轻松重置密码开机. 苹果电脑忘记开机密码解决方法 在关机状态下,按一下开机键,再按住 comma ...

  2. 自动化测试框架:几行代码轻松解决Appium环境问题

    移动UI自动化测试中,很多人用appium这个开源框架. 发现很多人在安装时,安装过程中出现各种问题,花费很多时间.特别是团队开始用时.每个人都在这上面踩坑,得不偿失. 我写了一个脚本来自动实现这个安 ...

  3. python100行代码-怎样写贪吃蛇小游戏?用100行python代码轻松解决!

    大家小时候都玩过贪吃蛇吧?小编小时候可喜欢拿爸妈的手机玩了,厉害着呢!今天,小编就来用100行代码实现一个简易版的贪吃蛇.在网上,贪吃蛇教程蛮多的,但要安装蛮多库的,而且也不够清晰,今天的代码比较短, ...

  4. Hurst exponent(赫斯特指数)代码与R/S值计算——python

    文章目录 Hurst不同值对应的图 代码 基于重标极差(R/S)分析方法基础上的赫斯特指数,是作为判断时间序列数据遵从随机游走还是有偏的随机游走过程的指标,简单来讲:就是判断"大势所趋&qu ...

  5. 前端实现网站悼念【灰色效果】几行代码轻松解决

    博主介绍

  6. 一行代码搞定信用评分模型(python)

    欢迎大家,上一篇博客[信用卡评分模型(R语言)]详细的讲解了如何开发评分卡,这片博客就不再详细介绍,为方便开发评分卡,本人根据自己经验写了一个python包,导入此包后仅需一行代码即可成功制作评分卡, ...

  7. delphi7aes加密解密与java互转_惊呆了!不改一行Java代码竟然就能轻松解决敏感信息加解密|原创

    前言 出于安全考虑,现需要将数据库的中敏感信息加密存储到数据库中,但是正常业务交互还是需要使用明文数据,所以查询返回我们还需要经过相应的解密才能返回给调用方. ❝ ps:日常开发中,我们要有一定的安全 ...

  8. 解决 IDEA 调用其他类的时候自动加上包路径和类名的情况_惊呆了!不改一行 Java 代码竟然就能轻松解决敏感信息加解密...

    前言 出于安全考虑,现需要将数据库的中敏感信息加密存储到数据库中,但是正常业务交互还是需要使用明文数据,所以查询返回我们还需要经过相应的解密才能返回给调用方. ❝ ps:日常开发中,我们要有一定的安全 ...

  9. 语义分割准确率、精确率、召回率、F1值计算代码

    语义分割准确率.精确率.召回率.F1值计算 使用提示: 需要opencv库 只需将预测结果文件路径与标签路径改一下 只针对二分类哦 (多分类可稍作修改) 代码里正类的像素值为255,可做修改! 1.精 ...

  10. 惊呆了!不改一行 Java 代码竟然就能轻松解决敏感信息加解密

    前言 出于安全考虑,现需要将数据库的中敏感信息加密存储到数据库中,但是正常业务交互还是需要使用明文数据,所以查询返回我们还需要经过相应的解密才能返回给调用方. ❝ ps:日常开发中,我们要有一定的安全 ...

最新文章

  1. Cocos2d-x3.2 场景的生命周期
  2. linux 有空格的文件夹,Linux之删除带有空格的文件
  3. c语言二进制转十进制(附完整源码)
  4. JAVA连接Excel最好用的开源项目EasyExcel,官方使用文档及.jar包下载
  5. gitlab永久设置密码
  6. python xlutils函数,python3:xlrd、xlwt、xlutils处理excel文件
  7. 2.4 万余门在线课程免费开放!大量计算机相关课程.(赶紧收藏)
  8. 魅族15无法连接计算机,还在为数据丢失而烦恼?魅族15告诉你什么叫做碎屏无忧...
  9. 【QT 数据库专辑】【02】WIN7下搭建本地MYSQL数据库02 - 建立数据库的驱动程序-QT为例-完备版
  10. c++ namespace_c++语法2、c执行命名空间输入输出
  11. 智能会议系统(14)---Linphone探索:1 . Linphone官方源码探究
  12. pythondifflib详解_python difflib模块示例讲解
  13. gstreamer的rtsp推流(笔记)
  14. java core 之 泛型
  15. 《非暴力沟通》-马歇尔·卢森堡
  16. java回复功能_Java实现评论回复功能
  17. python 实现QQ邮箱发送邮件
  18. 共享鸡皮疙瘩?庆应大学开发了一种贴身设备,利用腕带和颈带数据,分享刺激感受...
  19. PHP 对银行卡,手机号,真实姓名,身份证进行掩码加星号处理
  20. 关于三星Galaxy S8最好的(和最坏的)事情

热门文章

  1. 微信支付委托代扣的服务商模式和直连模式
  2. HDCP认证过程-收集网上的,作为记录
  3. 记录服务磁盘满了清理记录
  4. 采用esxcli命令操作esxi主机防火墙
  5. 经典企业文化书籍推荐,有了这6本书企业文化落地不再是难事
  6. C++builder应用程序设计流程
  7. 利用腾讯云轻量服务器快速搭建网站CDN
  8. 如何用ESP8266 向手机App 发送信息
  9. ASP.net开发环境配置说明手册
  10. 程序员界之行业求职黑名单!实用!