WOE1-Feature Selection 相关:一个计算WOE和Information Value的python工具
python信用评分卡建模(附代码,博主录制)

https://zhuanlan.zhihu.com/p/20603744参考
在机器学习的二分类问题中,WOE(Weight of Evidence)和Information Value的用来对输入变量进行编码及预测能力评估。安利一下自己写的用来计算这两个值的python工具,目前没有发现python有现成的工具,就自己写了一个。
GitHub地址:GitHub - patrick201/information_value
这两个公式的原始出处没有找到,但现在公开资料解释已经很多了,公式偷懒截图公式如下(来自引用的新浪博客),附上的引用链接有一个很好的举例说明。
IV的公式借鉴了信息熵的公式,形式上长的很像但不完全相同。IV本质上市WOE的加权和,而WOE反应的是logistic回归中odds ratio的概念ln(p1 / p0),再看其前面的权重p1 - p0也反应的是这个意思。所以可以理解成IV是对这个变量在概率优势上的能力打分。

特征变量的每个category都对应一个WOE值。比如例子引用中的年龄变量划分了4个变量,对应的有4个WOE值;再将它们加权求和之后就得到这个变量的IV值。IV值可以用来评估该变量预测能力的强弱。引用文章中给出了一个判断的标准,直接贴在下。这个标准作为一个参考吧,具体用的时候得结合手头的数据集具体分析。
Information Value Predictive Power< 0.02useless for prediction0.02 to 0.1Weak predictor0.1 to 0.3Medium predictor0.3 to 0.5Strong predictor >0.5Suspicious or too good to be true
目前就一个工具类information_value.py,里面主要就下面几个方法。需要在传入前将数据集自己做离散化,否则目前只会默认无脑的做“5等分”离散化。:)
woe -- 计算输入数据集每个变量的woe和iv,并返回所有变量对应这两个值的列表,woe是一个字典dictionary的列表,因为不同的变量有不同的category取值。
woe_single_x -- 计算单个变量的woe和iv。
woe_replace -- 将数据集中变量的category取值用其对应的woe值替换,并返回替换后的数据集。有的实验称用woe替换后训练的分类器能会更好,所以提供了这么个函数。
combined_iv -- 计算将一些变量组合后对应的woe及iv值。这个函数主要是想服务于一些需要大量迭代的变量选择技术,比如有的文献提到用GA或PSO算法来选择优化的变量组合。而如果将iv计算来作为迭代时的“fit function”,计算量是非常小的。但是如果组合的变量太多的话,组合起来的category类别会很多,影响使用,所以合适组合的变量数量需要根据手头的数据量及分布情况来试验。
试验了一个scikit learn自带的数据集(当然自带的这个相对容易分类),在“评估变量重要性”这个方向上与随机森林方法进行了比较,结果如下两个图。可以看到前几个“很重要”的变量,以及最后几个“很不重要”的变量,根据IV评估的结果与RF给出的结果是很相近的。但是IV的计算量要比训练一个随机森林模型小多了。当然并不是每个手头的数据都能符合这样的结果,需要具体试验,但至少多了一个选择可以供我们参考。如果IV的结果能近似达到RF的结果,在大规模进行计算的时候也是一个挺吸引人的备选项。
随机森林中队变量重要性计算的思路很有意思,对某个自变量加随机扰动bump,然后看预测误差前后变化有多大。越大的认为这个变量对结果越有影响,也就是越重要。这与以前在银行工作时pricing框架下计算奇异衍生品组合的greeks思路很像,后者也是对影响衍生品的风险因子进行bump看组合的pv(present value)变化多少。实用又神奇的思路。
根据使用的情况我会尽量不断调整修改代码,欢迎大家试用并轻拍。Feature Selection是个巨大的坑,但希望我的小身板也能做些力所能及的。:)


python风控建模实战lendingClub(博主录制,catboost,lightgbm建模,2K超清分辨率)
https://study.163.com/course/courseMain.htm?courseId=1005988013&share=2&shareId=400000000398149

微信扫二维码,免费学习更多python资源

WOE1-Feature Selection 相关:一个计算WOE和Information Value的python工具的更多相关文章
- 机器学习-特征选择 Feature Selection 研究报告
原文:http://www.cnblogs.com/xbinworld/archive/2012/11/27/2791504.html 机器学习-特征选择 Feature Selection 研究报告 ...
- [Feature] Feature selection
Ref: 1.13. Feature selection Ref: 1.13. 特征选择(Feature selection) 大纲列表 3.1 Filter 3.1.1 方差选择法 3.1.2 相关 ...
- 特征选择与稀疏学习(Feature Selection and Sparse Learning)
本博客是针对周志华教授所著<机器学习>的"第11章 特征选择与稀疏学习"部分内容的学习笔记. 在实际使用机器学习算法的过程中,往往在特征选择这一块是一个比较让人模棱两可 ...
- 【转】[特征选择] An Introduction to Feature Selection 翻译
中文原文链接:http://www.cnblogs.com/AHappyCat/p/5318042.html 英文原文链接: An Introduction to Feature Selection ...
- 10-3[RF] feature selection
main idea: 计算每一个feature的重要性,选取重要性前k的feature: 衡量一个feature重要的方式:如果一个feature重要,则在这个feature上加上noise,会对最后 ...
- The Practical Importance of Feature Selection(变量筛选重要性)
python机器学习-乳腺癌细胞挖掘(博主亲自录制视频) https://study.163.com/course/introduction.htm?courseId=1005269003&u ...
- [Feature] Feature selection - Embedded topic
基于惩罚项的特征选择法 一.直接对特征筛选 Ref: 1.13.4. 使用SelectFromModel选择特征(Feature selection using SelectFromModel) 通过 ...
- Feature Engineering and Feature Selection
首先,弄清楚三个相似但是不同的任务: feature extraction and feature engineering: 将原始数据转换为特征,以适合建模. feature transformat ...
- 机器学习-特征工程-Feature generation 和 Feature selection
概述:上节咱们说了特征工程是机器学习的一个核心内容.然后咱们已经学习了特征工程中的基础内容,分别是missing value handling和categorical data encoding的一些 ...
随机推荐
- 一步步创建第一个Vue项目
写在了GitHub https://github.com/TaoPanfeng/vue-cms 1 初始化 创建一个文件夹 vue-cms 在vue-cms目录下创建文件 package.json 在 ...
- 网络初级篇之VLAN(原理)
一.早期网络的问题 1.若某时刻有多个节点同时试图发送数据,极易产生冲突域,这样使得网络传输效率大大降低. 2.从一节点发送的数据都会被送到各个节点,极易形成广播域,这样会使得产生太多的广播流量而耗费 ...
- 解决myeclipse没有代码提示的问题
今天和室友安装了一样的myeclipse版本,结果室友的自动提示功能有,我的输入“.”后却不能提示,这对我们敲代码简直来说是一个折磨,不能自动提示,本来还以为是系统问题,一个是win7,一个是win1 ...
- Redis08-击穿&穿透&雪崩&spring data redis
一.常见概念 击穿: 概念:redis作为缓存,设置了key的过期时间,key在过期的时候刚好出现并发访问,直接击穿redis,访问数据库 解决方案:使用setnx() ->相当于一把锁,设置的 ...
- sum(n,m)的解法
给出两个整数n和m,你应该计算从n到m的所有整数的和.换句话说,你应该计算: SUM(n,m)= n +(n + 1)+(n + 2)+ ... +(m-1)+ m 方法1. 方法2.
- Android异常与性能优化相关面试问题-OOM异常面试问题详解
什么是OOM? 当前占用的内存加上我们申请的内存资源超过了Dalvik虚拟机的最大内存限制就会抛出Out Of Memory异常. 一些容易混淆的概念: 内存溢出:指的就是OOM. 内存抖动:是短时间 ...
- 2019.8.30 记录一个Swiper的使用
导入 flutter_swiper: ^1.1.6 引入 import 'package:flutter_screenutil/flutter_screenutil.dart'; 已下 ...
- Golang GC 垃圾回收机制详解
摘要 在实际使用 go 语言的过程中,碰到了一些看似奇怪的内存占用现象,于是决定对go语言的垃圾回收模型进行一些研究.本文对研究的结果进行一下总结. 什么是垃圾回收? 曾几何时,内存管理是程序员开发应 ...
- 【JS】类型检测
本文首发于我的个人博客 : http://cherryblog.site/ 前言 js 中的类型检测也是很重要的一部分,所以说这篇文章我们就来讲一下怎么对 JavaScript 中的基本数据类型进行检 ...
- spring-cloud /pause 平滑升级 踩坑记录
0.客户端添加依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId& ...