您一定听过“垃圾进,垃圾出”这句话。这句话在训练机器学习模型时确实适用。如果我们使用不相关的数据训练机器学习模型,即使是最好的机器学习算法也无济于事。相反,使用精心设计的有意义的特征,即使是简单的机器学习算法也能实现卓越的性能。那么,我们如何创建这些有意义的特征来最大限度地提高模型的性能呢?答案是特征工程。在使用传统机器学习算法(例如回归、决策树、支持向量机和其他需要数字输入的算法)时,特征工程尤为重要。然而,创建这些数字输入不仅仅需要数据技能。这是一个需要创造力和领域知识的过程,既是艺术也是科学。
广义上讲,我们可以将特征工程分为两个部分:1)创建新特征;2)处理这些特征,使它们与所考虑的机器算法最佳地协同工作。在本文中,我们将讨论针对横截面、结构化、非 NLP 数据集的特征工程的这两个组成部分。
收集原始数据可能非常耗时,到任务结束时,我们可能已经筋疲力尽,无法再投入更多时间和精力来创建其他特征。但这是我们必须抵制直接投入模型训练的诱惑的地方。我向你保证,这是值得的!此时,我们应该停下来问自己:“如果我根据我的领域知识手动进行预测,哪些特征可以帮助我做好这项工作?”提出这个问题可能会为设计新的有意义的特征开辟可能性,否则我们的模型可能会错过这些特征。一旦我们考虑了哪些其他特征可以为我们带来好处,我们就可以利用下面的技术从原始数据中创建新特征。
顾名思义,这种技术可帮助我们组合多个数据点以创建更全面的视图。我们通常使用标准函数(如计数、总和、平均值、最小值、最大值、百分位数、标准差和变异系数)对连续数值数据应用聚合。每个函数都可以捕获不同的信息元素,最佳函数取决于具体用例。通常,我们可以对特定时间或事件窗口应用聚合,这在该问题的背景下是有意义的。
让我们举一个例子,我们想要预测给定的信用卡交易是否是欺诈性的。对于这个用例,我们毫无疑问可以使用特定于交易的特征,但除了这些特征之外,我们还可以从创建聚合的客户级特征中受益,例如:
过去五年内客户受骗的次数:以前多次受骗的客户再次受骗的可能性更大。因此,使用这种汇总的客户级视图可以提供适当的预测信号。
最近五笔交易金额的中位数:通常,当信用卡被盗用时,欺诈者可能会尝试多次小额交易来测试该卡。现在,单笔小额交易非常常见,可能不是欺诈的迹象,但如果我们在短时间内看到多次此类交易,则可能表明信用卡已被盗用。
在许多类型的问题中,固定模式的变化是预测或异常检测的宝贵信号。差异和比率是表示数值特征变化的有效技术。就像聚合一样,我们也可以在这个问题的背景下,在有意义的时间窗口内应用这些技术。
例子:
过去 1 小时内新商户交易的百分比与过去 30 天内新商户交易的百分比之间的差异:快速连续的新商户交易百分比高本身可能表明存在欺诈风险,但当我们看到这种行为与客户的历史行为相比发生了变化时,它就会成为一个更加明显的信号。
当天交易数与过去 30 天日均交易数的比率:当信用卡被盗用时,它可能会短时间内进行大量交易,这可能与过去的信用卡使用情况不符。当天交易数与过去 30 天日均交易数的比率过高可能表明存在欺诈性使用模式。
我们可以使用年龄计算技术,通过计算两个时间戳或日期之间的差值,将日期或时间戳特征转换为数字特征。如果与特征值相关的年限可以作为有价值的预测信号,我们还可以使用这种技术将某些非数字特征转换为有意义的数字特征。
例子:
指示特征或布尔特征具有二进制值 {1, 0} 或 {True, False}。指示特征非常常见,用于表示各种类型的二进制信息。在某些情况下,我们可能已经以数字形式拥有此类二进制特征,而在其他情况下,它们可能具有非数字值。要使用非数字二进制特征进行模型训练,我们所要做的就是将它们映射到数值。
除了这些常见的指标特征和用法之外,我们还可以利用指标编码作为一种工具来表示非数字数据点之间的比较。这一属性使其特别强大,因为它为我们提供了一种衡量非数字特征变化的方法。
例子:
近期登录事件中验证失败:近期登录失败可能与较高的欺诈交易风险相关。在这种情况下,原始数据可能对此特征具有“是”或“否”值;我们在这里要做的就是将这些值映射到 1 或 0。
国家/地区位置与上次交易时的变化:国家/地区位置的变化可能表明信用卡已被盗用。在这里,创建一个指示特征来表示非数字特征“国家/地区位置”的变化将捕获此国家/地区变化信息。
如果我们的特征数据是分类形式(数字或非数字),则可以应用此技术。数字分类形式是指包含非连续或非测量数据的数字数据,例如地理区域代码、商店 ID 和其他此类数据。独热编码技术可以将此类特征转换为一组指示特征,我们可以使用这些特征来训练机器学习模型。对分类特征应用独热编码将为该分类变量中的每个类别创建一个新的二进制特征。由于新特征的数量会随着类别数量的增加而增加,因此此技术适用于类别数量较少的特征,尤其是在数据集较小的情况下。标准经验法则之一建议,如果每个类别至少有 10 条记录,则应用此技术。
例子:
这种技术适用于我们将独热编码应用于的同一类型的特征,但与独热编码相比,它有一些优点和缺点。当类别数量很高(高基数)时,使用独热编码会不合需要地增加特征数量,这可能导致模型过度拟合。在这种情况下,目标编码可能是一种有效的技术,前提是我们正在研究监督学习问题。它是一种将每个类别值映射到该类别目标的预期值的技术。如果处理具有连续目标的回归问题,则此计算将类别映射到该类别的平均目标值。对于具有二元目标的分类问题,目标编码将类别映射到该类别的正事件概率。与独热编码不同,这种技术的优点是不增加特征数量。这种技术的缺点是它只能应用于监督学习问题。应用这种技术也可能使模型容易过度拟合,特别是当某些类别的观察值数量较少时。
例子:
一旦我们从原始数据中创建新特征,下一步就是处理它们以获得最佳模型性能。我们通过下一节中讨论的特征处理来实现这一点。
特征处理是指一系列数据处理步骤,可确保机器学习模型按预期拟合数据。虽然在使用某些机器学习算法时需要其中一些处理步骤,但其他处理步骤可确保我们在特征和所考虑的机器学习算法之间达成良好的工作化学反应。在本节中,让我们讨论一些常见的特征处理步骤以及我们为什么需要它们。
一些机器学习算法,尤其是参数算法(例如回归模型)会受到异常值的严重影响。这些机器学习算法试图适应异常值,从而严重影响模型参数并损害整体性能。要处理异常值,我们必须首先识别它们。我们可以应用某些经验法则来检测特定特征的异常值,例如绝对值大于平均值加上三个标准差或值超出最近的晶须值(最近的四分位数加上四分位距值的 1.5 倍)。一旦我们识别出特定特征中的异常值,我们就可以使用以下一些技术来处理异常值:
请注意,有一些技术可以检测多变量异常值(相对于多个特征的异常值),但它们更复杂,并且通常不会在机器学习模型训练方面增加太多价值。另请注意,在使用大多数非参数机器学习模型(如支持向量机)和基于树的算法(如决策树、随机森林和 XGBoost)时,异常值不是问题。
缺失数据在现实世界的数据集中非常常见。除了 XGBoost 等少数算法外,大多数传统机器学习算法都不允许训练数据集中出现缺失值。因此,修复缺失值是机器学习建模中的常规任务之一。有几种技术可以处理缺失值;但是,在实施任何技术之前,重要的是要了解缺失数据的原因,或者至少要知道数据是否随机缺失。如果数据不是随机缺失的,这意味着某些子组更有可能有缺失数据,那么为这些子组估算值可能会很困难,尤其是在数据很少或没有可用数据的情况下。如果数据是随机缺失的,我们可以使用下面描述的一些常见处理技术。它们都有优点和缺点,由我们来决定哪种方法最适合我们的用例。
通常,我们在机器学习模型中使用的特征具有不同的范围。如果我们在不进行缩放的情况下使用它们,则绝对值较大的特征将主导预测结果。相反,为了让每个特征都有公平的机会为预测结果做出贡献,我们必须将所有特征置于同一尺度上。两种最常见的缩放技术是:
请注意,决策树、随机森林、XGBoost 等基于树的算法可以处理未缩放的数据,并且在使用这些算法时不需要缩放。
如今,我们拥有大量数据,可以构建大量特征来训练模型。对于大多数算法来说,拥有更多特征是件好事,因为它提供了更多选项来提高模型性能。然而,并非所有算法都是如此。基于距离度量的算法会遭受维数灾难——随着特征数量的大幅增加,两个观测值之间的距离值变得毫无意义。因此,要使用依赖于距离度量的算法,我们应确保不使用大量特征。如果我们的数据集具有大量特征,并且我们不知道要保留哪些特征以及要丢弃哪些特征,我们可以使用主成分分析 (PCA) 等技术。PCA 将一组旧特征转换为一组新特征。它创建新特征,使得具有最高特征值的特征能够捕获旧特征的大部分信息。然后,我们可以只保留前几个新特征并丢弃其余特征。
其他统计技术(如关联分析和特征选择算法)可用于监督学习问题以减少特征数量。但它们通常无法像 PCA 那样在特征数量相同的情况下捕获同等级别的信息。
此步骤是个例外,因为它仅适用于目标而不适用于特征。此外,大多数机器学习算法对目标的分布没有任何限制,但某些算法(如线性回归)要求目标服从正态分布。线性回归假设所有数据点的误差值都是对称的,并且集中在零附近(就像正态分布的形状一样),而正态分布的目标变量确保满足这一假设。我们可以通过绘制直方图来了解目标的分布。像 Shapiro-Wilk 检验这样的统计检验通过检验这个假设告诉我们正态性。如果我们的目标不是正态分布的,我们可以尝试各种变换,如对数变换、平方变换、平方根变换等,以检查哪些变换使目标分布服从正态分布。还有一个 Box-Cox 变换,它尝试了多个参数值,我们可以选择最能将目标分布转换为正态的参数值。
注意:虽然我们可以按任意顺序在特征中实现特征处理步骤,但我们必须仔细考虑它们的应用顺序。例如,使用值均值替换的缺失值处理可以在异常值检测之前或之后实现。但是,用于替换的平均值可能会有所不同,这取决于我们在异常值处理之前还是之后处理缺失值。本文概述的特征处理顺序按照问题对后续处理步骤的影响顺序来处理问题。因此,遵循此顺序通常应该可以有效地解决大多数问题。
正如介绍中提到的,特征工程是机器学习的一个维度,它使我们能够在很大程度上控制模型的性能。为了充分发挥特征工程的潜力,我们在本文中学习了各种技术来创建新特征并对其进行处理,以便与机器学习模型最佳地协同工作。无论您选择使用本文中的哪些特征工程原理和技术,这里的重要信息是要理解机器学习不仅仅是要求算法找出模式。它是关于我们通过提供算法所需的数据类型来使算法有效地完成其工作。