【R包】woeBinning:woe分箱包
笔者邀请您,先思考:
1 WOE和IV怎么计算?
2 如何对变量做分箱?
本文介绍woe分箱包-woeBinning,利用该包实现自动分箱和计算变量的IV值。
woeBinning包介绍
woeBinning包使数字变量和因子相对于二元目标变量的分箱过程自动化。 此外,它可视化已实现的分箱解决方案,可以表格化和部署应用到新的数据集。所有函数都可以与单个变量或整个数据框一起使用。
woeBinning函数
woe.binning对数值变量或者因子变量生成一个受监督的细分和粗分类。
woe.tree.binning对数值变量和因子变量生成监督树状分割。
woe.binning.plot对woe.binning或者woe.tree.binning的分箱解决方案进行数据可视化。
woe.binning.table对woe.binning或woe.tree.binning的分箱解决方案的结果进行表格化保存。
woe.binning.deploy将把woe.binning或woe.tree.binning生成并保存的分箱解决方案部署和应用到(新)数据中。
woe和IV计算逻辑

woe 计算

IV计算

woe-iv计算例子

思考:上述表里面的值是如何计算的?
woeBining包应用举例
# 加载woeBinning包,若是没有安装,请先安装
library(woeBinning)
# 加载dplyr包
library(dplyr)
# 使用包自带的数据集germancredit
data("germancredit")
# 数据集检视
print(dim(germancredit))
print(head(germancredit))
# 数据集部分变量数据获取
# 定性变量和定量变量
df <- germancredit[, c('creditability', 'credit.amount', 'duration.in.month', 'savings.account.and.bonds', 'purpose')]
print(head(df))
# 自动分箱操作
binning <- woe.binning(df, 'creditability', df)
# 自动分箱后结果可视化
woe.binning.plot(binning)
变量集的woe值分布情况可视化

变量集的IV值分布情况可视化

结论:
变量duration.in.month的IV值最高,为0.254
基于iv值应用的经验法则,总结如下:
-
1) < 0.02 非常弱 不纳入到模型变量候选集
-
2)[0.02, 0.1) 很弱 针对实际情况决定是否纳入模型变量候选集
-
3)[0.1, 0.3) 一般 纳入模型变量候选集
-
4)[0.3, 0.5) 强 纳入模型变量候选集
-
5)>= 0.5 很强,具有可疑性,要进一步调查
# 分箱解决方案表格化存储
tabulate.binning <- woe.binning.table(binning)
tabulate.binning
# 分箱解决方案部署和应用到新的数据集
df.with.binned.vars.added <- woe.binning.deploy(
df,
binning,
add.woe.or.dum.var = 'woe'
)
View(df.with.binned.vars.added)
woe.df <- df.with.binned.vars.added %>% dplyr::select(contains("woe."))
View(head(woe.df))

完整代码
#加载R包
library(woeBinning)
library(dplyr)
#加载数据集
data("germancredit")
print(dim(germancredit))
print(head(germancredit))
# 部分变量数据获取
# 定性变量和定量变量
df <- germancredit[, c('creditability', 'credit.amount', 'duration.in.month',
'savings.account.and.bonds', 'purpose')]
print(head(df))
# 自动分箱操作
binning <- woe.binning(df, 'creditability', df)
# 自动分箱后结果可视化
woe.binning.plot(binning)
tabulate.binning <- woe.binning.table(binning)
View(tabulate.binning)
df.with.binned.vars.added <- woe.binning.deploy(
df,
binning,
add.woe.or.dum.var = 'woe'
)
View(df.with.binned.vars.added)
woe.df <- df.with.binned.vars.added %>% dplyr::select(contains("woe."))
View(head(woe.df))
完整代码也可以见GitHub(点击阅读原文,进入GitHub链接)。
版权声明:作者保留权利,严禁修改,转载请注明原文链接。
数据人网是数据人学习、交流和分享的平台http://shujuren.org 。专注于从数据中学习到有用知识。
平台的理念:人人投稿,知识共享;人人分析,洞见驱动;智慧聚合,普惠人人。
您在数据人网平台,可以1)学习数据知识;2)创建数据博客;3)认识数据朋友;4)寻找数据工作;5)找到其它与数据相关的干货。
我们努力坚持做原创,聚合和分享优质的省时的数据知识!
我们都是数据人,数据是有价值的,坚定不移地实现从数据到商业价值的转换!
加入数据人圈子或者商务合作,请添加笔者微信。

点击阅读原文,进入数据人网,获取数据知识。
公众号推荐:
链达君,专注于分享区块链内容。

脚印英语,专注于分享英语口语内容。

数据工作
我们公司大数据风控中心部门诚招:
1 风险分析和建模工程师(信用评分模型,反欺诈模型,额度模型|熟练常用ML算法|熟练使用R或者Python)
2 数据开发工程师(大数据平台开发,数据采集,数据预处理)
3 爬虫工程师(掌握爬虫技术,掌握反爬策略)
4 数据分析或者建模实习生(研究生学历|统计学,数学,计算机专业|熟悉R或者Python|有金融数据项目可以加分)
工作地点:深圳大冲商务中心
薪资待遇:面议
感兴趣者,请加小编微信。
请关注“恒诺新知”微信公众号,感谢“R语言“,”数据那些事儿“,”老俊俊的生信笔记“,”冷🈚️思“,“珞珈R”,“生信星球”的支持!