ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

数据离散化-分箱

2020-02-20 23:03:58  阅读:370  来源: 互联网

标签:分箱 data IV 离散 train WOE iv 数据


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

   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是标签列名称

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

 

标签:分箱,data,IV,离散,train,WOE,iv,数据
来源: https://www.cnblogs.com/jing-yan/p/12339623.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有