ARTICLE
深度特征合成
深度特征合成 概述 深度特征合成(Deep Feature Synthesis,简称 DFS)是一种自动特征工程方法,旨在从关系型数据中系统化地生成有价值的预测特征。该方法由 James Max Kanter 和 Kalyan Veeramachaneni 于 2015 年在 MIT 提出,被广泛应用于自动化机器学习(AutoML)平台和预测建模流程中。与传
深度特征合成
概述
深度特征合成(Deep Feature Synthesis,简称 DFS)是一种自动特征工程方法,旨在从关系型数据中系统化地生成有价值的预测特征。该方法由 James Max Kanter 和 Kalyan Veeramachaneni 于 2015 年在 MIT 提出,被广泛应用于自动化机器学习(AutoML)平台和预测建模流程中。与传统手工特征工程不同,DFS 通过预定义的特征原语(feature primitives)组合和层次化聚合,在多个关系层级上自动构造特征,大幅减少了人工成本和领域知识的依赖。
动机与背景
在现代数据科学实践中,原始数据通常以关系型数据库的形式存储,包含多个相互关联的表(如客户表、订单表、商品表等)。构建高性能预测模型的关键不仅在于算法选择,更在于能否从这些多表关系中提取出能够反映实体行为模式和统计规律的特征。传统的特征工程依赖领域专家手动编写 SQL 聚合查询或编写特征生成代码,过程繁琐、耗时且难以复用。DFS 正是为应对这一挑战而设计的自动化解决方案。
核心概念
特征原语
DFS 的核心构件是特征原语——一组可组合的基本数学或统计操作,作用于数据列上生成新的特征。常见的特征原语分为两类:
- 聚合原语(Aggregation Primitives):将多行数据汇总为单一数值。典型的聚合原语包括:
- \texttt{sum}、\texttt{mean}、\texttt{count}、\texttt{min}、\texttt{max}、\texttt{std}、\texttt{var}
- \texttt{trend}(线性趋势系数)、\texttt{skew}(偏度)、\texttt{kurtosis}(峰度)
- \texttt{mode}(众数)、\texttt{nunique}(唯一值计数)
- 转换原语(Transform Primitives):对单列或多列数据进行逐行运算,包括:
- 算术运算:\texttt{add}、\texttt{subtract}、\texttt{multiply}、\texttt{divide}
- 数学变换:\texttt{log}、\texttt{sqrt}、\texttt{abs}、\texttt{cumsum}、\texttt{diff}
- 时间窗口运算:\texttt{rolling\_mean}、\texttt{exp\_weighted\_avg}
这些原语可以通过组合产生更复杂的特征。例如,先对某客户所有订单计算 \texttt{mean(amount)}(聚合),再对结果进行 \texttt{log} 变换(转换),即可得到一个新特征。
多关系层次与深度
DFS 的"深度"体现在它能沿实体之间的关系路径进行多层次特征合成。考虑一个典型的多表场景:
- 目标表(Entity Table):待预测的实体(如客户)
- 直接相关表(Direct Table):与目标表有一对多关系的表(如订单)
- 间接相关表(Indirect Table):与直接相关表再有关系的表(如商品)
DFS 可以在上述每个关系层次上应用特征原语。例如:
- 深度 1:对订单表按客户 ID 聚合,计算 \texttt{mean(order\_amount)}、\texttt{count(order\_id)} 等特征。
- 深度 2:对商品表按订单 ID 再按客户 ID 进行双重聚合,计算 \texttt{mean(avg(unit\_price))} 等二阶聚合特征。
深度越深,特征越复杂,但也面临着维度过高和过拟合的风险。
算法流程
DFS 的自动特征生成过程可归纳为以下步骤:
- 模式识别:解析关系型数据库的模式(schema),识别各表之间的外键关联和一对多/多对多关系。
- 原语组合:根据用户指定的或系统推荐的特征原语列表,为每个关系路径生成候选特征组合。
- 特征扩展:沿关系树自底向上逐层应用聚合原语,生成多层次特征。
- 特征筛选:对生成的大量候选特征进行筛选,剔除低方差、高缺失率或高度相关的特征,以控制特征空间的规模。
- 输出:将生成的扁平特征矩阵与目标标签对齐,供下游机器学习模型使用。
与 AutoML 的关系
DFS 是 AutoML 体系中特征工程自动化环节的关键技术。典型的 AutoML 流水线包括:
- 数据预处理 → 特征工程(DFS) → 特征选择 → 模型选择与调参 → 模型评估
其中,DFS 填补了"原始关系数据"与"机器学习模型输入"之间的鸿沟。相较之下,传统 AutoML 大多聚焦于超参数优化和模型集成,而忽视了特征工程这一同样重要的环节。
优缺点分析
优点
- 自动化程度高:无需人工编写特征代码,显著加速建模流程。
- 可复现性强:同一套原语组合可在不同数据集中复用,确保实验一致性。
- 探索全面:系统化遍历所有关系路径,不易遗漏潜在的强预测特征。
- 灵活性好:用户可通过自定义原语扩展 DFS 的表达能力,适应特定领域需求。
缺点与局限
- 特征爆炸:随着关系深度和原语数量的增加,特征数量呈指数级增长,容易导致过拟合和计算开销过大。
- 缺乏因果理解:DFS 生成的统计特征不一定具有因果意义,部分特征可能存在虚假相关性。
- 领域知识整合困难:纯数据驱动的特征构造难以融入特定业务逻辑或先验知识。
- 内存消耗大:在大型关系数据集上,多层级联聚合需要大量内存和计算资源。
实际应用
DFS 已被广泛应用于以下场景:
- 金融风控:从客户交易流水、申请记录、外部征信等多表数据中自动生成违约预测特征。
- 电商推荐:基于用户浏览、购买、收藏等行为数据,自动构造用户兴趣和购买倾向特征。
- 医疗健康:从电子健康记录(EHR)中的就诊、诊断、用药等多个关联表中生成患者风险评分特征。
- 物联网预测性维护:从传感器读数、设备日志和维修记录中提取设备健康状态特征。
实现与工具
当前最成熟的 DFS 开源实现是 Featuretools(Python 库),它提供了完整的 DFS 框架、丰富的内置原语库以及自定义原语接口。通过简单的 API 调用即可完成从关系数据到特征矩阵的转换:
import featuretools as ft
es = ft.EntitySet('customers')
es = es.add\_dataframe(...)
feature\_matrix, feature\_defs = ft.dfs(
entityset=es,
target\_entity='customers',
max\_depth=2,
primitives=['sum', 'mean', 'count', 'mode']
)
此外,部分商业 AutoML 平台(如 H2O Driverless AI、DataRobot)也内置了类似的特征合成引擎。
总结
深度特征合成是自动特征工程领域的一项里程碑式技术。它通过层次化的原语组合与关系遍历,将特征构造从一门"手艺"转变为可系统执行的工程流程。尽管存在特征爆炸和因果解释性不足等挑战,DFS 在提升预测建模效率、减少人工偏见方面展现出显著价值。随着 AutoML 和关系学习的持续发展,特征合成技术有望与深度学习端到端学习方法进一步融合,形成更强大的自动建模体系。