4. 特征筛选清单概念
在MRM(多轮特征筛选)框架中,特征筛选清单是一张结构化的决策记录表,用于系统性地记录每个候选特征在每一轮筛选中的状态、统计依据和最终去留决定。它不是简单的变量列表,而是整个特征工程流程的可追溯审计线索。
核心定义:特征筛选清单 = 特征元数据 + 统计证据 + 筛选决策 + 版本快照
4.1 什么是特征筛选清单
特征筛选清单本质上是一个动态更新的数据表,每一行对应一个候选特征,每一列记录该特征在不同筛选阶段的属性与判定结果。它贯穿MRM的四个核心轮次:
- 第一轮(缺失率筛选):记录特征的缺失比例,标记是否因缺失过多被剔除。
- 第二轮(方差筛选):记录特征的方差值或变异系数,标记是否因方差过小被剔除。
- 第三轮(相关性筛选):记录特征间的相关系数,标记是否因高度共线被剔除。
- 第四轮(统计显著性筛选):记录p值、效应量或信息价值(IV),标记是否因统计不显著被剔除。
清单的最终版本即为保留特征集,直接输入后续的建模环节。
4.2 清单的组成要素
一个完整的特征筛选清单包含以下三类核心字段:
| 字段类别 | 字段名称 | 说明 | 示例值 |
|---|---|---|---|
| 特征元数据 | 特征名 | 特征的唯一标识符,与原始数据列名一致 | age_group、income_log |
| 数据类型 | 连续型、分类型、有序型、文本型 | numeric、categorical |
|
| 所属轮次 | 该特征在第几轮被引入或处理 | Round_1、Round_2 |
|
| 统计量 | 缺失率 | 缺失值占总样本数的比例 | 0.05(5%) |
| 方差/变异系数 | 衡量特征离散程度 | 0.32、CV=0.15 |
|
| p值 / IV值 | 统计显著性或信息价值 | p=0.003、IV=0.12 |
|
| 决策标记 | 保留/剔除标记 | 二元决策:保留(Keep)或剔除(Drop) | Keep、Drop |
| 剔除原因 | 触发剔除的具体规则说明 | 缺失率 > 0.8、方差 < 0.01 |
实践建议:在清单中额外增加一列“版本号”或“时间戳”,便于在多次迭代中回溯特征状态的变化历史。
4.3 清单的作用
特征筛选清单在MRM框架中承担五大核心作用:
- 决策透明化:每个特征的剔除或保留都有明确的统计依据,避免“拍脑袋”决策。
- 流程可追溯:任何时刻都可以回溯某个特征在每一轮筛选中的状态变化,便于审计和复现。
- 团队协作基础:不同分析师或数据科学家可以基于同一份清单开展工作,减少沟通歧义。
- 模型可解释性支撑:最终建模时,清单提供了“为什么选择这些特征”的完整证据链。
- 迭代优化依据:当模型效果不佳时,通过清单快速定位是哪个筛选环节过于严格或宽松。
常见误区:不要将特征筛选清单与“特征重要性排序”混为一谈。清单记录的是筛选过程,而特征重要性是建模后的产出。两者用途不同,但可以互补使用。
4.4 清单示例(伪代码结构)
以下是一个特征筛选清单的数据结构定义,可用于编程实现:
# 特征筛选清单数据结构(Python伪代码)
class FeatureScreeningRecord:
def __init__(self, feature_name, data_type):
self.feature_name = feature_name # 特征名
self.data_type = data_type # 数据类型
self.round_1_missing_rate = None # 第一轮:缺失率
self.round_1_decision = None # 第一轮:保留/剔除
self.round_2_variance = None # 第二轮:方差
self.round_2_decision = None # 第二轮:保留/剔除
self.round_3_max_correlation = None # 第三轮:最大相关系数
self.round_3_decision = None # 第三轮:保留/剔除
self.round_4_p_value = None # 第四轮:p值
self.round_4_decision = None # 第四轮:保留/剔除
self.final_decision = None # 最终保留/剔除标记
self.drop_reason = "" # 剔除原因(汇总)
# 示例:创建一条记录
record = FeatureScreeningRecord("age_group", "categorical")
record.round_1_missing_rate = 0.02
record.round_1_decision = "Keep"
record.round_2_variance = 0.45
record.round_2_decision = "Keep"
record.round_3_max_correlation = 0.32
record.round_3_decision = "Keep"
record.round_4_p_value = 0.001
record.round_4_decision = "Keep"
record.final_decision = "Keep"
关键提醒:在实际项目中,建议将清单存储为CSV或Parquet格式,每轮筛选后追加新列,而不是覆盖旧值。这样可以保留完整的筛选历史,便于后续分析和调试。