计算逻辑

先计算WOE值,再计算IV值。

其中Y或N分别是YES,NO,反应在因变量中,就是1和0。

Yi是第i组中1的个数,YT是所有(Total)为1的个数。

Ni是第i组中0的个数,NT是所有(Total)为0的个数。

举例

数据如下,x分别取1-9,y对应是1和0。

x,y

1,1

2,1

3,0

4,1

5,1

6,0

7,0

8,0

9,1

如果对于x这9行数据分成三组:

第0组:x=1,2,3

第1组:x=4,5,6

第2组:x=7,8,9

则第0组的WEO值计算过程如下。

Y0=2,因为分组内当x=1,2的时候y是1,共两个1,则是2.

YT=5,因为y这一列总共有5个1。

N0=1,因为分组内当x=3的时候y是0,共1个1,则是1.

NT=4,因为y这一列共有4个0.

WOE_0

=ln((2/5)/(1/4))

=ln(0.4/0.25)

=ln(1.6)

=0.47

有了WOE,开始计算IV:

IV_0

=(2/5-1/4)*WOE_0

=0.15*0.47

=0.0705

于是可计算出IV_0=0.0705。 同理可计算出IV_1= 0.070501, IV_2=0.274887。 则该X的iv即 iv=iv_0+iv_2+iv_3=0.415888

Python代码

import pandas as pd

import numpy as np

def iv_woe(data:pd.DataFrame, target:str, bins:int = 10) -> (pd.DataFrame, pd.DataFrame):

"""计算woe和IV值

参数:

- data: dataframe数据

- target: y列的名称

- bins: 分箱数(默认是10)

"""

newDF,woeDF = pd.DataFrame(), pd.DataFrame()

cols = data.columns

for ivars in cols[~cols.isin([target])]:

# 数据类型在bifc中、且数据>10则分箱

if (data[ivars].dtype.kind in 'bifc') and (len(np.unique(data[ivars]))>10):

binned_x = pd.qcut(data[ivars], bins, duplicates='drop')

d0 = pd.DataFrame({'x': binned_x, 'y': data[target]})

else:

d0 = pd.DataFrame({'x': data[ivars], 'y': data[target]})

d = d0.groupby("x", as_index=False).agg({"y": ["count", "sum"]})

d.columns = ['Cutoff', 'N', 'Events']

d['% of Events'] = np.maximum(d['Events'], 0.5) / d['Events'].sum()

d['Non-Events'] = d['N'] - d['Events']

d['% of Non-Events'] = np.maximum(d['Non-Events'], 0.5) / d['Non-Events'].sum()

d['WoE'] = np.log(d['% of Events']/d['% of Non-Events'])

d['IV'] = d['WoE'] * (d['% of Events'] - d['% of Non-Events'])

d.insert(loc=0, column='Variable', value=ivars)

print("Information value of " + ivars + " is " + str(round(d['IV'].sum(),6)))

temp =pd.DataFrame({"Variable" : [ivars], "IV" : [d['IV'].sum()]}, columns = ["Variable", "IV"])

newDF=pd.concat([newDF,temp], axis=0)

woeDF=pd.concat([woeDF,d], axis=0)

return newDF, woeDF

调用

mydata = pd.read_csv("./data.csv",encoding='utf8')

newDF,woeDF=iv_woe(mydata,'y')

即可得到。注意,此处默认10组,上例中的x值是0-10,不足以分10组,则每个值为一组。注意其中的if判断语句

python最优分箱计算iv值_Python计算woe和iv值相关推荐

  1. python最优分箱计算iv值_GitHub - zhaoxingfeng/WOE: Weight of Evidence,基于iv值最大思想求最优分箱...

    WOE WOE Transformation常用于信用风险评分卡(Credit Risk Scorecard)模型中,采用分箱的方式对原始特征进行非线性映射.常见的分箱方法有等宽分箱.等频分箱.最优分 ...

  2. 特征工程之特征分箱(决策树分箱、卡方分箱、bestks以及评价标准WOE和IV)

    特征工程之特征分箱:决策树分箱.卡方分箱.bestks以及评价标准 1.WOE和IV 2.无监督分箱 2.1等频分箱 2.2等距分箱 3.有监督分箱 3.1决策树分箱 3.2best-ks分箱 3.3 ...

  3. python多项分时求和_python实现连续变量最优分箱详解--CART算法

    关于变量分箱主要分为两大类:有监督型和无监督型 对应的分箱方法: A. 无监督:(1) 等宽 (2) 等频 (3) 聚类 B. 有监督:(1) 卡方分箱法(ChiMerge) (2) ID3.C4.5 ...

  4. python实现连续变量最优分箱详解--CART算法

    今天小编就为大家分享一篇python实现连续变量最优分箱详解–CART算法,具有很好的参考价值,希望对大家有所帮助.一起跟随小编过来看看吧 关于变量分箱主要分为两大类:有监督型和无监督型 对应的分箱方 ...

  5. python 等深分箱 等宽分箱结合二分箱的数据分析

    python 等深分箱 等宽分箱结合二分箱的数据分析 等深分箱等宽分箱概述 Python里可以通过pcut(等深分箱即每箱的样本量基本一致)和cut(等宽分箱即样本量之间有相同的宽度)对样本进行分箱. ...

  6. python 数据处理之分箱操作

    什么是分箱? 简单点说就是将不同的东西,按照特定的条件放到一个指定容器里,比如水果 把绿色的放一个篮子里,红色一个篮子等等,这个篮子就是箱,而水果就是数据 颜色就是条件 什么样式的数据要进行分箱 数据 ...

  7. python 卡方分箱算法_特征工程 - 分箱

    卡方分箱 python自帶分箱函數  --  無法實現對分類型數據的分箱,可借助卡方分箱算法實現 import numpy as np import pandas as pd data = np.ra ...

  8. python 卡方分箱算法_python实现二分类的卡方分箱示例

    解决的问题: 1.实现了二分类的卡方分箱: 2.实现了最大分组限定停止条件,和最小阈值限定停止条件: 问题,还不太清楚,后续补充. 1.自由度k,如何来确定,卡方阈值的自由度为 分箱数-1,显著性水平 ...

  9. python卡方分箱_Python评分卡建模—卡方分箱

    为服从自由度为k的卡方分布,记作: 或者记作 . 二.卡方检验 χ2检验是以χ2分布为基础的一种假设检验方法,主要用于分类变量之间的独立性检验. 其基本思想是根据样本数据推断总体的分布与期望分布是否有 ...

最新文章

  1. 二叉树代码我写得很乱!!!整理一下思路
  2. Serverless 初体验:快速开发与部署一个Hello World(Java版)
  3. 神奇的 SQL 之擦肩而过 → 真的用到索引了吗
  4. linux vscode设置在集成终端中打开
  5. 如何获得所有CSDN勋章的获取方式?
  6. Java设计模式之策略设计模式
  7. leetcode-深度优先搜索
  8. 面向 Android* Jelly Bean 4.3 的英特尔® 凌动™ x86 映像安装指南 - 推荐
  9. ASP.NET 防止F5刷新页面按钮重复提交
  10. hibernate 的SessionFactory的getCurrentSession 与 openSession() 的区别
  11. VBA学习练习-将多个单元格内容合并
  12. 占书明:win7系统微信突然提示“微信运行错误:当前版本需在windows xp sp3以上系统运行,请安装可用版本或升级系统。点击确认下载安装可用版本”。
  13. 2022年终极NFT课程
  14. C语言 实现十进制转二十六进制
  15. 固态SSD的认知与保养
  16. tomcat 日志禁用
  17. android快速填表,Android 11将自动填表功能整合到键盘输入建议中
  18. 2019牛客暑期多校训练营(第一场)(B、C、E、F、H、I题待补、J)
  19. mybatis-plus 读写空间数据 geometry类型
  20. ImageSelector

热门文章

  1. Oxford Nanopore sequencing, hybrid error correction, and de novo assembly of a eukaryotic genome
  2. 语义分割--Learning Object Interactions and Descriptions for Semantic Image Segmentation
  3. Dynamic Network Surgery for Efficient DNNs
  4. Python的enumerate()的坑
  5. LeetCode 137. Single Number II--三次异或消除相同的数--C++,Python解法
  6. Chrome与chromedriver版本对应
  7. java用关键字 指明继承关系_【填空题】java中用关键字 指明继承关系、用关键字 指明接口实现。...
  8. mini mysql_mini
  9. c语言 简单编程题,c语言简单编程练习题.doc
  10. 粒子群(pso)算法详解matlab代码,粒子群(pso)算法详解matlab代码