3. 特征工程基础:特征分类、重要性、分布与统计量
在构建 LightGBM 模型之前,必须对原始特征进行系统化的分类与诊断。特征的质量直接决定了模型的上限,而特征工程正是将原始数据转化为高质量特征的过程。本节将围绕特征的三大分类体系、特征重要性的评估方法以及特征分布与统计量的监控手段展开,为后续的哨兵联动监控打下基础。
3.1 特征分类体系
根据数据的内在属性与建模需求,特征通常被划分为三大类:数值型、类别型和时序型。每种类型在 LightGBM 中的处理方式和监控要点均不同。
| 特征类型 | 定义 | 常见示例 | LightGBM 处理方式 | 监控关注点 |
|---|---|---|---|---|
| 数值型 | 连续或离散的定量测量值,具有数值大小与顺序意义 | 年龄、收入、温度、点击次数 | 直接作为浮点型输入;支持缺失值自动处理 | 均值漂移、方差变化、异常值比例、分位数偏移 |
| 类别型 | 有限个离散取值,表示类别或标签,无大小顺序 | 性别、城市、产品类别、用户等级 | 需转换为整数编码;LightGBM 原生支持类别特征(categorical_feature 参数) | 新类别出现、类别频次分布变化、低频类别消失 |
| 时序型 | 与时间顺序相关的特征,包含趋势、周期、滞后等结构 | 交易时间、注册日期、时间戳、滑动窗口统计量 | 通常需手工提取时间特征(年/月/日/周/小时);LightGBM 不直接处理时间序列 | 时间漂移、季节性模式变化、滞后特征相关性衰减 |
实践建议: 在特征工程阶段,建议为每个特征打上类型标签(type_meta),并记录其原始分布统计量。这些元数据将作为后续哨兵监控的基准线(baseline)。
3.2 特征重要性评估
特征重要性用于衡量每个特征对模型预测的贡献程度。LightGBM 提供三种内置的重要性计算方式,适用于不同的监控场景。
- Gain(信息增益):特征在树分裂时带来的平均信息增益。反映特征对模型精度的实际贡献,是哨兵监控的首选指标。
- Split(分裂次数):特征被选为分裂节点的总次数。反映特征的使用频率,但对噪声特征敏感。
- Cover(覆盖样本数):特征分裂节点所覆盖的训练样本数量。反映特征的泛化广度。
# LightGBM 特征重要性提取示例
import lightgbm as lgb
model = lgb.LGBMClassifier()
model.fit(X_train, y_train)
# 获取三种重要性
importance_gain = model.booster_.feature_importance(importance_type='gain')
importance_split = model.booster_.feature_importance(importance_type='split')
importance_cover = model.booster_.feature_importance(importance_type='cover')
# 输出特征重要性排序
feature_names = X_train.columns
for name, gain, split, cover in zip(feature_names, importance_gain, importance_split, importance_cover):
print(f"{name}: Gain={gain:.4f}, Split={split}, Cover={cover}")
监控陷阱: 当特征重要性(Gain)在连续两个监控周期内下降超过 20% 时,可能意味着特征分布发生漂移或特征与目标的关系变弱。此时应触发哨兵告警,并回溯特征分布统计量。
3.3 特征分布与统计量
特征分布是数据质量的晴雨表。通过持续监控特征的统计量,可以及时发现数据漂移、异常注入或采集故障。以下是最核心的监控统计量体系。
3.3.1 数值型特征统计量
| 统计量 | 计算公式/说明 | 监控意义 | 哨兵阈值参考 |
|---|---|---|---|
| 均值(Mean) | μ = Σx / n | 检测整体偏移 | ±3σ 或 ±5% 相对变化 |
| 标准差(Std) | σ = sqrt(Σ(x-μ)² / n) | 检测离散度变化 | 相对变化 > 20% |
| 中位数(Median) | 排序后中间值 | 抗异常值的中心趋势 | 偏移 > 5% |
| 偏度(Skewness) | 三阶标准化矩 | 检测分布对称性变化 | 绝对值 > 1.5 |
| 峰度(Kurtosis) | 四阶标准化矩 | 检测尾部厚度变化 | 绝对值 > 3.0 |
| 缺失率(Missing%) | 缺失数 / 总数 | 检测采集故障 | > 5% 或突增 2x |
3.3.2 类别型特征统计量
- 类别基数(Cardinality):唯一类别数量。监控新类别出现或类别合并。
- 频次分布(Frequency Distribution):每个类别的出现次数。监控头部类别占比变化。
- 熵(Entropy):H = -Σ p_i * log(p_i)。监控分布均匀性变化。
- 缺失率:与数值型相同,监控空值比例。
3.3.3 时序型特征统计量
- 时间跨度(Time Range):最小与最大时间戳的差值。
- 事件密度(Event Density):单位时间内的记录数。
- 滞后自相关(Lag Autocorrelation):特征与其滞后版本的相关性,监控时序结构是否保持。
核心原则: 所有统计量的监控都应基于训练集的基准线(baseline)。哨兵系统将实时特征统计量与基准线进行对比,当偏差超过预设阈值时触发告警。建议每 7 天重新校准一次基准线,以适应业务周期性变化。
3.4 特征质量监控架构
下图展示了特征质量监控的完整流程,从特征分类、统计量计算到哨兵告警的闭环链路。
3.5 特征分布可视化与监控
除了数值统计量,分布形状的可视化对比也是哨兵监控的重要手段。下图展示了训练集与生产集之间特征分布的对比逻辑。
3.6 特征质量监控清单
在实际项目中,建议按照以下清单对每个特征进行初始化登记与持续监控。
- 特征注册:为每个特征分配唯一 ID,记录特征名称、类型、来源表、业务含义。
- 基准线计算:基于训练集计算所有统计量,存入基准线库。
- 监控阈值设定:根据业务容忍度,为每个统计量设定告警阈值(参考 3.3 节表格)。
- 周期性检测:每天/每小时计算生产集统计量,与基准线对比。
- 告警触发:当偏差超过阈值时,哨兵系统发出告警,并附带偏差详情。
- 人工研判:数据科学家根据告警内容,判断是数据质量问题还是业务漂移,并采取相应措施。
本章小结: 特征分类是监控的基础,特征重要性是模型健康的指示器,特征分布与统计量是数据质量的量化标尺。三者结合,构成了 LightGBM 特征质量监控的完整三角体系。在下一阶段,我们将基于这些基础统计量,构建具体的哨兵监控规则与自动化告警流水线。