介绍
在特征构造的时候,需要借助一些背景知识,遵循的一般原则就是需要发挥想象力,尽可能多的创造特征,不用先考虑哪些特征可能好,可能不好,先弥补这个广度。特征构造的时候需要考虑**类别特征,数值特征,时间特征**。
- 对于类别特征,我们一般会尝试之间的交叉组合,embedding也是一种思路
- 对于数值特征,一般会尝试一些它们之间的加减组合(当然不要乱来,根据特征表达的含义)或者提取一些统计特征(总和、均值等)
- 对于时间特征,这一块又可以作为一个大专题来学习,在时间序列的预测中这一块非常重要,也会非常复杂,需要就尽可能多的挖掘时间信息,会有不同的方式技巧。当然在这个比赛中涉及的实际序列数据有一点点,不会那么复杂。
# 1、类别特征
## 1.1 编码
- 独热编码(OneHotEncoder)
- 哑变量编码(Dummy Encoding)
- 标签编码(LabelEncoder)
## 1.2 根据类别构造统计特征(不适合树模型)
根据某种类别特征构建某数值统计特征,例如:
- max()
- median()
- min()
- mean()
- count()
- std()
# 2、数值特征
## 2.1 分箱操作(树模型不需要)
- 等频分箱
- 等距分箱
- Best-KS分箱(类似利用基尼指数进行二分类)
- 卡方分箱
## 2.2 统计特征(不适合树模型)
平均值,总和,标准差等,例如:
```python
v_features = ['v_' + str(i) for i in range(15)]
num_data['v_sum'] = num_data[v_features].apply(lambda x: x.sum(), axis=1)
num_data['v_mean'] = num_data[v_features].apply(lambda x: x.mean(), axis=1)
num_data['v_std'] = num_data[v_features].apply(lambda x: x.std(), axis=1)
```
注:若要按照类别构建统计特征就是文章先前所讲述的了
## 2.3 生成多项式特征
通过增加一些输入数据的非线性特征来增加模型的复杂度通常是有效的。一个简单通用的办法是使用多项式特征,这可以获得特征的更高维度和互相间关系的项。这在 PolynomialFeatures 中实现:
```python
import numpy as np
from sklearn.preprocessing import PolynomialFeatures
X = np.arange(6).reshape(3, 2)
'''
此时的X:array([[0, 1],
[2, 3],
[4, 5]])
'''
poly = PolynomialFeatures(2)
poly.fit_transform(X)
'''
得到:
array([[ 1., 0., 1., 0., 0., 1.],
[ 1., 2., 3., 4., 6., 9.],
[ 1., 4., 5., 16., 20., 25.]])
'''
```
X 的特征已经从 ($X_1$, $X_2$) 转换为 (1, $X_1$, $X_2$, $X_1^2$, $X_1X_2$, $X_2^2$) 。
在一些情况下,只需要特征间的交互项,这可以通过设置 interaction_only=True 来得到:
```python
X = np.arange(9).reshape(3, 3)
'''
此时的X:array([[0, 1, 2],
[3, 4, 5],
[6, 7, 8]])
'''
poly = PolynomialFeatures(degree=3, interaction_only=True)
poly.fit_transform(X)
'''
得到:
array([[ 1., 0., 1., 2., 0., 0., 2., 0.],
[ 1., 3., 4., 5., 12., 15., 20., 60.],
[ 1., 6., 7., 8., 42., 48., 56., 336.]])
'''
```
X的特征已经从 ($X_1$, $X_2$, $X_3$) 转换为 (1, $X_1$, $X_2$, $X_3$, $X_1X_2$, $X_1X_3$, $X_2X_3$, $X_1X_2X_3$) 。X的特征已经从 ($X_1$, $X_2$, $X_3$) 转换为 (1, $X_1$, $X_2$, $X_3$, $X_1X_2$, $X_1X_3$, $X_2X_3$, $X_1X_2X_3$) 。
## 2.4 特征的线性组合(仅适合树模型)
$X_{new}$=$aX_1$+$bX_2$+$cX_3$
## 2.5 比例特征(ratio feature)
$X_{new}$=$X_1$/$X_2$
## 2.6 绝对值(absolute value)
$X_{new}$=$|X_1|$
# 3、时间特征
- 距离今天的天数、年数、月数(然后还可以根据结果分箱)
- 是不是淡旺季、节假日、周末等特殊时间
- 再根据以上得到的类别特征构建统计量