1.数据分箱

# 首先通过如下代码构造数据:
import pandas as pd
data = pd.DataFrame([[22,1],[25,1],[20,0],[35,0],[32,1],[38,0],[50,0],[46,1]], columns=['年龄', '是否违约'])
data

# 有了数据之后,根据“年龄”这一特征变量进行数据分箱,代码如下:
data_cut = pd.cut(data['年龄'], 3)
data_cut

2.统计各个分箱样本总数、坏样本数和好样本数

# 统计总客户数
cut_group_all = data['是否违约'].groupby(data_cut).count()
# 统计违约客户
cut_y = data['是否违约'].groupby(data_cut).sum()
# 统计未违约客户
cut_n = cut_group_all - cut_y
# 这里展示下cut_group_all的结果,如下所示:
cut_group_all

# 通过2.2.1节相关知识点将cut_group_all、cut_y、cut_n进行汇总,代码如下,这里我们将违约客户命名为“坏样本”,非违约客户命名为“好样本”。
df = pd.DataFrame()  # 创建一个空DataFrame用来汇总数据
df['总数'] = cut_group_all
df['坏样本'] = cut_y
df['好样本'] = cut_n
df

3.统计各分箱中坏样本比率和好样本比率

# 计算坏样本%和好样本%
df['坏样本%'] = df['坏样本'] / df['坏样本'].sum()
df['好样本%'] = df['好样本'] / df['好样本'].sum()
df

4.计算WOE值

import numpy as np
df['WOE'] = np.log(df['坏样本%'] / df['好样本%'])
df

在实际应用中,我们不希望WOE值出现无穷大(这样会导致之后计算的IV值也变为无穷大,丧失了IV值的意义),但是有的时候可能由于数据特殊性及分箱的原因,它还是出现了WOE值为无穷大的情况(某个分箱中只含有一种类别的数据),此时解决办法是当WOE值为无穷大时,将它替换为0,代码如下:

df = df.replace({'WOE': {np.inf: 0, -np.inf: 0}})

5.计算IV值

df['IV'] = df['WOE'] * (df['坏样本%'] - df['好样本%'])
df

iv = df['IV'].sum()
print(iv)

整理上面计算WOE值和IV值的内容,完整代码如下所示:

 1.构造数据
import pandas as pd
data = pd.DataFrame([[22,1],[25,1],[20,0],[35,0],[32,1],[38,0],[50,0],[46,1]], columns=['年龄', '是否违约'])# 2.数据分箱
data_cut = pd.cut(data['年龄'], 3)# 3.统计各个分箱样本总数、坏样本数和好样本数并汇总数据
# 统计总客户数
cut_group_all = data['是否违约'].groupby(data_cut).count()
# 统计违约客户
cut_y = data['是否违约'].groupby(data_cut).sum()
# 统计未违约客户
cut_n = cut_group_all - cut_y
# 汇总基础数据
df = pd.DataFrame()  # 创建一个空DataFrame用来汇总数据
df['总数'] = cut_group_all
df['坏样本'] = cut_y
df['好样本'] = cut_n# 4.统计坏样本%和好样本%
df['坏样本%'] = df['坏样本'] / df['坏样本'].sum()
df['好样本%'] = df['好样本'] / df['好样本'].sum()# 5.计算WOE值
import numpy as np
df['WOE'] = np.log(df['坏样本%'] / df['好样本%'])
df = df.replace({'WOE': {np.inf: 0, -np.inf: 0}})  # 替换可能存在的无穷大# 6.计算各个分箱的IV值
df['IV'] = df['WOE'] * (df['坏样本%'] - df['好样本%'])# 7.汇总各个分箱的IV值,获得特征变量的IV值
iv = df['IV'].sum()
print(iv)

特征筛选:WOE值与IV值相关推荐

  1. 学习记录633@python特征筛选之WOE值与IV值

    在使用逻辑回归.决策树等模型算法构建分类模型时,经常需要对特征变量进行筛选.因为有时可能会获得100多个候选特征变量,通常不会直接把这些特征变量放到模型中去进行拟合训练,而是从这些特征变量中挑选一些放 ...

  2. 分计算iv值_筛选变量的指标—IV值

    这一期咱们聊聊筛选变量的指标--IV值. 计算公式如下: 看公式有没有很熟悉,大家没有看错,其中一部分就是WOE的计算公式.区别就在于WOE是对一个变量的每个分组的计算,IV值是对一个变量的统计指标. ...

  3. python评分卡建模-实现WOE编码及IV值计算

    在往期的文章中,小编多次写到过WOE和IV值的内容,也贴过相关的SAS代码,感兴趣的同学可以翻阅历史消息.这篇文章就不多介绍WOE及IV值的概念,主要讲讲怎么用python实现WOE编码和IV值的计算 ...

  4. python如何确定拐点_经典评分卡模型python实现(mdlp离散化,woe拐点判断以及iv值筛选变量)...

    美丽的周三早上,被专利问题所困扰,完全写不进去,换个思维决定把之前做过的评分卡模型整体流程逻辑记录在知乎上,希望能给大家提供帮助. 前言: 评分卡模型经常被用于银行,电信等领域,作为识别用户欺诈概率或 ...

  5. 分计算iv值_机器学习-变量筛选之IV值和WOE

    1.IV值的用途 IV,即信息价值(Information Value),也称信息量. 目前还只是在对LR建模时用到过这两个关键指标,当我们使用决策树时可以通过限制树的深度间接筛选掉一些对于当前任务贡 ...

  6. R语言基于信息价值IV(Information Value)和证据权重WOE(Weights of Evidence)进行特征筛选(feature selection)

    R语言基于信息价值IV(Information Value)和证据权重WOE(Weights of Evidence)进行特征筛选(feature selection) 对一个学习任务来说,给定属性集 ...

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

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

  8. woe分析_用IV和WOE来做特征筛选

    什么是变量的离散化 变量的离散化就是只抽取出一个变量,分析变量当中的分组与标签的分布情况. 比如对于某个活动客户有响应和不响应的情况(这里的响应与否就是我们的标签),有多个变量: 最近一个月是否有购买 ...

  9. python最优分箱计算iv值_Python计算woe和iv值

    计算逻辑 先计算WOE值,再计算IV值. 其中Y或N分别是YES,NO,反应在因变量中,就是1和0. Yi是第i组中1的个数,YT是所有(Total)为1的个数. Ni是第i组中0的个数,NT是所有( ...

  10. ML之FE:金融风控—基于预处理(PSI+标签编码+文本型抽数字+缺失值RF模型拟合填充)+多种筛选指标(PCA/IV值/Gini/熵/丰富度)利用CatBoost实现贷款违约二分类预测案例之详细攻略

    ML之FE:金融风控-基于预处理(PSI+标签编码+文本型抽数字+缺失值RF模型拟合填充)+多种筛选指标(PCA/IV值/Gini/熵/丰富度)利用CatBoost实现贷款违约二分类预测案例之详细攻略 ...

最新文章

  1. Spring - Java/J2EE Application Framework 应用框架 第 5 章 Spring AOP: Spring之面向方面编程G
  2. python字典删除元素_Python简单遍历字典及删除元素的方法
  3. 分布式文件系统—HDFS—常见面试题
  4. MySQL常用存储引擎之MyISAM
  5. smartgwt_高级SmartGWT教程,第2部分
  6. 25q64存储多个数据_一篇文章看懂,存储虚拟化在不同用例中的实践与优势
  7. druid dubbo 生产者_dubbo项目扩展druid sql监控
  8. 周鸿祎谈华为鸿蒙系统;百度回应“用搜索引擎填高考志愿”;腾讯首次全面公开开源路线图 | 极客头条...
  9. css 百分比继承关系的探讨
  10. php数据库随机选择,php – 在MySQL数据库中选择两个随机行
  11. 高德地图如何取消订单_一文教你如何爬取高德地图
  12. python ks值计算_风控模型中的K-S理解以及python实现
  13. python学习(判断某年某月某日)
  14. (3).Mybatis动态sql的使用
  15. wxid 微信号设置隐私 微信号搜不到 恢复好友总结
  16. 三、Linux文件管理
  17. 微信小程序仿网易云音乐(使用云开发,提供源码)
  18. 奥利给 之 【优学院自定义速度】
  19. CC2530关于端口中断常用的寄存器
  20. 我们自己的操作系统第二弹: Ubuntu Kylin(优麒麟)安装教程

热门文章

  1. Win10没有Realtek高清晰音频管理器怎么办?
  2. c语言二级选择题APP,C语言二级题库
  3. 功能性能服务器图标,SQL Server服务器的图标及其功能
  4. 【PotPlayer】敲好用的本地视频播放器
  5. C语言运算符都有那些?
  6. CMSIS-DSP lib 矩阵运算示例和源码
  7. python核心pdf_Python核心编程(第二版)PDF
  8. qt -- QTableView
  9. 行测备考丨易混词傻傻分不清?大神来拯救你!
  10. 国考计算机怎么评分标准,国考行测的评分标准