4. 特征工程回顾:特征类型、标准化与归一化、特征重要性
在构建实时特征样本偏差校验系统之前,必须夯实特征工程的基础。特征工程的质量直接决定了上游模型的表现,也决定了偏差校验的敏感度与可解释性。本节从特征类型、尺度变换、重要性评估三个维度进行系统性回顾。
4.1 特征类型与处理策略
特征按数据性质可分为数值型、类别型和文本型三大类,每类在实时管道中的处理方式差异显著。
| 特征类型 | 子类型 | 典型示例 | 实时处理要点 |
|---|---|---|---|
| 数值型 | 连续 / 离散 | 用户年龄、交易金额、点击次数 | 需检测分布漂移、异常值截断、缺失值填充 |
| 类别型 | 有序 / 无序 | 城市编码、设备类型、用户等级 | 需处理新类别(OOV)、低频类别合并、编码一致性 |
| 文本型 | 短文本 / 长文本 | 搜索词、商品标题、评论摘要 | 需实时向量化、长度截断、词汇表版本对齐 |
实践提示:在实时特征管道中,类别型特征的“新类别涌现”是样本偏差的常见来源。建议为每个类别特征维护一个在线频次字典,当训练集与实时请求中出现从未见过的类别值时,立即触发偏差告警。
4.2 特征标准化与归一化
尺度变换是确保模型稳定收敛、特征重要性可比的前提。标准化(Standardization)与归一化(Normalization)在实时场景下的选择需考虑数据分布与计算开销。
4.2.1 核心方法对比
| 方法 | 公式 | 输出范围 | 对异常值敏感度 | 实时适用性 |
|---|---|---|---|---|
| Z-Score 标准化 | \( x' = \frac{x - \mu}{\sigma} \) | 无固定范围,均值为0,标准差为1 | 高 | 需维护滑动均值和方差 |
| Min-Max 归一化 | \( x' = \frac{x - min}{max - min} \) | [0, 1] | 极高 | 需维护全局或滑动 min/max |
| Robust 缩放 | \( x' = \frac{x - median}{IQR} \) | 无固定范围 | 低 | 适合含异常值的实时流 |
| MaxAbs 归一化 | \( x' = \frac{x}{|max|} \) | [-1, 1] | 高 | 适合稀疏数据 |
偏差校验关联:当实时请求的特征分布与训练集使用的标准化参数(如 \(\mu, \sigma\))发生偏移时,即使原始特征值未变,变换后的特征值也会产生系统性偏差。因此,标准化参数的时效性应纳入偏差监控指标。
4.2.2 实时标准化参数更新策略
在实时特征管道中,标准化参数不能静态固定,而应随数据分布变化自适应调整。常用策略包括:
- 滑动窗口法:维护最近 N 个样本的均值和方差,窗口大小根据业务周期设定(如 24 小时)。
- 指数加权移动平均(EWMA):对历史参数赋予衰减权重,适合快速响应分布变化。
- 分桶更新法:按时间分桶(如每小时一个桶),每个桶独立计算参数,切换时平滑过渡。
# 伪代码:滑动窗口 Z-Score 标准化
class SlidingZScore:
def __init__(self, window_size=10000):
self.window = deque(maxlen=window_size)
self.mean = 0.0
self.std = 1.0
def update(self, value):
self.window.append(value)
self.mean = np.mean(self.window)
self.std = np.std(self.window) + 1e-8
def transform(self, value):
return (value - self.mean) / self.std
4.3 特征重要性评估
特征重要性不仅用于模型解释,更是偏差校验中特征优先级排序的依据。高重要性的特征发生分布偏移时,对模型输出的影响更大,应优先监控。
4.3.1 常用评估方法
| 方法 | 原理 | 适用模型 | 实时计算代价 |
|---|---|---|---|
| 树模型特征重要性 | 基于分裂增益或节点纯度提升 | 随机森林、XGBoost、LightGBM | 低(训练时已计算) |
| Permutation Importance | 打乱特征值后观察性能下降 | 模型无关 | 高(需多次推理) |
| SHAP 值 | 基于博弈论 Shapley 值 | 模型无关 | 高(需背景数据集) |
| 系数绝对值 | 线性模型权重绝对值 | 线性回归、逻辑回归 | 极低 |
推荐做法:在实时偏差校验系统中,优先使用树模型内置重要性作为特征优先级排序的依据。该值在模型训练完成后即可获得,无需额外计算。将重要性归一化到 [0, 1] 区间后,作为偏差告警的加权系数。
4.3.2 特征重要性在偏差校验中的应用
特征重要性可直接用于构建加权分布距离指标。例如,计算训练集与实时请求集之间的加权 PSI(Population Stability Index):
# 加权 PSI 计算示例
def weighted_psi(expected, actual, importance_weights):
psi = 0.0
for feat, weight in importance_weights.items():
feat_psi = compute_psi(expected[feat], actual[feat])
psi += weight * feat_psi
return psi
通过引入特征重要性权重,偏差告警将更聚焦于对模型输出影响大的特征,减少低重要性特征分布波动带来的误报。
4.4 特征类型对偏差校验的特殊影响
不同类型的特征在偏差校验中需要差异化的处理逻辑:
- 数值型特征:使用 KS 检验、PSI、Wasserstein 距离等连续分布度量。需注意长尾分布下均值漂移不敏感的问题。
- 类别型特征:使用卡方检验、频次分布差异(Jensen-Shannon 散度)。重点关注新类别(OOV)的出现频率。
- 文本型特征:使用嵌入空间中的中心距离(如 Cos 距离)或词汇覆盖率的差异。需监控 OOV 词比例。
关键结论:特征工程不是一次性工作。在实时偏差校验体系中,特征类型、尺度参数、重要性权重三者共同构成了动态监控的元数据层。每次模型版本更新时,都应重新计算特征重要性并同步更新偏差校验的加权规则。
4.5 本节要点总结
| 维度 | 核心要点 | 对偏差校验的直接影响 |
|---|---|---|
| 特征类型 | 数值型、类别型、文本型需差异化处理 | 决定分布距离度量的选择 |
| 尺度变换 | 标准化参数需实时更新,推荐滑动窗口或 EWMA | 参数过期会导致系统性偏差误判 |
| 特征重要性 | 树模型内置重要性适合实时场景 | 用于加权偏差指标,减少误报 |
| 三者联动 | 类型 → 方法,尺度 → 参数,重要性 → 权重 | 构成完整的偏差校验元数据体系 |