1 特征工程概述

1.1 定义与目标

特征工程(Feature Engineering)是指利用领域知识和数学方法,对原始数据进行处理,生成能够更有效地表征数据内在规律的特征向量的过程。其主要目标包括:提升机器学习模型的预测性能、降低模型计算复杂度、增强模型可解释性,以及避免过拟合或欠拟合。

1.2 在机器学习流程中的位置

典型的机器学习流水线中,特征工程位于数据收集与预处理之后、模型训练之前。原始数据经过清洗、编码、缩放、构造等操作后,形成结构化特征矩阵,供算法学习。其特征质量直接决定了模型性能的上限,即便采用复杂的算法,劣质特征也无法弥补。

1.3 特征工程的价值

良好的特征工程能够将业务经验融入数据表示中,帮助模型捕捉关键模式,减少对大量数据的依赖,并提升泛化能力。在实践中,特征工程往往比算法选择更能影响最终效果,被视为数据科学中最具创造性且耗时最长的环节之一。

2 特征构建

2.1 基于领域知识的特征衍生

2.1.1 数值特征的组合与变换

通过对原始数值特征进行加减乘除、取对数、平方根等运算,生成新特征。例如,房屋面积与房间数量的比值可反映房屋密度,年龄的平方或指数变换可捕捉非线性关系

2.1.2 时间特征提取

时间戳中提取年、月、日、星期几、小时、是否为节假日等分量。例如,销售数据中“月份”和“季节”能反映周期性变化,用户行为日志中的“时段”可用于识别早晚高峰模式。

2.1.3 文本特征提取(词袋、TF-IDF、词嵌入)

  • 词袋模型:将文本表示为词汇表中单词出现次数的向量,忽略词序和语法。
  • TF-IDF:在词袋基础上,通过逆文档频率降低常见词的权重,突出重要词汇。
  • 词嵌入(如Word2VecGloVe):将单词映射为低维稠密向量,捕捉语义相似性和上下文关系

2.2 自动特征生成

2.2.1 特征交叉(多项式特征)

利用原始特征的乘积或幂运算创建多项式组合,例如将年龄与收入相乘形成新特征。在逻辑回归、线性SVM等模型中,特征交叉能引入非线性决策边界。Sklearn中的PolynomialFeatures可自动生成指定阶数的交叉特征。

2.2.2 深度学习自动编码器

通过无监督训练的自编码器(Autoencoder),将高维输入压缩为低维隐层表示,再重构输出。隐层特征可视为自动学习到的特征表示,适用于降维和异常检测。变分自编码器(VAE)可生成具有概率特性的潜在特征。

3 特征选择

3.1 过滤法(Filter)

3.1.1 方差阈值

移除方差低于设定阈值的特征,因为这些特征变化小,对区分样本贡献有限。方差计算前需对数据进行归一化,否则量纲差异会干扰结果。

3.1.2 相关系数

计算特征与目标变量之间的皮尔逊相关系数或斯皮尔曼秩相关系数,保留与目标强相关的特征,剔除弱相关或高度共线的特征。通常设定阈值(如r>0.2)进行筛选。

3.1.3 卡方检验

适用于分类问题中类别型特征与离散目标变量之间的独立性检验卡方统计量衡量观测频数与期望频数的差异,值越大表示特征与目标越相关。常用于文本分类中的特征筛选。

3.2 包裹法(Wrapper)

3.2.1 递归特征消除

反复训练模型,每次移除权重最小的特征(如线性模型的系数绝对值),直至达到预设特征数量。RFE(Recursive Feature Elimination)计算开销大,但能考虑特征间的交互影响。

3.2.2 前向/后向搜索

前向搜索从空集开始,逐步添加对模型性能提升最显著的特征;后向搜索从全量特征开始,逐步删除对性能损害最小的特征。两者均需在验证集上评估,操作繁琐但效果较好。

3.3 嵌入法(Embedded)

3.3.1 L1正则化Lasso

损失函数中加入L1范数惩罚项,迫使部分特征的系数变为零,从而实现特征选择。Lasso回归适用于特征数量较多的场景,且能自动处理共线性

3.3.2 树模型特征重要性

基于决策树、随机森林、GBDT等算法,通过计算特征在节点分裂时减少不纯度的总贡献(如信息增益、Gini系数)来衡量重要性。该指标可直观筛选重要特征,并用于后续建模。

4 特征变换

4.1 无量纲化

4.1.1 标准化(Z-score)

将特征转换为均值为0、标准差为1的分布,公式为 \( z = \frac{x - \mu}{\sigma} \)。适用于数据服从正态分布或算法对尺度敏感(如SVM、PCA)的情况。

4.1.2 归一化(Min-Max缩放)

将特征线性缩放到[0,1]区间,公式为 \( x' = \frac{x - \min(x)}{\max(x) - \min(x)} \)。适用于数据有明确边界且无需假设分布的场景,但易受异常值影响。

4.2 非线性变换

4.2.1 对数变换

对正偏态分布的特征取自然对数或常用对数,可压缩极端值、稳定方差,并使数据更接近正态分布。例如,收入、房价等长尾分布常用对数变换。

4.2.2 Box-Cox变换

一种参数化的幂变换族,公式为 \( y(\lambda) = \frac{x^\lambda - 1}{\lambda} \)(λ≠0)或 \( \ln x \)(λ=0)。通过最大似然估计自动选择最优λ,适用于严格正值的连续特征。

4.3 降维

4.3.1 主成分分析(PCA)

通过正交变换将原始特征投影到方差最大的方向,得到线性无关的主成分。主成分是原始特征的线性组合,常用于数据压缩、去噪和可视化。需先标准化数据。

4.3.2 线性判别分析(LDA)

寻找使类间散度最大、类内散度最小的投影方向,适用于分类问题中的有监督降维。LDA最多降至类别数减1维。

4.3.3 t-SNE与UMAP

  • t-SNE:非线性降维技术,通过概率分布将高维数据映射到低维(通常2D或3D),保留局部邻域结构,擅长可视化聚类效果。
  • UMAP:基于黎曼几何与拓扑数据,比t-SNE更快且能更好地保留全局结构,适用于高维大规模数据的降维与可视化。

5 特殊数据类型特征工程

5.1 类别特征编码

5.1.1 独热编码

将每个类别值转换为一个二进制向量,其中只有一个位为1。适用于无序类别特征(如颜色、地区),但类别过多会导致维度爆炸。

5.1.2 标签编码

将每个类别赋予一个整数标签(如0,1,2,...),适用于有序类别特征(如教育程度)或树模型。但会给无序类别引入虚假顺序,需谨慎使用。

5.1.3 目标编码

用目标变量(如回归中的均值、分类中的概率)替换类别值,可保留类别信息且避免高维问题。需使用交叉验证或平滑处理,防止过拟合。

5.2 时序特征工程

5.2.1 滑动窗口统计

在时间窗口内计算移动平均、标准差、最大值、最小值等统计量,反映序列的局部趋势与波动性。窗口大小需根据业务周期设定。

5.2.2 时间滞后特征

将过去时刻的观测值作为当前时刻的特征(如t-1, t-2...),使模型学习时间依赖关系。需注意滞后阶数的选择与自相关检验。

5.3 图像特征工程

5.3.1 手工特征(HOG、SIFT)

  • HOG(方向梯度直方图):计算图像局部区域的梯度方向分布,描述物体边缘形状,常用于行人检测。
  • SIFT(尺度不变特征变换):提取图像中稳定的关键点及其描述子,对旋转、缩放和光照变化具有不变性,适用于图像匹配。

5.3.2 卷积神经网络特征提取

利用预训练的CNN(如VGG、ResNet)的中间层或全连接层输出作为特征向量。这些深度特征具有强大的语义表达能力,可用于迁移学习和图像检索。

6 特征工程工具与实践

6.1 常用库(Scikit-learn、Feature-engine、Pandas)

  • Scikit-learn:提供StandardScalerOneHotEncoderPolynomialFeaturesSelectKBest等标准特征工程组件。
  • Feature-engine:封装了更丰富的特征工程函数,如MeanEncoderOutlierRemoverLogTransformer,支持管道式操作。
  • Pandas:提供数据清洗、分组聚合、时间戳解析、秩变换等底层数据处理能力,常与上述库配合使用。

6.2 自动化特征工程(Featuretools、AutoML)

  • Featuretools:基于深度特征合成(DFS)自动生成时序聚合、跨表关联等复杂特征,减少人工探索成本。
  • AutoML(如H2O、AutoGluon):内置特征预处理、选择和转换流程,自动搜索最佳特征组合,适用于快速原型开发。

6.3 特征存储与管理

构建特征平台(Feature Store)用于统一存储和版本管理特征,支持在线和离线场景。常用方案包括Feast、Tecton等,可复用特征定义、避免特征重复计算,并监控特征质量。

6.4 特征工程评估指标(特征重要性、稳定性)

  • 特征重要性:通过模型训练后的权重、Gini系数、置换重要性(Permutation Importance)衡量。
  • 特征稳定性:使用群体稳定性指数(PSI)或特征分布距离(如Wasserstein距离)评估特征随时间的变化,防止模型因数据漂移而失效。

7 挑战与前沿

7.1 特征冗余与多重共线性

冗余特征会加剧模型复杂度,多重共线性(特征间高度相关)可能导致线性模型系数不稳定。解决方法包括:正则化、特征选择、主成分分析或移除高相关特征对。

7.2 特征漂移与数据分布变化

模型上线后,特征分布随业务环境变化而偏移(如用户行为改变),导致预测性能下降。需通过实时监控、定期重训练、增量学习或自适应特征调整来应对。

7.3 可解释性与隐私约束

复杂特征(如深度学习嵌入、高阶交叉特征)可能降低模型可解释性,在金融、医疗等合规敏感领域受限。同时,特征构建过程中可能泄露用户隐私(如独热编码中的ID信息),需采用差分隐私、联邦学习或特征匿名化技术。