机器学习之IV编码,分箱WOE编码
IV的概念与作用
全称是Information Value,中文的意思是信息价值,或者信息量
作用:
1、构建分类模型时,经常需要对特征进行筛选。
2、挑选特征的过程考虑的因素比较多,最主要和最直接的衡量标准是特征的预测能力,而IV就是用来衡量自变量(也就是特征)的预测能力
IV需要用到WOE,而WOE是建立在分箱之上的
分箱:
数据分箱:是一种数据预处理技术,用于减少次要观察误差的影响,是一种将多个连续值分组为较少数量的“分箱”的方法。也就是将连续特征变成离散化特征。
分箱需要用到cut或者qcut
cut是等距分箱,为qcut是等频分箱
使用如下:
import numpy as np
import pandas as pd
# 得到哟组连续型变量
ages = np.linspace(1, 59, num=50)
print(ages.shape)
# 使用分箱对连续型变量进行离散化,bins表示的分组的个数
ages_cut = pd.cut(ages, bins=10, labels=['A','B','C','D','E','F','G','H','I','J'])
# 输出分箱后的结果
print(ages_cut)
print(ages_cut.value_counts())
# 等频分箱
ages_qcut = pd.qcut(ages, q=10)#q表示的箱子的个数
# 等频分箱的结果
print(ages_qcut)
print(ages_qcut.value_counts())
输出结果:
(50,)
['A', 'A', 'A', 'A', 'A', ..., 'J', 'J', 'J', 'J', 'J']
Length: 50
Categories (10, object): ['A' < 'B' < 'C' < 'D' ... 'G' < 'H' < 'I' < 'J']
A 5
B 5
C 5
D 5
E 5
F 5
G 5
H 5
I 5
J 5
dtype: int64
[(0.999, 6.8], (0.999, 6.8], (0.999, 6.8], (0.999, 6.8], (0.999, 6.8], ..., (53.2, 59.0], (53.2, 59.0], (53.2, 59.0], (53.2, 59.0], (53.2, 59.0]]
Length: 50
Categories (10, interval[float64, right]): [(0.999, 6.8] < (6.8, 12.6] < (12.6, 18.4] <
(18.4, 24.2] ... (35.8, 41.6] < (41.6, 47.4] <
(47.4, 53.2] < (53.2, 59.0]]
(0.999, 6.8] 5
(6.8, 12.6] 5
(12.6, 18.4] 5
(18.4, 24.2] 5
(24.2, 30.0] 5
(30.0, 35.8] 5
(35.8, 41.6] 5
(41.6, 47.4] 5
(47.4, 53.2] 5
(53.2, 59.0] 5
dtype: int64
什么是WOE?
WOE全称Weight of Evidence,也就是证据权重的意思,WOE是对原始特征的一种编码形式。要对一个特征进行WOE编码,需要首先吧这个变量进行分组处理(也叫离散化,分箱等等。),分组后,
WOE计算公式