Paper Reading: OpenFE: Automated Feature Generation with Expert-level Performance
Paper Reading 是从个人角度进行的一些总结分享,受到个人关注点的侧重和实力所限,可能有理解不到位的地方。具体的细节还需要以原文的内容为准,博客中的图表若未另外说明则均来自原文。
论文概况 | 详细 |
---|---|
标题 | 《OpenFE: Automated Feature Generation with Expert-level Performance》 |
作者 | Tianping Zhang, Zheyu Zhang, Zhiyuan Fan, Haoyan Luo, Fengyuan Liu, Qian Liu, Wei Cao, Jian Li |
发表会议 | International Conference on Machine Learning(ICML) |
发表年份 | 2023 |
会议等级 | CCF-A |
论文代码 | https://github.com/IIIS-Li-Group/OpenFE |
作者单位:
- Institute for Interdisciplinary Information Sciences (IIIS), Tsinghua University, Beijing, China
- School of Data Science, The Chinese University of Hong Kong (Shenzhen), Shenzhen, China
- Paul G. Allen School of Computer Science & Engineering, University of Washington, Seattle, U.S.
- Sea AI Lab, Singapore
- Microsoft Research Asia, Beijing, China.
研究动机
特征的质量对表格数据的学习性能有显著影响,特征生成的目标是将基本特征转化为信息更丰富的特征,以更好地描述数据并提高学习性能。由于手动特征生成耗时且需要具体案例的领域知识,因此自动特征生成成为自动化机器学习的一个重要课题。expand-and-reduce 是自动特征生成中最流行的框架,在该框架中首先通过扩展基本特征来创建候选特征池,然后消除无效的候选特征。在实践中该模型面临着两个挑战,第一个是如何有效和准确地评估新特性的增量性能,第二个是计算和评估大量的候选特征。标准的评估过程包括将新特征纳入基本特征集中,重新训练机器学习模型并观察验证损失的变化。然而重新训练模型通常很耗时,对于大型数据集来说计算开销过于昂贵。
文章贡献
本文提出了一种自动特征生成模型 OpenFE,它通过一个特征增强算法和一个两阶段修剪算法来解决 expand-and-reduce 框架的挑战。本文认为模型再训练并不需要准确评估新特征的增量性能,在梯度增强的启发下提出了一种用于评估新特征增量性能的高效算法 FeatureBoost。同时本文提出了一种两阶段修剪算法,以有效地从大量候选特征中检索有效特征。由于有效特征通常是稀疏的,两阶段剪枝算法以粗到细的方式进行特征剪枝。实验部分在各种数据集中验证了 OpenFE 的性能,OpenFE 大大优于现有的基线方法。同时在自动特征生成模型的研究中很多现有方法都没有开源,本文还复现了一些经典方法并进行了基准测试,以便在未来的研究中进行公平的比较。
本文方法
OpenFE 遵循扩展-缩减框架实现自动特征生成,流程过程如下伪代码所示。首先扩展候选特征空间,然后通过去除无效特征来减少空间。
问题定义
对于给定的训练数据集 D,将其分成训练集 Dtr 和验证集 Dvld。假设 D 由特征集 T+S 组成,其中 T 为基本特征集,S 为生成的特征集。使用学习算法 L 来学习模型 L(Dtr, T+S),并计算评估指标 E(L(Dtr, T+S), Dvld, T+S)来衡量模型的性能,值越大表示性能越好。
特征生成问题可以使用如下公式表示,其中 A(T) 是由基特征集生成的所有可能候选特征的集合,目标是从 A(T) 中找到一个使评价指标最大化的特征集S。
扩展步骤
扩展步骤中使用一些算子来变换基本特征,创建候选特征池。根据运算符所操作的特征数量,将运算符分为一元运算符(如 log、sigmoid、square)和二元运算符(如 x、÷、min、max、GroupByThenMean)。一些示例如下表所示,完整的运算符列表在原文附录中。
通过枚举的方式扩展候选特征空间,对于每个操作符将迭代所有基本特征,转换为新特征。给定一个具有 m 个特征的数据集,候选特征的数量为 O(dm2),其中 d 是二进制操作符的数量。对于包含数百个特征的数据集,可能有数百万个候选特征。
缩减步骤
缩减步骤的目的是从扩展步骤得到的候选特征中高效、准确地识别出有效特征,针对这个问题,本文提出了一种评估新特征有效性的高效算法 FeatureBoost。但是使用 FeatureBoost 计算和评估大量候选特征的计算成本仍然很高,因此本文设计了一种两阶段剪枝算法,以进一步加快缩减步骤。
Featureboost 评估算法
自动化特征生成的关键挑战之一是:当生成特征添加到基本特征集中时,如何度量这些新特征提供的性能改进。给定一个 n 个样本的数据集,数据集表示为 D={(xi[T],yi)|i=1,2,···,n},其中 xi[T]∈R|T| 表示第 i 个样本投影到特征集 T 上。给定一个使用 T 的训练的机器学习模型 f,模型的预测表示为 y^i=f(xi[T])。目标函数表示为 L(f)=∑ni=1=l(yi,f(xi[T])),其中 L(·,·) 是损失函数。当引入一组新特征 T' 时,标准的评估流程是重新训练一个具有完整特征集 T+T' 的新模型 f',并计算目标函数 L(f')∑ni=1=l(yi,f'(xi[T+T']))。使用损失函数的改进量 L(f)−L(f') 表示 T' 的增量性能,增量性能越大越好。使用完整的特征集重新训练模型通常非常耗时,使得标准的评估过程的计算开销很大。
本文的作者认为没有必要重新训练模型来估计新特征的增量性能,在本文中提出了一种快速增量性能评估算法 FeatureBoost。FeatureBoost 的伪代码如下所示,输入包括数据集 D、特征集 T ' 和预测 y^。受梯度增强的启发,FeatureBoost 只训练一个具有新特征集 T' 的模型来拟合 y^ 与目标 y 之间的残差,通过最小化 L(f')∑ni=1=l(yi,y^+f'(xi[T'])) 实现优化新模型 f'。最终以 ∆=L(f)−L(f') 作为对 T' 增量性能的估计。
通常 FeatureBoost 的输入特征集是新特征,在后续还会考虑新特征与原有特征之间的交互效应。此时输入 T' 实际上是完整的特征集 T+T',相比于标准的评估流程 FeatureBoost 能利用 y^ 来更快地收敛。
两阶段剪枝算法
虽然 FeatureBoost 是一种估计新特征的增量性能的有效方法,但是评估大量特征的计算开销仍然非常昂贵。本文在 FeatureBoost 的基础上提出了一种两阶段剪枝算法,以粗到精的方式快速去除冗余的新特征。
第一阶段是通过单独检查每个特征的有效性来粗略地减少候选特征的数量,使用的是连续特征修剪算法。设计该算法的动机是 multi-armed bandit 问题中的连续减半算法,如下伪代码所示。首先将数据集分成2q 个数据块,每个数据块有 ⌊n/2q⌋ 个样本,q 是一个超参数。然后迭代去除冗余的候选特征,在第 i 次迭代中首先通过随机选择 2i 个数据块创建一个数据子集 Di,对于每个候选特征 τ 计算 ∆τ=FeatureBoost(Di,{τ},y^}) 作为候选特征的分数。每次迭代根据得分 ∆ 保留候选特征的上半部分,剔除其余部分,最后返回具有正 ∆τ 的每个候选特征 τ。如果有两个特征具有完全相同的 ∆τ 值,算法将删除其中一个用于重复数据删除。例如当 τ1 的最小值大于 τ2 和 τ3 的最大值时,max(τ1,τ2) 和 max(τ1,τ3) 是完全相同的,此时只保留 max(τ1,τ2) 作为候选特征。
与第一阶段不同,第二阶段的特征重要性归因算法考虑候选特征与基本特征之间的细粒度交互效应,如下伪代码所示。设剪接后的候选特征为 A′(T),使用候选特征 A'(T) 和基本特征 T 一起作为 FeatureBoost 的输入。计算 ∆=FeatureBoost(D,T+A′(T),y^) 评估剩余候选特征 A′(T) 的增量性能,其中考虑了 T 与 A′(T) 之间的相互作用效应。特征重要性归因方法可以将重要性得分归因于每个特征,常用的方法包括杂质平均减少 MDI、排列特征重要性 PFI 和 SHAP。根据它们的重要性分数对候选特征进行排序,最后只选择排名靠前的候选特征来提高算法的泛化性。
实现设置
在 OpenFE 使用梯度增强决策树 GBDT 对表格数据建模,使用流行的 LightGBM 实现。使用 MDI 进行特征重要性归因,尽管特征生成方法依赖于 GBDT,但生成的特征也可以增强各种 DNN 的学习性能。
理论分析
测试损失分析
许多表格数据集包含类别特征和数值特征,因此使用诸如 GroupByThenMean 之类的操作先对类别特征进行聚合然后再进行转换。本文提出了一个理论数据模型,在有界的 Rademacher 复杂度下,证明了经验风险最小化与特征生成增强(如 GroupByThenMean 操作)可以随着样本量和组大小的增加而实现测试损失的降低。
假设数据集是通过两阶段过程生成的,用 k1 和 k2 分别表示训练集和测试集中的组数,每组中的样本数量用 h 表示。存在一个特征生成函数 H ,使得经验风险最小化器的测试损失的上界如以下公式所示,概率至少为 1−δ。假设 Rademacher 复杂度 Radk1(F)→0 为 k1→∞,当 k1 和 h→∞ 时,测试损失趋于0。
另一方面,如果不使用任何特征生成,则证明结论为任何学习器 f' 都会导致一个不消失的常数测试损失。即无论 k1、k2、h 有多大,对于任何预测器 f':X→Y,测试损失 LDtest(f')≥3/64。
复杂度分析
OpenFE 的时间复杂度来源于如下 3 个部分:
- 生成基础预测的复杂度:设 n 为样本两,m 为数据集的基本特征个数,k 为折数。生成基本预测的复杂度是 k 次训练 GBDT 训练的复杂度,因此是 O(kTdnm),其中每个 GBDT 包含 T 棵最大深度为 d 的树;
- 第一阶段的复杂度:假设将数据集分成 2q 个数据块,候选特征的数量为 m2。在连续的特征减半后,剩下2-qm2 的特征。复杂度为 ∑qqi=02(i−q)·m2·C(2−in, 1),其中 C(n, m)为数据形状为 n×m 的 GBDT 训练复杂度。如果 GBDT 包含 T1 棵最大深度为 d1 的树,则时间复杂度为 O(2−qqT1d1nm2)。
- 第二阶段的复杂度:主要由单 GBDT 的训练决定,假设 GBDT 有 T2 棵树,最大深度为 d2,则第二阶段的时间复杂度为 O(2−qT2d2nm2)。
在 OpenFE 的设置中,GBDT 的树数和最大深度是预定义的固定常数。如果 T 和 d 为常数,则 OpenFE 的总体复杂度为 O(2-qqnm2)。
实验结果
数据集和实验设置
实验使用了 10 个不同的公共数据集,如下表所示,所有方法都使用相同的方式分为训练集-验证集-测试集。
比较的基线方法包括:无特征构造、FCTree、SAFE、AutoFeat、AutoCross、FETCH,并将处理表格数据的神经网络模型 DCN-V2 的最后一个隐藏层作为新特征称为 NN 方法。其中 FCTree、SAFE、AutoCross 这几种方法在原文中并没有开源,本文对其进行了复现。其他一些方法例如 LFE、ExploreKit、NFS、TransGraph 由于缺乏一些关键细节的描述导致无法复现,本文也在他们的数据集上运行 OpenFE 并进行比较。
对比实验结果
将 OpenFE 与其他基线方法进行比较,使用 LightGBM 来评估不同方法生成的新特征的有效性。对于每个数据集生成一阶特征,并设置其他的方法也生成相同数量的新特征。比较结果如下表所示,可以看到 OpenFE 比基线方法有明显的优势。
对比神经网络
此处将 OpenFE 生成的特征输入一些基于表格数据的神经网络方法,包括:AutoInt、DCN-v2、NODE、TabNet、FT-Transformer。实验结果如下表所示,可见 OpenFE 生成的新特征可以提高专门为表格数据设计的各种神经网络的性能。
消融实验
此处进行消融实验,将 OpenFE 设置成两种不同的变体命名:
- OpenFE-MI:使用特征和目标之间的互信息作为评分标准,而不是使用 FeatureBoost 来评估新特征的有效性;
- w.o.Successive:OpenFE 没有使用连续的特征修剪,通过对数据进行子采样使生成的所有特征都能导入内存中。
实验结果如下表所示,可见在评估新特征的有效性方面,互信息比 FeatureBoost 更差,同时直接对数据进行子采样通常会损害性能。
运行时间比较
此处比较了不同方法在 TE、DI、NO、VE 数据集上的运行时间,结果如下图所示。可见 OpenFE 在效率上比 AutoFeat、AutoCross 和 FETCH 更高效,OpenFE 只运行几分钟就能在大多数中等规模的数据集上生成特征。
特征构造是否总是有用?
针对这个问题,本文使用 OpenML CC18 基准对 68 个数据集进行了大规模的实验研究。结果可见 OpenFE 和其他一些方法对其中19个数据集没有显著的改进,有些数据集可能不需要特征生成。但总体来看 OpenFE 是高效的,它可以快速获得初步结果并评估特征生成对其数据集的影响。
优点和创新点
个人认为,本文有如下一些优点和创新点可供参考学习:
- 针对难以对生成的特征进行评估的问题,本文提出了一种 FeatureBoost 方法通过对新特征训练新模型来进行度量,将 Boosting 的思想融合进特征工程中,是非常有新意的思路;
- 为了从构造的海量特征中挑选出高质量的特征,本文通过一种两阶段剪枝的方法,由粗到细地进行特征选择,具有良好的效率和有效性;
- 本文从理论地角度分析了特征构造算子对测试损失的影响,证明了使用特征构造算子的情况下通过增大样本量和组数可以降低测试损失的结论;
- 实验部分数据丰富有力,本文不仅做了非常多的实验对 OpenFE 的性能进行了验证,还复现了很多未公开源码的自动特征构造框架的代码。