4、特征构造中的偏差:特征选择偏差、特征缩放偏差、特征交叉带来的隐性偏差
特征构造并非中立的数据操作,每一步都可能引入系统性偏差。若在构造阶段未对样本分布进行校验,后续模型将放大这些偏差,导致泛化能力下降。本章聚焦三类核心偏差:特征选择偏差、特征缩放偏差以及特征交叉带来的隐性偏差。
4.1 特征选择偏差
特征选择偏差发生在从原始特征池中筛选子集的过程中。当筛选逻辑与目标变量存在间接关联,或筛选过程使用了未来信息(数据泄露),偏差便已形成。
| 偏差类型 | 典型场景 | 后果 |
|---|---|---|
| 过滤式偏差 | 基于全量数据的方差阈值或卡方检验筛选特征 | 引入未来信息,高估特征重要性 |
| 包裹式偏差 | 使用目标变量反复迭代选择特征子集 | 过拟合训练集,泛化性能下降 |
| 嵌入式偏差 | 正则化路径依赖样本顺序或类别不平衡 | 稀疏化方向偏向多数类特征 |
校验要点:特征选择必须在训练集内完成,且每次交叉验证折内独立执行选择逻辑。使用
SelectKBest 或 RFECV 时,务必嵌入 Pipeline 防止全局统计量泄露。
4.2 特征缩放偏差
特征缩放(标准化、归一化、鲁棒缩放)的统计量若来自有偏样本,缩放后的特征将扭曲原始分布。常见偏差来源包括:
- 离群值污染:Min-Max 归一化受极端值影响,导致正常样本被压缩到狭窄区间。
- 分布偏移:训练集与验证集均值/标准差差异大时,标准化后特征分布错位。
- 分组缩放忽略:时间序列或分组数据中,全局缩放抹平了组内相对差异。
建议:对含有离群值的特征优先使用
RobustScaler(基于中位数和 IQR);对时间序列特征使用 GroupBy + 组内缩放,保留组间相对量纲。
4.3 特征交叉带来的隐性偏差
特征交叉(组合、多项式、笛卡尔积)在提升表达力的同时,可能引入隐性偏差——即交叉特征与目标变量之间产生虚假关联,或交叉后样本稀疏导致统计不稳定。
4.3.1 稀疏交叉偏差
当两个高基数类别特征交叉时,大量组合在训练集中仅出现一次或零次。模型对这些组合的权重估计完全依赖少量样本,极易过拟合。
# 示例:高基数交叉导致稀疏
import pandas as pd
from sklearn.model_selection import train_test_split
df = pd.DataFrame({
'user_id': [f'U{i}' for i in range(1000)],
'item_id': [f'I{i}' for i in range(500)],
'label': [0, 1]*500
})
# 交叉后组合数 = 1000 * 500 = 500,000,但样本仅 1000 行
df['cross'] = df['user_id'] + '_' + df['item_id']
print(f"唯一交叉组合数: {df['cross'].nunique()}") # 输出 1000
print(f"重复组合数: {df['cross'].duplicated().sum()}") # 输出 0
风险提示:稀疏交叉特征在树模型中容易成为“记忆节点”,在 LR/Embedding 模型中导致参数无法收敛。建议对交叉组合进行频次过滤(如 min_support=5),或使用哈希技巧压缩维度。
4.3.2 交叉方向偏差
交叉操作的顺序和方向会影响偏差分布。例如,A × B 与 B × A 在非对称交叉(如减法、除法)中产生不同偏差模式。
| 交叉类型 | 偏差来源 | 校验方法 |
|---|---|---|
| 加法交叉 (A+B) | 量纲差异导致大数主导 | 交叉前先标准化 |
| 乘法交叉 (A×B) | 零值或负值放大稀疏性 | 检查零值比例,考虑偏移量 |
| 除法交叉 (A/B) | 分母接近零时产生极端值 | 添加平滑项 ε,或使用分箱后比率 |
| 类别笛卡尔积 | 长尾组合统计不可靠 | 频次阈值 + 回退策略 |
4.4 综合校验策略
针对特征构造中的三类偏差,建议在特征工程流水线中嵌入以下校验步骤:
- 选择阶段:使用交叉验证内的特征选择,记录每折选中特征的稳定性(Jaccard 相似度)。
- 缩放阶段:对比缩放前后特征分布(KS 检验),确保训练/验证集分布一致。
- 交叉阶段:对交叉特征进行频次统计,剔除低频组合;对连续交叉进行离群值截断。
- 集成校验:构造 shadow 特征(随机打乱标签后的交叉特征),比较真实交叉与 shadow 交叉的重要性差异。
核心原则:特征构造的每一步都应在样本偏差校验的监督下进行。没有校验的构造,本质上是将数据中的噪声和偶然模式编码为特征,最终损害模型的泛化能力。