外观
特征离散化(feature discretization)
Feature Discretization
在模型开发过程中,有许多人不会去尝试的一项技术就是特征离散化(feature discretization)。顾名思义,离散化背后的思想是把一个连续特征转换为离散特征。

为什么要这样做?什么时候做?又该怎么做?让我们在本章中搞清楚。
我使用特征离散化的理由几乎一直都很简单:“把特征离散化就是说得通。”例如,假设你的数据集里有一个年龄特征:

在许多应用场景中,比如基于交易历史来理解消费行为,这类连续变量(continuous variable)在被离散化为有意义的组别时更容易被理解——青少年、成年人、老年人。例如,假设我们在不做离散化的情况下对这个交易数据集建模。这会为每个特征得到一些系数,告诉我们每个特征对最终预测的影响。

但如果再想想,在我们理解消费行为的目标下,我们真的关心精确年龄与消费行为之间的相关性吗?这样做意义不大。相反,去学习不同年龄段与消费行为之间的相关性才更有意义。因此,把年龄特征离散化有可能揭示出比把它作为原始特征使用更有价值的洞察。
既然理解了背后的动机,接下来有两种被广泛采用的技术。

一种离散化特征的方法是把特征分解为大小相等的分箱。

另一种技术是把特征分解为等频分箱:

之后,这些离散值会进行 one-hot 编码。特征离散化的一个优势在于,即使模型是线性的,它也能引入非线性行为。这有可能带来更好的准确率,下图也印证了这一点:

带有特征离散化的线性模型会得到:
- 非线性的决策边界。
- 更好的测试准确率。
所以在某种意义上,我们能用简单的线性模型却仍学到非线性模式。离散化连续特征的另一个好处是,它有助于我们提升信噪比。
简单来说,“信号”指的是数据中有意义或有价值的信息。对特征进行分箱有助于我们削弱微小波动的影响,而这些波动往往只是噪声。

每个分箱相当于一种手段,把特定数据段内的噪声“平滑”掉。在结束之前,请记住,特征离散化配合 one-hot 编码会增加特征的数量,从而增加数据的维度(dimensionality)。而且通常情况下,随着我们走向更高维度,数据会变得更容易线性分离。因此,特征离散化可能导致过拟合(overfitting)。为了避免这种情况,不要对所有特征都过度离散化。相反,要像前面看到的那样,在直觉上说得通时才使用它。当然,它的效用在不同应用之间可能差异巨大,但有时候我发现:
- 对纬度和经度这类地理空间数据进行离散化可能会有用。
- 对年龄/体重相关数据进行离散化可能会有用。
- 通常被限制在某个范围内的特征也比较合适,比如储蓄/收入(从实际角度讲)等。