数据离散化-分箱
Posted jing-yan
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据离散化-分箱相关的知识,希望对你有一定的参考价值。
变量的延申和筛选-连续变量离散化-特征筛选
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)--转换后的数据
- 抽取WOE列作为预测数据X
- 如果用的是statsmodel的回归模型,加常数项
- 抽取相应列作为y
import statsmodels.api as sm X = data_woe.iloc[:,-len(x_list):] X = sm.add_constant(X) #增加常数列 Y = data_woe[y] #y是标签列名称
接下来是数据集切分了...
以上是关于数据离散化-分箱的主要内容,如果未能解决你的问题,请参考以下文章