核心总结
好的特征,能让简单的模型打败复杂的模型。
引子:一道数学题背后的秘密
先看一道经典数学题:一只狗以每小时 10 英里的速度,在两位相向而行、相距 100 英尺、速度均为 5 英里/小时的配偶之间来回跑。问狗总共跑了多远?
若试图用微积分计算每一段位移,问题将异常复杂;但若换个角度——先算出两人相遇时间,再乘以狗的速度,答案便迎刃而解。
机器学习面临同样的困境。大多数算法接收的是“特征向量”,即对现实世界的特定视角描述。选择正确的表达方式,往往比调整算法本身更能提升性能。这正是特征工程的核心。
一、什么是特征工程?
特征工程是将问题领域转化为适合机器学习技术处理的过程,主要涉及:
- 特征的发现:从原始数据中识别有价值的信息。
- 逐步改进:基于领域知识和模型表现,持续优化特征。
正如 Andrew Ng 所言:“应用机器学习基本上就是特征工程”。
关键区别:原始数据 ≠ 特征
例如,原始数据是“日期”列,而特征可能是从中提取的“年份”、“月份”、“星期几”或“是否周末”。特征工程的本质是决定如何加工原始数据,使其能被 ML 算法更好地理解。
二、为什么特征工程如此重要?
1. 它决定了模型的上限
“有些机器学习项目成功了,有些失败了。区别是什么?最重要的因素就是所用的特征。” ——Pedro Domingos
优秀的特征能让简单模型超越复杂模型,而糟糕的特征会让最先进的算法也无能为力。
2. 它占据了工业 ML 中的大部分精力
据统计,特征工程占据工业级机器学习项目约 90% 的工作量。这不仅需要技术能力,更需要对业务和数据的深刻理解。
3. 它是注入领域知识的主要途径
在医疗诊断等场景中,医生的专业判断需转化为可计算的特征。特征工程是将人类专业知识转化为机器可理解形式的关键桥梁。
三、ML 生命周期 vs FE 生命周期
标准 ML 流程
原始数据 → EDA(探索性数据分析)→ 选择模型 → 特征生成 → 划分训练/验证/测试集 → 训练 → 超参数调优 → 评估
特征工程流程的特殊之处
- 必须有独立的开发测试集:反复查看验证集表现本质上是“窥探”数据。若只有一份测试集,最终评估结果会过于乐观。
- 建议保留两份最终特征集:
- 优化集:使用全部技巧,性能高但过拟合风险大。
- 保守集:仅使用稳定特征,性能略低但更可靠。
- 仅在优化集显著优于保守集时,才采用优化集。
- 这是一个迭代过程:特征工程不是一步到位,而是“实验→分析错误→改进特征→再实验”的循环。
四、核心分析工具:EDA 与 Error Analysis
1. 探索性数据分析(EDA)
即使缺乏领域知识,也可通过数据分析获取价值:
- 检查各列值的分布(均值、中位数、极值、方差等)。
- 使用箱线图发现异常值。
- 计算特征与目标变量的相关性。
- 利用散点图、透视表等可视化工具。
关键心态:对可疑的数据行为保持怀疑。若实际数据模式与领域知识不符,可能揭示了数据提取错误或采样偏差。
2. 错误分析(Error Analysis)
如果说 EDA 关注“数据长什么样”,错误分析则关注“模型在哪出错及原因”。
实操方法:
- 找出误差最大的样本逐个深入分析。
- 进行消融实验(Ablation Study):逐一移除某个特征,观察误差变化。
- 若移除某特征导致误差大幅增加,说明其关键;若误差反而下降,说明其引入了噪声。
案例:在预测城市人口任务中,都柏林等历史名城被严重高估。消融实验发现,“计数类特征”(如维基百科提及次数)是主因。解决方案是对这些特征应用对数变换以压制极端值影响。
五、特征操作的三大流派
流派一:合并与组合(Combining Features)
1. 归一化(Normalization)
不同特征量纲不同(如距离与体重),直接输入会增加算法学习难度。常用方法包括:
- Min-Max 缩放:压缩到 [0,1] 区间。
- 标准化(Standardization):转换为均值 0、方差 1 的分布。
- 单位长度缩放:用范数除以向量长度。
关键提醒:归一化参数只能在训练集上计算,然后应用到验证/测试集。在测试集重新计算是常见错误。
2. 离散化(Discretization)
将连续值转换为离散区间。例如年龄划分为“儿童”、“青少年”等。当数值小区间差异不重要但跨区间差异关键时(如 5 岁与 6 岁 vs 85 岁与 86 岁),此法尤为有效。
3. 描述性特征(Descriptive Features)
用统计摘要代替原始数据,常见于图像等高维数据:
- 直方图:统计数值区间频次。
- 文本长度:在 NLP 中往往具有强预测力。
- 偏度、峰度:描述数据分布形态。
4. 处理异常值
原则:不要轻易删除异常值!在保险数据中,巨额索赔恰恰是模型需关注的核心。仅当确信值来自数据错误(如年龄 999 岁)时才删除。
流派二:扩充与展开(Expanding Features)
1. 可计算特征(Computable Features)
通过算术运算生成新特征,如面积=长×宽、BMI=体重/身高²。当算法无法自动学习某些函数关系(如线性模型难以学习乘积)时,显式添加效果显著。
2. 缺失值处理(Imputation)
常见策略:
- 删除含缺失值的样本(仅当缺失很少时)。
- 添加“是否缺失”指示特征。
- 用均值/中位数/众数填充。
- 训练模型预测缺失值。
- 使用支持缺失值的算法。
洞察:有时“缺失”本身就是强信号,如用户未阅读详情页可能预示购买意愿低。
3. 独热编码(One-Hot Encoding)
将类别特征转换为多个二元特征。
4. 目标率编码(Target Rate Encoding)
用该类别对应的目标变量平均值替代类别特征。注意:必须在交叉验证的折外(Out-of-Fold)方式下计算,以防目标泄露。
流派三:缩减与降维(Reducing Features)
1. 特征选择(Feature Selection)
三种主流方法:
- 过滤法(Filter):基于统计指标独立评估特征相关性。
- 包装法(Wrapper):将特征选择视为搜索问题(如前向选择、后向消除),计算量大但效果通常更好。
- 嵌入法(Embedded):算法自带选择机制,如 L1 正则化、随机森林特征重要性、决策树分裂节点。
技巧:添加随机特征作为基线,若真实特征效用低于随机特征则删除。
2. 降维(Dimensionality Reduction)
- 主成分分析(PCA/SVD):投影到低维空间。
- 特征哈希:映射到固定大小向量,牺牲可解释性换取效率。
- 词嵌入:将高维稀疏词向量压缩为稠密低维向量。
3. 正则化(Regularization)
通过增加惩罚项(L1 或 L2),鼓励模型使用更少特征或更小权重,防止过拟合。
六、四大数据类型案例精讲
1. 图数据(Graph Data)——以维基城市为例
任务:利用维基百科关系图预测城市人口。
思路:提取出入边关系、按频率排序截取、独热编码高频值、添加计数特征。
发现:城市在维基的信息量本身是人口的强预测因子。针对历史名城被高估的问题,对所有计数应用对数变换可大幅改善结果。
2. 时间序列数据(Timestamped Data)
挑战:历史数据获取难、实体随时间变化、多对多关系复杂。
策略:使用滞后期特征、差分特征、滑动窗口均值、指数移动平均(EMA)。
教训:当历史特征变异性过高时,平滑处理可能降低性能。探索过程本身即为价值。
3. 文本数据(Textual Data)
挑战:海量特征、幂律分布、顺序信息关键。
构建路径:
- 数字标记:离散化文本中的数字。
- 词袋模型:筛选 Top K 最有信息量的词。
- 词干提取 + 停用词移除:合并变形词,移除无信息词。
- Bigram:捕捉局部上下文。
- Skip-bigram + 特征哈希:容忍跳跃并压缩维度。
洞察:“关键词 + 数字”连续出现是极强信号,上下文至关重要。
4. 图像数据(Image Data)
挑战:低层特征难理解、对微小变化敏感、需领域知识。
探索路径:
- 像素即特征:性能差且训练慢,像素特征重要性极低。
- 高斯模糊:略有改善但仍低于基线。
- 数据增强:旋转、平移生成变体,提升鲁棒性。
- 直方图:用计数代替像素,性能接近基线且对旋转鲁棒。
- 角点检测:统计剧烈变化区域,首次超过基线。
启示:缺乏对齐是致命缺陷。领域专家会直接采用纹理特征(如 LBP),而非盲目尝试像素,这展示了领域知识如何节省试错时间。
七、进阶话题
1. 自动化特征工程(AutoFE)
Featuretools 系统:自动从关系数据库推导实体级、直接及关系级特征。
遗传编程:通过演化公式树自动发现特征组合,但目前效果有限。
2. 深度学习与特征工程
深度学习并非特征工程的终结者:
- 归一化、独热编码等技术仍然有用。
- 预训练模型可作为特征提取器。
- 可将 RNN 隐藏状态作为固定长度特征向量,拼接入传统模型。
八、避坑指南
1. 目标泄露(Target Leak)
若特征隐含了目标变量信息(如用历史流失率填充缺失值且未做折外估计),模型会在训练集表现完美但在生产环境失效。
2. 测试集污染
每次查看测试集结果都会造成污染。需保留一个最终测试集,仅在开发完成后使用一次。
3. 过拟合不仅仅是参数问题
反复查看验证集表现并据此调整特征,属于隐式过拟合。务必使用独立的开发测试集。
4. 不要忘记文档化
记录实验过程、放弃原因及最终决策依据,避免数月后遗忘。
九、给实践者的建议
- 先从简单开始:建立基线模型,若适合深度学习且有足够数据可优先尝试 DL。
- 尝试 AutoML 工具:快速生成候选特征集。
- 深入错误分析:逐个检查误差最大样本,理解犯错原因。
- 随时记录实验:避免重复劳动和逻辑混乱。
- 向领域专家请教:几分钟的咨询可能节省数月试错时间。
结语:特征工程的“艺术”所在
回到开头的数学题,好的特征工程就是帮你从正确的角度看待问题,而非在糟糕框架里拼命优化。
在 IBM Watson 团队开发问答系统的经历表明,大量的错误分析和“白板时间”是最具生产力的部分。
工具可以重新定义问题。拥有完备的“特征工程工具箱”,面对棘手问题时便能迅速选择正确方法。本书的核心价值在于建立系统的特征工程思维:知道有哪些可能性、何时何法、如何从错误中学习。
本文内容基于 Pablo Duboue 所著《The Art of Feature Engineering Essentials for Machine Learning》(Cambridge University Press, 2020)整理解读。

