1 IV的用途

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

我们在用逻辑回归、决策树等模型方法构建分类模型时,经常需要对自变量进行筛选。比如我们有200个候选自变量,通常情况下,不会直接把200个变量直接放到模型中去进行拟合训练,而是会用一些方法,从这200个自变量中挑选一些出来,放进模型,形成入模变量列表。那么我们怎么去挑选入模变量呢?

挑选入模变量过程是个比较复杂的过程,需要考虑的因素很多,比如:变量的预测能力,变量之间的相关性,变量的简单性(容易生成和使用),变量的强壮性(不容易被绕过),变量在业务上的可解释性(被挑战时可以解释的通)等等。但是,其中最主要和最直接的衡量标准是变量的预测能力。

“变量的预测能力”这个说法很笼统,很主观,非量化,在筛选变量的时候我们总不能说:“我觉得这个变量预测能力很强,所以他要进入模型”吧?我们需要一些具体的量化指标来衡量每自变量的预测能力,并根据这些量化指标的大小,来确定哪些变量进入模型。IV就是这样一种指标,他可以用来衡量自变量的预测能力。类似的指标还有信息增益、基尼系数等等。

2 对IV的直观理解

从直观逻辑上大体可以这样理解“用IV去衡量变量预测能力”这件事情:我们假设在一个分类问题中,目标变量的类别有两类:Y1,Y2。对于一个待预测的个体A,要判断A属于Y1还是Y2,我们是需要一定的信息的,假设这个信息总量是I,而这些所需要的信息,就蕴含在所有的自变量C1,C2,C3,……,Cn中,那么,对于其中的一个变量Ci来说,其蕴含的信息越多,那么它对于判断A属于Y1还是Y2的贡献就越大,Ci的信息价值就越大,Ci的IV就越大,它就越应该进入到入模变量列表中。

3 IV的计算

前面我们从感性角度和逻辑层面对IV进行了解释和描述,那么回到数学层面,对于一个待评估变量,他的IV值究竟如何计算呢?为了介绍IV的计算方法,我们首先需要认识和理解另一个概念——WOE,因为IV的计算是以WOE为基础的。

3.1 WOE

WOE的全称是“Weight of Evidence”,即证据权重。WOE是对原始自变量的一种编码形式。

要对一个变量进行WOE编码,需要首先把这个变量进行分组处理(也叫离散化、分箱等等,说的都是一个意思)。分组后,对于第i组,WOE的计算公式如下:

WOE (weight of Evidence) 字面意思证据权重,对分箱后的每组进行计算。假设 good 为好客户(未 违约),bad 为坏客户(违约)。

#goodi 表示每组中标签为 good 的数量,#goodT 为 good 的总数量,bad 同理。

3.2 IV

IV (information value) 衡量的是某一个变量的信息量,公式如下:

N 为分组的组数,IV 可用来表示一个变量的预测能力。

 IV                      预测能力
<0.03 无预测能力
0.03-0.09
0.1-0.29
0.3-0.49
>=0.5 极高且可疑

可根据 IV 值来调整分箱结构并重新计算 WOE 和 IV。但并不完全是 IV 值越大越好,还需要考虑 分组数量合适,并且当 IV 值大于 0.5 时,我们需要对这个特征打个疑问,因为它过于太好而显得不够 真实。通常我们会选择 IV 值在 0.1~0.5 这个范围的特征。多数时候分箱都需要手动做一些调整。

python代码如下:

import numpy as np
import pandas as pd
import scipy
import scipy.stats as stdef auto_bin(DF, X, Y, n=5, iv=True, detail=False,q=20):"""自动最优分箱函数,基于卡方检验的分箱参数:DF: DataFrame 数据框X: 需要分箱的列名Y: 分箱数据对应的标签 Y 列名n: 保留分箱个数iv: 是否输出执行过程中的 IV 值detail: 是否输出合并的细节信息q: 初始分箱的个数区间为前开后闭 (]返回值:"""# DF = model_data# X = "age"# Y = "SeriousDlqin2yrs"
DF = DF[[X,Y]].copy()# 按照等频对需要分箱的列进行分箱DF["qcut"],bins = pd.qcut(DF[X], retbins=True, q=q, duplicates="drop")# 统计每个分段 0,1的数量coount_y0 = DF.loc[DF[Y]==0].groupby(by="qcut")[Y].count()coount_y1 = DF.loc[DF[Y]==1].groupby(by="qcut")[Y].count()# num_bins值分别为每个区间的上界,下界,0的频次,1的频次num_bins = [*zip(bins,bins[1:],coount_y0,coount_y1)]# 定义计算 woe 的函数def get_woe(num_bins):# 通过 num_bins 数据计算 woecolumns = ["min","max","count_0","count_1"]df = pd.DataFrame(num_bins,columns=columns)df["total"] = df.count_0 + df.count_1df["percentage"] = df.total / df.total.sum()df["bad_rate"] = df.count_1 / df.totaldf["woe"] = np.log((df.count_0/df.count_0.sum()) /(df.count_1/df.count_1.sum()))return df# 创建计算 IV 值函数def get_iv(bins_df):rate = ((bins_df.count_0/bins_df.count_0.sum()) -(bins_df.count_1/bins_df.count_1.sum()))IV = np.sum(rate * bins_df.woe)return IV# 确保每个分组的数据都包含有 0 和 1for i in range(20): # 初始分组不会超过20# 如果是第一个组没有 0 或 1,向后合并if 0 in num_bins[0][2:]:num_bins[0:2] = [(num_bins[0][0],num_bins[1][1],num_bins[0][2]+num_bins[1][2],num_bins[0][3]+num_bins[1][3])]continue# 其他组出现没有 0 或 1,向前合并for i in range(len(num_bins)):if 0 in num_bins[i][2:]:num_bins[i-1:i+1] = [(num_bins[i-1][0],num_bins[i][1],num_bins[i-1][2]+num_bins[i][2],num_bins[i-1][3]+num_bins[i][3])]break# 循环结束都没有出现则提前结束外圈循环else:break# 重复执行循环至分箱保留 n 组:while len(num_bins) > n:# 获取 num_bins 两两之间的卡方检验的置信度(或卡方值)pvs = []for i in range(len(num_bins)-1):x1 = num_bins[i][2:]x2 = num_bins[i+1][2:]# 0 返回 chi2 值,1 返回 p 值。pv = st.chi2_contingency([x1,x2])[1]# chi2 = scipy.stats.chi2_contingency([x1,x2])[0]
            pvs.append(pv)# 通过 p 值进行处理。合并 p 值最大的两组i = pvs.index(max(pvs))num_bins[i:i+2] = [(num_bins[i][0],num_bins[i+1][1],num_bins[i][2]+num_bins[i+1][2],num_bins[i][3]+num_bins[i+1][3])]# 打印合并后的分箱信息bins_df = get_woe(num_bins)if iv:print(f"{X} 分{len(num_bins):2}组 IV 值: ",get_iv(bins_df))if detail:print(bins_df)# print("\n".join(map(lambda x:f"{x:.16f}",pvs)))# 返回分组后的信息return get_woe(num_bins) #, get_iv(bins_df)

转载于:https://www.cnblogs.com/LUOyaXIONG/p/10935314.html

关于特征筛选中的IV值相关推荐

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

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

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

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

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

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

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

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

  5. 特征工程 | 信息价值IV与群体稳定性PSI

    特征工程 | 信息价值IV与群体稳定性PSI 关键词:特征筛选,信息量,稳定性 文章目录 特征工程 | 信息价值IV与群体稳定性PSI 前言 一.信息价值IV 1.1 使用条件 1.2 评价基准 1. ...

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

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

  7. Python 批量计算变量iv值

    import pandas as pd import numpy as np from sklearn.tree import DecisionTreeClassifier data=pd.read_ ...

  8. 客户逾期贷款预测[8] - 特征选择(iv值、随机森林)

    任务 分别用IV值和随机森林挑选特征,再构建模型,进行模型评估 1 利用iv值挑选特征 这次暂时先用学长计算好的iv值挑选特征,之后再尝试自己计算iv值.选择iv在0.1-0.5之间的特征. impo ...

  9. [开发笔记]-jQuery获取radio选中项的值

    <title></title><script src="js/jquery-1.7.2.min.js"></script><s ...

  10. Javascript获取select下拉框选中的的值以及索引

    现在有一id=test的下拉框,怎么拿到选中的那个值呢? 分别使用javascript原生的方法和jquery方法 <select id="test"  name=" ...

最新文章

  1. 随机森林及重要参数解析
  2. Notepad2替代系统自带的记事本
  3. jQuery Validate 验证,校验规则写在控件中的具体例子
  4. C语言 有符号字符型输出 面试题
  5. HDU - 6183 Color it 2017广西邀请赛(线段树)
  6. 软件制胜之道精彩观点聚合
  7. django调用python脚本返回_Django使用HttpResponse返回图片并显示的方法
  8. 深入浅出MySQL学习笔记之锁问题
  9. 怎样关闭vivo的HTML查看器,vivo安全模式在哪儿关闭?
  10. 二叉树非递归遍历算法
  11. google sdk speech-to-text(谷歌语音转文本、谷歌语音转字幕)
  12. JAVA菜鸟驿站快递分发系统计算机毕业设计Mybatis+系统+数据库+调试部署
  13. 【Mybatis从入门到实战教程】第一章 Mybatis 入门
  14. html边框显示长短调整,CSS之border边框长度控制
  15. Python实例篇:这样操作PDF文件一点都不枯燥了
  16. snat与dnat的区别
  17. Linux内核守护者来了
  18. 如何用r语言分析数据
  19. 近期风靡互联网的Deep Dream人工智能图像识别软件
  20. 议程速递 | 7月27日分论坛议程一览

热门文章

  1. adb与java端口冲突,如何解决adb devices 端口被占用的问题zz
  2. maven源码阅读之一(Guice介绍)
  3. 需求文档:自营电商后台管理系统
  4. h计算机二级基础知识题库,2020计算机二级Office考试题库真题
  5. UE4教程-搭建别墅
  6. as(四级考试频度很大的几个用法)
  7. BMI160低功耗学习
  8. K-近邻算法学习总结
  9. 圣经与超级计算机,圣经创世纪里的时间概念和爱因斯坦相对论
  10. 学习spss的心得体会