数据离散化-分箱

  变量的延申和筛选-连续变量离散化-特征筛选

WOE编码(最优分箱)

WOE一般在0.1~3之间波动,IV值做得特征筛选的操作 一般保留>0.03的特征 IV值体现的时X和Y之间的显著性进行筛选

1.逐列分箱并获得IV值

# 运行自定义函数所在文件    对自定义分箱文件要自己理解
%run smob.py

# y进行0,1互换
train_data[‘SeriousDlqin2yrs‘]  = -(train_data.SeriousDlqin2yrs-1) #因为与自定义函数中的标签0 1设定正好相反

# 定义y的名字
y = ‘SeriousDlqin2yrs‘ #标签列的名字

# 初始化IV值的对象
# 贷款以及信用卡可用额度占比
RUO = smbin(train_data,y,‘RevolvingUtilizationOfUnsecuredLines‘);

# 越高WOE值越大
# 如果觉得分箱的箱子数太多 可以设置 max_bin=  参数  看看能不能把两个WOE值较小的合并

#查看结果数据
RUO.IVtable

#查看遍历方式(一般不看)
print(RUO.Tree_structure)

#查看IV值
RUO.IV

# 保存IV值 第一个特征值
iv_all = pd.Series()
iv_all = iv_all.append(pd.Series({‘RevolvingUtilizationOfUnsecuredLines‘:RUO.IV}))

#age分箱并保存iv值
age = smbin(train_data,y,‘age‘)

age.IVtable

iv_all = iv_all.append(pd.Series({‘age‘:age.IV}))

#除标签外把所有特征都来一边
#查看某一变量分享后的基于标签的箱型图
train_data.boxplot(column = [‘NumberOfTimes90DaysLate‘],by=[y])

也可以所有特征,循环分箱

iv_all = pd.Series()
for i in train_data.columns[1:]:
    # 贷款以及信用卡可用额度占比
#     R=i.upper()
    R= smbin(train_data,y,i);
    iv_all = iv_all.append(pd.Series({i:R.IV}))
iv_all

2.查看所有变量的IV值

iv_all.sort_values(ascending=False) #小于0.03的可以考虑筛选掉#直方图iv_all.sort_values().plot(kind=‘barh‘)

3.WOE转换(WOE编码),通过生成的分箱和WOE数据

# smbin和smbin_cu得到IV值筛选后,放在一个表中
x_list = [RUO,age,NO3059,DebtRatio,MonthlyIncome,NOO,NO90,NRE,NO6089,NOD]

data_woe = smgen(train_data,x_list)
data_woe.head()

4.数据集转换(确定X Y)--转换后的数据

  1. 抽取WOE列作为预测数据X
  2. 如果用的是statsmodel的回归模型,加常数项
  3. 抽取相应列作为y
import statsmodels.api as sm

X = data_woe.iloc[:,-len(x_list):]
X = sm.add_constant(X)          #增加常数列

Y = data_woe[y]   #y是标签列名称

接下来是数据集切分了...

原文地址:https://www.cnblogs.com/jing-yan/p/12339623.html

时间: 2024-11-08 13:41:57

数据离散化-分箱的相关文章

按时分秒对数据进行分箱

https://nbviewer.jupyter.org/github/China-LuoYaxiong/pandas/blob/master/%E6%97%B6%E9%97%B4%E6%8C%89%E6%97%B6%E5%88%86%E7%A7%92%E6%9D%A5%E5%88%86%E7%AE%B1.ipynb 原文地址:https://www.cnblogs.com/LUOyaXIONG/p/12066963.html

[转]卡方分箱中卡方值的计算

<div class="show-content-free"> <p>关于卡方分箱,网上有很多文章,但几乎没有文章介绍分箱时相邻区间卡方值计算的方法,而本文在介绍卡方分箱的同时,重点介绍了相邻区间卡方值的计算方法.通过本文,希望大家能对卡方分箱有清楚透彻的认识.</p> 分箱是什么 分箱是将连续的变量离散化,将多状态的离散变量合并成少状态.这里要注意的是,不仅仅是连续变量要分箱,状态多的离散变量也需要分箱,之前接触过公司内特征工程的项目,里边就将超过

订单分箱问题

订单分箱需求,我把它简化为如下模型: 一张表实现,实现分箱的效果,总结一下做个小demo. package com.kaspar.order.model; import java.io.Serializable; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import

pandas逐行操作、分箱技术、窗口函数

cummax,cummin,cumprod,cumsum 有时候我们需要求出从第一行开始截止到当前行的最大值.最小值,以及实现累乘.累和等等. import pandas as pd df = pd.DataFrame({"a": [10, 20, 15, 50, 40]}) # cummax:求出从第一行开始截止到当前行的最大值 # 第1行为10,第2行为20,第3行为15但是比20小所以还是20,第4行为50,同理第5行也是50 print(df["a"].cu

C#.NET 大型通用信息化系统集成快速开发平台 4.1 版本 - 大数据支持分表优化

公司的短信平台,数据量越来越大了,需要对数据进行一些优化,下面是拆分后的数据库量参考. 新开发的软件模块,必须支持分表,拆表的功能一个数据表里,不适合保存1000万以上的记录新开发的业务模块,能分表的全分表,否则,将来我们无法用其他小型数据库,例如mysql 现在系统的短信已经进行了拆表接着打算把日志也进行拆表确保数据库里,没有庞大的表,随时可以切换数据库 每个人把自己负责的事情,做到自己能力的及至,做到部门能力的及至,公司能力的及至,就很有希望了有时候我说话很随意,但是一般会注意,我说出去的话

mysql实现插入数据到分表

use mysql;/*创建原始数据表*/DROP TABLE IF EXISTS `articleinfo`;CREATE TABLE `articleinfo`(`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,`title` VARCHAR(20) DEFAULT NULL,`content` VARCHAR(20) DEFAULT NULL,`comment_time` VARCHAR(20) DEFAULT NULL) E

重磅来袭,使用CRL实现大数据分库分表方案

关于分库分表方案详细介绍 http://blog.csdn.net/bluishglc/article/details/7696085 这里就不作详细描述了,本方案拆分结构表示为 会员为业务核心,所有业务围绕会员来进行,所以垂直划分用会员编号作索引,将会员分配到不同的库 会员订单增长量是不固定的,所以需要平水拆分,和分库一样,一个表只存指定会员编号区间的订单 了解基本需求,就可以制作方案了,以下主索引表示主数据编号 库表结构配置 进行操作时,需要知道这个数据放在哪个库,哪个表,因此需要把这个划分

基于卡方分箱的评分卡建模

卡方分布-chi-square distribution, χ2-distribution: 若k个独立的随机变量Z1, Z2,..., Zk 满足标准正态分布 N(0,1) , 则这k个随机变量的平方和: 为服从自由度为k的卡方分布,记作:  或者  卡方检验-χ2检验是以χ2分布为基础的一种假设检验方法,主要用于分类变量之间的独立性检验: 基本思想是根据样本数据推断总体分布与期望分布是否有显著性差异,或者推断两个分类变量是否相关或者独立.一般可以设原假设为 :观察频数与期望频数没有差异,或者

大数据--hive分桶查询&amp;&amp;压缩方式

一.分桶及抽样查询 1.分桶表创建 --------------------------------------- hive (db_test)> create table stu_buck(id int,name string) > clustered by(id) > into 4 buckets > row format delimited fields terminated by '\t';OKTime taken: 0.369 seconds --------------