paint-brush
机器学习的特征工程by@sumitmakashir
692
692

机器学习的特征工程

Sumit Makashir15m2024/05/15
Read on Terminal Reader

特征工程对于最大限度地提高机器学习模型的性能至关重要。通过创建和处理有意义的特征,即使是简单的算法也可以获得出色的结果。关键技术包括聚合、差异和比率、年龄编码、指标编码、独热编码和目标编码。有效的特征处理包括异常值处理、处理缺失值、缩放、降维以及将目标转换为正态分布。
featured image - 机器学习的特征工程
Sumit Makashir HackerNoon profile picture
0-item


您一定听过“垃圾进,垃圾出”这句话。这句话在训练机器学习模型时确实适用。如果我们使用不相关的数据训练机器学习模型,即使是最好的机器学习算法也无济于事。相反,使用精心设计的有意义的特征,即使是简单的机器学习算法也能实现卓越的性能。那么,我们如何创建这些有意义的特征来最大限度地提高模型的性能呢?答案是特征工程。在使用传统机器学习算法(例如回归、决策树、支持向量机和其他需要数字输入的算法)时,特征工程尤为重要。然而,创建这些数字输入不仅仅需要数据技能。这是一个需要创造力和领域知识的过程,既是艺术也是科学。

广义上讲,我们可以将特征工程分为两个部分:1)创建新特征;2)处理这些特征,使它们与所考虑的机器算法最佳地协同工作。在本文中,我们将讨论针对横截面、结构化、非 NLP 数据集的特征工程的这两个组成部分。


新功能创建

收集原始数据可能非常耗时,到任务结束时,我们可能已经筋疲力尽,无法再投入更多时间和精力来创建其他特征。但这是我们必须抵制直接投入模型训练的诱惑的地方。我向你保证,这是值得的!此时,我们应该停下来问自己:“如果我根据我的领域知识手动进行预测,哪些特征可以帮助我做好这项工作?”提出这个问题可能会为设计新的有意义的特征开辟可能性,否则我们的模型可能会错过这些特征。一旦我们考虑了哪些其他特征可以为我们带来好处,我们就可以利用下面的技术从原始数据中创建新特征。


1. 聚合

顾名思义,这种技术可帮助我们组合多个数据点以创建更全面的视图。我们通常使用标准函数(如计数、总和、平均值、最小值、最大值、百分位数、标准差和变异系数)对连续数值数据应用聚合。每个函数都可以捕获不同的信息元素,最佳函数取决于具体用例。通常,我们可以对特定时间或事件窗口应用聚合,这在该问题的背景下是有意义的。

让我们举一个例子,我们想要预测给定的信用卡交易是否是欺诈性的。对于这个用例,我们毫无疑问可以使用特定于交易的特征,但除了这些特征之外,我们还可以从创建聚合的客户级特征中受益,例如:

  1. 过去五年内客户受骗的次数:以前多次受骗的客户再次受骗的可能性更大。因此,使用这种汇总的客户级视图可以提供适当的预测信号。

  2. 最近五笔交易金额的中位数:通常,当信用卡被盗用时,欺诈者可能会尝试多次小额交易来测试该卡。现在,单笔小额交易非常常见,可能不是欺诈的迹象,但如果我们在短时间内看到多次此类交易,则可能表明信用卡已被盗用。


顶部图表显示了单笔交易金额,我们可以看到,孤立的低额交易并不罕见,并不表示存在欺诈,但是,连续多次低额交易则是欺诈的迹象。底部图表显示了最近五笔交易金额的滚动中位数,并且只有在存在连续多次低额交易的模式时才会返回低值。在这种情况下,底部的聚合视图可以使用交易金额作为特征来区分合法的低额交易和欺诈性的低额交易。



2. 差异与比率

在许多类型的问题中,固定模式的变化是预测或异常检测的宝贵信号。差异和比率是表示数值特征变化的有效技术。就像聚合一样,我们也可以在这个问题的背景下,在有意义的时间窗口内应用这些技术。

例子:

  1. 过去 1 小时内新商户交易的百分比与过去 30 天内新商户交易的百分比之间的差异:快速连续的新商户交易百分比高本身可能表明存在欺诈风险,但当我们看到这种行为与客户的历史行为相比发生了变化时,它就会成为一个更加明显的信号。

  2. 当天交易数与过去 30 天日均交易数的比率:当信用卡被盗用时,它可能会短时间内进行大量交易,这可能与过去的信用卡使用情况不符。当天交易数与过去 30 天日均交易数的比率过高可能表明存在欺诈性使用模式。


从上表我们可以看出,某一天的交易笔数高本身可能并不代表交易行为异常。相反,基于比率的特征可以方便地比较客户当前的交易行为和过去的交易行为,从而更有效地捕获异常。

3. 年龄编码

我们可以使用年龄计算技术,通过计算两个时间戳或日期之间的差值,将日期或时间戳特征转换为数字特征。如果与特征值相关的年限可以作为有价值的预测信号,我们还可以使用这种技术将某些非数字特征转换为有意义的数字特征。

例子:

  1. 信用卡上次使用天数:长期闲置的信用卡突然发生交易可能存在较高的欺诈风险。我们可以通过计算信用卡上次使用日期与当前交易日期之间的时间差来计算此特征。
  2. 自客户设备首次使用以来的天数:如果我们发现交易来自新设备,那么这笔交易的风险可能比客户使用时间较长的设备更高。我们可以创建一个功能,将设备使用年限指示为自客户首次使用该设备以来的日期与当前交易日期之间的差值。

上表显示了年龄编码的示例。在这里,我们创建了一个新的数字特征“自交易设备首次使用以来的天数”,作为客户设备首次使用日期与当前交易日期之间的天数差。


4. 指标编码

指示特征或布尔特征具有二进制值 {1, 0} 或 {True, False}。指示特征非常常见,用于表示各种类型的二进制信息。在某些情况下,我们可能已经以数字形式拥有此类二进制特征,而在其他情况下,它们可能具有非数字值。要使用非数字二进制特征进行模型训练,我们所要做的就是将它们映射到数值。

除了这些常见的指标特征和用法之外,我们还可以利用指标编码作为一种工具来表示非数字数据点之间的比较。这一属性使其特别强大,因为它为我们提供了一种衡量非数字特征变化的方法。

例子:

  1. 近期登录事件中验证失败:近期登录失败可能与较高的欺诈交易风险相关。在这种情况下,原始数据可能对此特征具有“是”或“否”值;我们在这里要做的就是将这些值映射到 1 或 0。

  2. 国家/地区位置与上次交易时的变化:国家/地区位置的变化可能表明信用卡已被盗用。在这里,创建一个指示特征来表示非数字特征“国家/地区位置”的变化将捕获此国家/地区变化信息。


上表显示了指标编码的示例。在这里,我们通过比较客户当前交易的国家/地区位置与之前交易的国家/地区位置,创建了一个新的数字特征“与之前交易相比的国家/地区变化”。


5.独热编码

如果我们的特征数据是分类形式(数字或非数字),则可以应用此技术。数字分类形式是指包含非连续或非测量数据的数字数据,例如地理区域代码、商店 ID 和其他此类数据。独热编码技术可以将此类特征转换为一组指示特征,我们可以使用这些特征来训练机器学习模型。对分类特征应用独热编码将为该分类变量中的每个类别创建一个新的二进制特征。由于新特征的数量会随着类别数量的增加而增加,因此此技术适用于类别数量较少的特征,尤其是在数据集较小的情况下。标准经验法则之一建议,如果每个类别至少有 10 条记录,则应用此技术。

例子:

  1. 交易购买类别:某些类型的购买类别可能与较高的欺诈风险相关。由于购买类别名称是文本数据,我们可以应用独热编码技术将此特征转换为一组数字指标特征。如果有十个不同的购买类别名称,独热编码将创建十个新的指标特征,每个购买类别名称一个。
  2. 设备类型:在线交易可以通过多种不同类型的设备进行,例如 iPhone、Android 手机、Windows PC 和 Mac。其中一些设备更容易受到恶意软件攻击或容易被欺诈者访问,因此可能存在更高的欺诈风险。为了以数字形式包含设备类型信息,我们可以对设备类型应用独热编码,这将为每种设备类型创建一个新的指标特征。

上表显示了独热编码的示例。在这里,我们通过将独热编码技术应用于非数字分类特征“设备类型”,创建了一组新的数字指标特征。


6. 目标编码

这种技术适用于我们将独热编码应用于的同一类型的特征,但与独热编码相比,它有一些优点和缺点。当类别数量很高(高基数)时,使用独热编码会不合需要地增加特征数量,这可能导致模型过度拟合。在这种情况下,目标编码可能是一种有效的技术,前提是我们正在研究监督学习问题。它是一种将每个类别值映射到该类别目标的预期值的技术。如果处理具有连续目标的回归问题,则此计算将类别映射到该类别的平均目标值。对于具有二元目标的分类问题,目标编码将类别映射到该类别的正事件概率。与独热编码不同,这种技术的优点是不增加特征数量。这种技术的缺点是它只能应用于监督学习问题。应用这种技术也可能使模型容易过度拟合,特别是当某些类别的观察值数量较少时。

例子:

  1. 商家名称:针对某些商家进行的交易可能表明存在欺诈活动。可能有数千个这样的商家,每个商家的欺诈交易风险都不同。对包含商家名称的特征应用独热编码可能会引入数千个新特征,这是不可取的。在这种情况下,目标编码可以帮助捕获商家的欺诈风险信息,而无需增加特征数量。
  2. 交易邮政编码:与商家一样,在不同的邮政编码中进行的交易可能代表不同的欺诈风险水平。虽然邮政编码具有数值,但它们不是连续测量变量,不应原封不动地用于模型中。相反,我们可以通过应用目标编码等技术来整合与每个邮政编码相关的欺诈风险信息。

上表显示了目标编码的示例。在这里,我们通过将目标编码技术应用于非数字分类特征“商家名称”,创建了一个新的数字特征“商家名称目标编码”。顾名思义,此技术依赖于目标值来计算新特征值。



一旦我们从原始数据中创建新特征,下一步就是处理它们以获得最佳模型性能。我们通过下一节中讨论的特征处理来实现这一点。

特征处理

特征处理是指一系列数据处理步骤,可确保机器学习模型按预期拟合数据。虽然在使用某些机器学习算法时需要其中一些处理步骤,但其他处理步骤可确保我们在特征和所考虑的机器学习算法之间达成良好的工作化学反应。在本节中,让我们讨论一些常见的特征处理步骤以及我们为什么需要它们。

1. 异常值处理

一些机器学习算法,尤其是参数算法(例如回归模型)会受到异常值的严重影响。这些机器学习算法试图适应异常值,从而严重影响模型参数并损害整体性能。要处理异常值,我们必须首先识别它们。我们可以应用某些经验法则来检测特定特征的异常值,例如绝对值大于平均值加上三个标准差或值超出最近的晶须值(最近的四分位数加上四分位距值的 1.5 倍)。一旦我们识别出特定特征中的异常值,我们就可以使用以下一些技术来处理异常值:

  1. 删除:我们可以删除至少有一个异常值的观测值。但是,如果我们的数据在不同特征中有太多异常值,我们可能会丢失许多观测值。
  2. 替换:我们可以用平均值(例如给定特征的均值、中位数和众数)替换异常值。
  3. 特征变换或标准化:我们可以使用对数变换或特征标准化(如缩放中所述)来降低异常值的幅度。
  4. 上限和下限:我们可以用某个值替换超出该值的异常值,例如,用第 99 个百分位数的值替换第 99 个百分位数以上的所有值,用第 1 个百分位数的值替换第 1 个百分位数以下的所有值。


上图显示了两种常用的检测单变量异常值的技术。我们可以看到,这两种技术可以产生不同的异常值集。如果数据服从正态分布,则应使用均值+3 SD 技术。基于箱线图晶须的技术更为通用,可以应用于任何分布的数据。


上表显示了常用的异常值处理技术的应用。


请注意,有一些技术可以检测多变量异常值(相对于多个特征的异常值),但它们更复杂,并且通常不会在机器学习模型训练方面增加太多价值。另请注意,在使用大多数非参数机器学习模型(如支持向量机)和基于树的算法(如决策树、随机森林和 XGBoost)时,异常值不是问题。


2.缺失值处理

缺失数据在现实世界的数据集中非常常见。除了 XGBoost 等少数算法外,大多数传统机器学习算法都不允许训练数据集中出现缺失值。因此,修复缺失值是机器学习建模中的常规任务之一。有几种技术可以处理缺失值;但是,在实施任何技术之前,重要的是要了解缺失数据的原因,或者至少要知道数据是否随机缺失。如果数据不是随机缺失的,这意味着某些子组更有可能有缺失数据,那么为这些子组估算值可能会很困难,尤其是在数据很少或没有可用数据的情况下。如果数据是随机缺失的,我们可以使用下面描述的一些常见处理技术。它们都有优点和缺点,由我们来决定哪种方法最适合我们的用例。

  1. 删除:我们可以删除至少有一个缺失特征值的观测值。但是,如果我们的数据在不同特征中有太多缺失值,我们最终可能会丢失许多观测值。
  2. 删除:如果某个特征有大量缺失值,我们可以选择删除它。
  3. 用平均值代替:我们可以使用给定特征的平均值(例如均值、中位数和众数)来代替缺失值。这种方法很容易实现,但可能无法为所有类型的观察结果提供良好的估计值。例如,高欺诈风险交易的平均交易金额可能与低欺诈风险交易金额不同,而使用缺失的高欺诈风险交易金额的总体平均值可能不是好的替代方法。
  4. 最大似然法、多重插补法、K 近邻法:这些方法更为复杂,它们考虑了与数据集中其他特征的关系,可以提供比总体平均值更准确的估计值。但是,实现这些方法需要额外的建模或算法实现。

上表展示了常用的缺失值处理技术的应用。

3. 扩展

通常,我们在机器学习模型中使用的特征具有不同的范围。如果我们在不进行缩放的情况下使用它们,则绝对值较大的特征将主导预测结果。相反,为了让每个特征都有公平的机会为预测结果做出贡献,我们必须将所有特征置于同一尺度上。两种最常见的缩放技术是:

  1. 规范化:这种缩放技术将特征值限制在 0 到 1 之间。要应用规范化,我们减去最小特征值并将其除以该特征的范围(最小值和最大值之间的差值)。如果我们的某些特征有明显的偏差或有一些极端的异常值,那么规范化可能不是一种好方法。
  2. 标准化:此技术将特征数据分布转换为标准正态分布。我们可以通过减去平均值并除以标准差来实现此技术。如果特征具有急剧倾斜或一些极端异常值,则通常首选此技术。

请注意,决策树、随机森林、XGBoost 等基于树的算法可以处理未缩放的数据,并且在使用这些算法时不需要缩放。

上表展示了两种常用的特征缩放技术的应用。


上图显示了原始特征值、归一化特征值和标准化特征值之间的尺度差异。我们可以看出,缩放不会影响数据分布的形状。

4.降维

如今,我们拥有大量数据,可以构建大量特征来训练模型。对于大多数算法来说,拥有更多特征是件好事,因为它提供了更多选项来提高模型性能。然而,并非所有算法都是如此。基于距离度量的算法会遭受维数灾难——随着特征数量的大幅增加,两个观测值之间的距离值变得毫无意义。因此,要使用依赖于距离度量的算法,我们应确保不使用大量特征。如果我们的数据集具有大量特征,并且我们不知道要保留哪些特征以及要丢弃哪些特征,我们可以使用主成分分析 (PCA) 等技术。PCA 将一组旧特征转换为一组新特征。它创建新特征,使得具有最高特征值的特征能够捕获旧特征的大部分信息。然后,我们可以只保留前几个新特征并丢弃其余特征。

其他统计技术(如关联分析和特征选择算法)可用于监督学习问题以减少特征数量。但它们通常无法像 PCA 那样在特征数量相同的情况下捕获同等级别的信息。

上表显示了 PCA 在特征减少方面的应用。我们可以看到,前三个特征捕获了原始数据集中包含的 87% 以上的信息。在这种情况下,我们可以选择忽略这两个特征(f4 和 f5),从而损失 <13% 的信息。要保留的特征数量和要消除的特征数量将因问题而异,具体取决于各种因素。


5. 转换为正态分布

此步骤是个例外,因为它仅适用于目标而不适用于特征。此外,大多数机器学习算法对目标的分布没有任何限制,但某些算法(如线性回归)要求目标服从正态分布。线性回归假设所有数据点的误差值都是对称的,并且集中在零附近(就像正态分布的形状一样),而正态分布的目标变量确保满足这一假设。我们可以通过绘制直方图来了解目标的分布。像 Shapiro-Wilk 检验这样的统计检验通过检验这个假设告诉我们正态性。如果我们的目标不是正态分布的,我们可以尝试各种变换,如对数变换、平方变换、平方根变换等,以检查哪些变换使目标分布服从正态分布。还有一个 Box-Cox 变换,它尝试了多个参数值,我们可以选择最能将目标分布转换为正态的参数值。

上图显示了原始目标数据的三种变换。在这个特定情况下,我们可以看到对数变换效果最好,可以将原始数据分布转换为正态分布。


注意:虽然我们可以按任意顺序在特征中实现特征处理步骤,但我们必须仔细考虑它们的应用顺序。例如,使用值均值替换的缺失值处理可以在异常值检测之前或之后实现。但是,用于替换的平均值可能会有所不同,这取决于我们在异常值处理之前还是之后处理缺失值。本文概述的特征处理顺序按照问题对后续处理步骤的影响顺序来处理问题。因此,遵循此顺序通常应该可以有效地解决大多数问题。


结论

正如介绍中提到的,特征工程是机器学习的一个维度,它使我们能够在很大程度上控制模型的性能。为了充分发挥特征工程的潜力,我们在本文中学习了各种技术来创建新特征并对其进行处理,以便与机器学习模型最佳地协同工作。无论您选择使用本文中的哪些特征工程原理和技术,这里的重要信息是要理解机器学习不仅仅是要求算法找出模式。它是关于我们通过提供算法所需的数据类型来使算法有效地完成其工作。