目标:
- 学习特征预处理、缺失值、异常值处理、数据分桶等特征处理方法
- 学习特征交互、编码、选择的相应方法
一、数据预处理
由于接下来需要用数学模型来建模,所以所有的样本都不能有特征缺失,同时非数值型的特征都需要想办法转化为数值型
1. 缺失值的填充
Task2里面详细讲过,此处略
2.类别特征处理
类别特征转化为数值型特征的方法通常有两种:
2.1LabelEncoder
该方法思想很简单,直接对类别取值编号即可,例如“grade(贷款等级)”这个类别特征现有的可能取值为“A,B,C,D,E,F”这6种取值,那么只需要依次编号为“1,2,3,4,5,6”即可
2.2OneHotEncoder
该方法的思想也很简单,直接将一个类别按照取值拆分成多个类别,例如“color(颜色)”这个类别特征有“red,green,blue”这2种可能取值,那么我们就可以按照这3个取值拆分出3个新的类别“red,green,blue”,效果如下:
- 拆分前:
id | color |
---|---|
0 | blue |
1 | red |
2 | green |
- 拆分后:
id | red | green | blue |
---|---|---|---|
0 | 0 | 0 | 1 |
1 | 1 | 0 | 0 |
2 | 0 | 1 | 0 |
2.3 LabelEncoder or OneHotEncoder?
通常对于那些取值之间有“优劣”之分的类别特征常用LabelEncoder,因为其本身取值的大小就是一个特征,例如上述例子中的“grade(贷款等级)”就是这类特征,而对于那些取值之间没有“优劣”之分的特征,例如上述例子中的“color(颜色)”就倾向于用OneHotEncoder。除了从取值之间的“优劣”这个角度来看以外,更重要的还是得从模型的角度来看,毕竟现在所做的一切都是为了下一步喂进模型,此处暂不展开,下个Task再说。
3.时间类特征处理
对于时间类特征,通常给的数据都是“年-月-日”这种字符串格式的取值,其本质也属于类别特征(凡是取值不是纯数值的都算类别特征),所以上面讲的类别特征处理方法也同样适用于时间类特征,不过考虑到时间类特征里面是含有数值的,所以其会有一些自己特有的处理方式。比如可以只保留年份这个数值作为取值,也可以将年月日拼接得到的数字作为取值,等等各种方法都可以。此处给的方法是取最小的日期为起点,然后计算每个日期超过该起点的天数作为取值,比如此处的最小日期是“2007-06-01”,那么“2007-06-02”就可以转化为1,因为它只超过了最小日期1天。
二.异常值处理
处理异常值时,一定要先分清是什么原因导致的异常值,然后再考虑如何处理。首先,如果这一异常值并不代表一种规律性的,而是极其偶然的现象,或者说你并不想研究这种偶然的现象,这时可以将其删除。其次,如果异常值存在且代表了一种真实存在的现象,那就不能随便删除。在现有的欺诈场景中很多时候欺诈数据本身相对于正常数据来说就是异常的,我们要把这些异常点纳入,重新拟合模型,研究其规律。常用的异常值检测算法如下:
1.3sigma原则
注意一个大前提:【假设该特征的取值服从正态分布】,那么在3sigma(此处的sigma表示的即为标准差常用的数学符号σ)原则下,超过3个标准差(即3sigma)的取值即为异常值。3sima原则默认为大约 68.27% 的取值会在均值的一个标准差(1sigma)范围内,大约 95.45% 会在两个标准差(2sigma)范围内,大约 99.73% 会在三个标准差(3sigma)范围内。当然这都是经验之谈,思路值得借鉴,具体指标还是要根据具体业务或者具体分布(因为有可能不服从正态分布)来进行具体分析。
2.箱型图
相对于3sigma原则有一个优势,就是不需要假设特征一定符合某个特定的分布,也就是不限定分布,那箱型图为何能检测异常值呢?具体参见:https://www.zhihu.com/question/36172806
三、特征分箱
特征分箱的目的:从模型效果上来看,特征分箱主要是为了降低变量的复杂性,减少变量噪音对模型的影响,提高自变量和因变量的相关度,从而使模型更加稳定。例如此次任务中的借贷数据,如果有“年龄”这个特征的话,那么取值应该是1-100之间的数字,这时候我们就可以考虑对“年龄这个特征做个分箱”,因为对于借贷数据来说精确的年龄意义不大,我们只需要知道年龄所处的阶段就可以了,也就是属于“儿童、青年、中年、老年”中的哪个阶段即可,那么我们就可以把1-18分箱为“儿童”,18-30分箱为“青年”,30-50分箱为“中年”,50-100分箱为“老年”,显然此时就降低了“年龄”这个特征的复杂度,取值从1-100共100种可能降低为了“儿童、青年、中年、老年”共4种可能,这对模型来说也更加容易学习。特征分箱根据不同类型的特征有不同的操作,但是其本质都是如此,在此不再展开。
四、特征交互
所谓特征交互就是尝试特征之间进行排列组合,进而衍生出一些新的特征,所以特征的复杂度会从O(n)扩展到O(n^2),相应的学习复杂度也呈类似增长,例如现在的数据只有两个维度的特征x1和x2,通过特征交互规则【A*A*B】我们可以衍生出x1*x1*x2和x2*x2*x1这两个新特征,那么现在就有了四个维度的特征x1、x2、x1*x1*x2、x2*x2*x1,相对于之前直接翻倍了。那么用怎样的特征交互规则衍生出的特征比较有效呢?同样这个也是一个需要根据具体业务具体数据具体特征来进行具体分析的任务。
五、特征选择
特征选择技术可以精简掉无用的特征,以降低最终模型的复杂性,它的最终目的是得到一个简约模型,在不降低预测准确率或对预测准确率影响不大的情况下提高模型计算速度。Task2中的缺失值和唯一值处理本质也是在做特征选择。常用的特征选择方法如下: