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的一些 ...
随机推荐
- 第十章、json和pickle模块
目录 第十章.json和pickle模块 一.序列化 二.json 三.pickle模块 第十章.json和pickle模块 一.序列化 把对象(变量)从内存中变成可存储或传输的过程称之为序列化, 序 ...
- ElementUI Hello World
Vue Element UI Hello World <!DOCTYPE html> <html> <head> <meta charset="ut ...
- Phoenix设置联合主键
1例如 create table test12(email varchar not null,id integer not null,name varchar not null,age integer ...
- 搜索框+ 定时器+Bug解决
定时器 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8 ...
- laravel的下载与安装
下载代码 https://github.com/laravel/laravel 在开发环境中配置好之后将根目录的 .env.example 文件改成 .env ,此文件是laravel的配置文件,将 ...
- PCB检查步骤
1.原理图先每个模块都检查一边. 2.特别注意容易接错的信号线,比如RX,TX是否接反了. 3.检查容易出错的封装和新封装.比如三极管的管脚是否与实物对应.连接器等的封装是否忘记了镜像. 4.分层查看 ...
- java 多线程,线程安全等定义
线程安全, synchronized的使用,保证方法或代码块操作的原子性.可见性和有序性 参考这篇文章: 7张图带你轻松理解Java 线程安全 public class ThreadDemo { pr ...
- zencart1.5.x版管理员密码90天到期后台进入不了的解决办法
zencart1.5.x版管理员密码90天到期后如果不想更改密码,可以直接在数据库运行以下sql语句. 将pwd_last_change_date(密码最后变换日期)2014-11-11 11:11: ...
- 51nod 1850 抽卡大赛 (十二省联考模测) DP
O(n4)O(n^4)O(n4)的DP很好想,但是过不了.来看看O(n3)O(n^3)O(n3)的把. Freopen的博客 CODE #include <cstdio> #include ...
- BZOJ 2946 [Poi2000]公共串 (二分+Hash/二分+后缀数组/后缀自动机)
求多串的最长公共字串. 法1: 二分长度+hash 传送门 法2: 二分+后缀数组 传送门 法3: 后缀自动机 拿第一个串建自动机,然后用其他串在上面匹配.每次求出SAM上每个节点的最长匹配长度后,再 ...