smbinning包:R语言下的分箱处理工具预处理方法
摘要:不同的数据分析工具(例如SAS和SPSS)具有相应的模块,用于对连续数据进行分级操作。 R语言主要使用smbinning包进行数据合并操作。
分箱方法是一种简单且常用的预处理方法。 所谓的“分箱”实际上是根据属性值划分的子间隔。 如果属性值在某个子间隔范围内,则称其将属性值放入由子间隔表示的“框”中。
不同的数据分析工具(例如SAS和SPSS)具有相应的模块,用于对连续数据进行分级操作。 R语言主要使用smbinning包进行数据合并操作。
library(smbinning) ## Loading required package: sqldf ## Loading required package: gsubfn ## Loading required package: proto ## Loading required package: RSQLite ## Loading required package: DBI ## Warning: package 'DBI' was built under R version 3.3.2 ## Loading required package: partykit ## Loading required package: grid ## Loading required package: Formula
以chileancredit的信用数据为例,您可以使用smbinning包来实现数据分箱。 我们来看看数据摘要:
head(chileancredit)
## CustomerId TOB IncomeLevel Bal01 MaxDqBin01 MaxDqBin02 MaxDqBin03## 9 0000000185 44 1 604.86 0 0 0## 13 0000000238 79 1 1006.21 0 0 0## 21 0000000346 102 1 299.23 0 0 0## 25 0000000460 NA 1 645.19 0 0 0## 31 0000000549 109 <NA> 218.00 0 0 0## 32 0000000559 183 <NA> 10.32 0 0 0## MaxDqBin04 MaxDqBin05 MaxDqBin06 MtgBal01 NonBankTradesDq01## 9 0 0 0 0 0## 13 0 0 0 0 0## 21 0 0 0 0 0## 25 0 0 0 0 0## 31 0 0 0 0 0## 32 0 0 0 0 0## NonBankTradesDq02 NonBankTradesDq03 NonBankTradesDq04 NonBankTradesDq05## 9 0 0 0 0## 13 0 0 0 0## 21 0 0 0 0## 25 0 0 0 0## 31 0 0 0 0## 32 0 0 0 0## NonBankTradesDq06 FlagGB FlagSample## 9 0 1 1## 13 0 1 1## 21 0 1 1## 25 0 1 1## 31 0 1 1## 32 0 1 1
str(chileancredit)
## 'data.frame': 7702 obs. of 19 variables:## $ CustomerId : chr "0000000185" "0000000238" "0000000346" "0000000460" ...## $ TOB : int 44 79 102 NA 109 183 172 76 136 171 ...## $ IncomeLevel : Factor w/ 6 levels "0","1","2","3",..: 2 2 2 2 NA NA 1 2 1 1 ...## $ Bal01 : num 605 1006 299 645 218 ...## $ MaxDqBin01 : Factor w/ 7 levels "0","1","2","3",..: 1 1 1 1 1 1 1 1 1 1 ...## $ MaxDqBin02 : Factor w/ 8 levels "0","1","2","3",..: 1 1 1 1 1 1 1 1 1 1 ...## $ MaxDqBin03 : Factor w/ 8 levels "0","1","2","3",..: 1 1 1 1 1 1 1 2 1 1 ...## $ MaxDqBin04 : Factor w/ 8 levels "0","1","2","3",..: 1 1 1 1 1 1 1 1 1 1 ...## $ MaxDqBin05 : Factor w/ 8 levels "0","1","2","3",..: 1 1 1 1 1 1 1 1 1 1 ...## $ MaxDqBin06 : Factor w/ 8 levels "0","1","2","3",..: 1 1 1 1 1 1 1 1 1 1 ...## $ MtgBal01 : num 0 0 0 0 0 0 0 0 0 0 ...## $ NonBankTradesDq01: int 0 0 0 0 0 0 0 0 0 0 ...## $ NonBankTradesDq02: int 0 0 0 0 0 0 0 0 0 0 ...## $ NonBankTradesDq03: int 0 0 0 0 0 0 0 0 0 0 ...## $ NonBankTradesDq04: int 0 0 0 0 0 0 0 1 0 0 ...## $ NonBankTradesDq05: int 0 0 0 0 0 0 0 1 0 0 ...## $ NonBankTradesDq06: int 0 0 0 0 0 0 0 1 0 0 ...## $ FlagGB : int 1 1 1 1 1 1 1 1 1 1 ...## $ FlagSample : int 1 1 1 1 1 1 1 1 1 1 ...
对数据集切分为训练集与测试集两类:FlagSample=1作为训练集,另一半作为测试集:
chileancredit.train=subset(chileancredit,FlagSample==1) chileancredit.test=subset(chileancredit,FlagSample==0)
以TOB变量为例,我们可以尝试对其进行二值化:
组合包的分箱原则基于构造条件来推断树木树的监督共享。 因此,需要预先定义目标标签Y,并且将用户好的
和坏的标签FlagGB用作合并的目标标签。 result=smbinning(df=chileancredit.train,y="FlagGB",x="TOB",p=0.05) ## Loading required package: tcltk
在分割框后,smbinning包还提供了smbinning.plot函数来显示分箱效果:
par(mfrow=c(2,2)) boxplot(chileancredit.train$TOB~chileancredit.train$FlagGB, horizontal=T, frame=F, col="lightgray",main="Distribution")mtext("Time on Books (Months)",3) smbinning.plot(result,option="dist",sub="Time on Books (Months)") smbinning.plot(result,option="badrate",sub="Time on Books (Months)") smbinning.plot(result,option="WoE",sub="Time on Books (Months)")
图1和图2显示了变量的分布,图3显示了不良标记的比例。 除了缺失值之外,坏标签的比例显示出下降趋势。 图4显示了分箱变量的可疑指标。 悲惨指标是记分卡模型中非常常见的变量评估指标,它反映了变量区分好标签和坏标签的程度。 祸患值越大,组中好标签的比例越高,不良标签的比例越高。
最后,根据分箱逻辑,smbinning还提供了smbinning.sql函数来形成sql逻辑:
smbinning.sql(result)
## [1] "case when TOB <= 17 then '01: TOB <= 17' when TOB <= 30 then '02: TOB <= 30' when TOB <= 63 then '03: TOB <= 63' when TOB > 63 then '04: TOB > 63' when TOB Is Null then 'TOB Is Null' else '99: Error' end "
根据分箱结果,您还可以使用smbinning.gen函数直接派生原始数据集上的分箱变量:
Chileancredit = smbinning.gen(chileancredit,result,chrname =“gTOB”)
smbinning包还提供IV评估指标。 IV,也称为信息值,是评估变量区分分类标签的能力的指标,通常用于评估记分卡变量。 通常,IV值越高,变量预测能力越好。 在记分卡的构建过程中,分析师也更倾向于选择高IV值,并且具有显着线性关系的变量被包括在模型筛选集中作为初步变量。
sumivt=smbinning.sumiv(chileancredit.train,y="FlagGB")
## Char IV Process## 5 MaxDqBin01 2.3771 Factor binning OK## 6 MaxDqBin02 1.8599 Factor binning OK## 12 NonBankTradesDq01 1.8129 Numeric binning OK## 13 NonBankTradesDq02 1.4417 Numeric binning OK## 7 MaxDqBin03 1.3856 Factor binning OK## 14 NonBankTradesDq03 1.1819 Numeric binning OK## 8 MaxDqBin04 1.0729 Factor binning OK## 15 NonBankTradesDq04 0.8948 Numeric binning OK## 9 MaxDqBin05 0.8844 Factor binning OK## 16 NonBankTradesDq05 0.7511 Numeric binning OK## 10 MaxDqBin06 0.6302 Factor binning OK## 17 NonBankTradesDq06 0.5501 Numeric binning OK## 2 TOB 0.5025 Numeric binning OK## 3 IncomeLevel 0.3380 Factor binning OK## 11 MtgBal01 0.1452 Numeric binning OK## 4 Bal01 0.1379 Numeric binning OK## 1 CustomerId NA Not numeric nor factor## 18 FlagSample NA Uniques values of x < 10
最后,您可以使用smbinning.sumiv.plot函数对变量IV值进行排序并将其可视化以便于分析变量。
par(mfrow=c(1,1)) smbinning.sumiv.plot(sumivt,cex=0.8)
相关热词搜索:smbinning R语言 分箱处理工具 预处理方法
上一篇:史上最全 Python Re 模块讲解
下一篇:R语言调用C语言动态链接库
人机验证(Captcha)绕过方法:使用Chrome开发者工具在目标网站登录页面上执行简单的元素编辑,以实现Captcha绕过
牛创网络: " 人机身份验证(Captcha)通常显示在网站的注册,登录名和密码重置页面上。 以下是目标网站在登录页面中排列的验证码机制。 从上图可以
2020-01-26 12:44:09 )8872( 亮了
自动发现IDOR(越权)漏洞的方法:使用BurpSuite中的Autozie和Autorepeater插件来检测和识别IDOR漏洞,而无需手动更改每个请求的参数
牛创网络: "自动发现IDOR(越权)漏洞的方法:使用BurpSuite中的Autozie和Autorepeater插件来检测和识别IDOR漏洞,而无需手动更改每个请求的参数
2020-01-30 14:04:47 )6288( 亮了
Grafana CVE-2020-13379漏洞分析:重定向和URL参数注入漏洞的综合利用可以在任何Grafana产品实例中实现未经授权的服务器端请求伪造攻击SSRF
牛创网络: "在Grafana产品实例中,综合利用重定向和URL参数注入漏洞可以实现未经授权的服务器端请求伪造攻击(SSRF)。该漏洞影响Grafana 3 0 1至7 0 1版本。
2020-08-12 14:26:44 )4301( 亮了
Nginx反向代理配置及反向代理泛目录,目录,全站方法
牛创网络: "使用nginx代理dan(sui)是http响应消息写入服务地址或Web绝对路径的情况。 写一个死的服务地址是很少见的,但它偶尔也会发生。 最棘手的是写入web绝对路径,特别是如果绝对路径没有公共前缀
2019-06-17 10:08:58 )3858( 亮了
fortify sca自定义代码安全扫描工具扫描规则(源代码编写、规则定义和扫描结果展示)
牛创网络: "一般安全问题(例如代码注入漏洞),当前fortify sca规则具有很多误报,可通过规则优化来减少误报。自带的扫描规则不能检测到这些问题。 需要自定义扫描规则,合规性角度展示安全风险。
2020-02-12 10:49:07 )3505( 亮了
整理几款2020年流行的漏洞扫描工具
牛创网络: "漏洞扫描器就是确保可以及时准确地检测信息平台基础架构的安全性,确保业务的平稳发展,业务的高效快速发展以及公司,企业和国家 地区的所有信息资产的维护安全。
2020-08-05 14:36:26 )2536( 亮了
微擎安装使用技巧-微擎安装的时候页面显示空白是怎么回事?
牛创网络: "我们在公众号开发中,有时候会用到微擎,那我们来看一下微擎安装的时候页面显示空白是怎么回事吧
2019-06-08 15:34:16 )2261( 亮了
渗透测试:利用前端断点拦截和JS脚本替换对前端加密数据的修改
牛创网络: " 本文介绍的两种方法,虽然断点调试比JS脚本代码替换更容易,但是JS脚本代码替换方法可以实现更强大的功能,测试人员可以根据实际需要选择适当的测试方法
2020-01-07 09:34:42 )1995( 亮了
从工业界到学界盘点SAS与R优缺点比较
牛创网络: "虽然它在业界仍然由SAS主导,但R在学术界广泛使用,因为它的免费开源属性允许用户编写和共享他们自己的应用程序 然而,由于缺乏SAS经验,许多获得数据分析学位的学生很难找到工作。
2019-07-13 22:25:29 )1842( 亮了
41款APP侵犯用户隐私权:QQ,小米,搜狐,新浪,人人均被通报
牛创网络: "随着互联网的不断发展,我们进入了一个时代,每个人都离不开手机。 但是,APP越来越侵犯了用户隐私权。12月19日,工业和信息化部发布了《关于侵犯用户权益的APP(第一批)》的通知。
2019-12-20 11:28:14 )1775( 亮了