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