4. 特征筛选清单概念

在MRM(多轮特征筛选)框架中,特征筛选清单是一张结构化的决策记录表,用于系统性地记录每个候选特征在每一轮筛选中的状态、统计依据和最终去留决定。它不是简单的变量列表,而是整个特征工程流程的可追溯审计线索。

核心定义:特征筛选清单 = 特征元数据 + 统计证据 + 筛选决策 + 版本快照

4.1 什么是特征筛选清单

特征筛选清单本质上是一个动态更新的数据表,每一行对应一个候选特征,每一列记录该特征在不同筛选阶段的属性与判定结果。它贯穿MRM的四个核心轮次:

  • 第一轮(缺失率筛选):记录特征的缺失比例,标记是否因缺失过多被剔除。
  • 第二轮(方差筛选):记录特征的方差值或变异系数,标记是否因方差过小被剔除。
  • 第三轮(相关性筛选):记录特征间的相关系数,标记是否因高度共线被剔除。
  • 第四轮(统计显著性筛选):记录p值、效应量或信息价值(IV),标记是否因统计不显著被剔除。

清单的最终版本即为保留特征集,直接输入后续的建模环节。

特征筛选清单在MRM框架中的位置 特征筛选清单在MRM框架中的位置 原始特征池 轮次1:缺失率 轮次2:方差 轮次3:相关性 轮次4:显著性 保留特征集 特征筛选清单 清单记录每一轮筛选的 统计量与决策结果

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
实践建议:在清单中额外增加一列“版本号”或“时间戳”,便于在多次迭代中回溯特征状态的变化历史。
特征筛选清单的组成要素结构 特征筛选清单的组成要素结构 特征筛选清单 特征元数据 特征名 数据类型 所属轮次 统计量 缺失率 方差/CV p值/IV值 决策标记 保留/剔除标记 剔除原因 三类要素共同构成完整的特征筛选决策记录 每轮筛选后更新对应字段,确保可追溯

4.3 清单的作用

特征筛选清单在MRM框架中承担五大核心作用:

  1. 决策透明化:每个特征的剔除或保留都有明确的统计依据,避免“拍脑袋”决策。
  2. 流程可追溯:任何时刻都可以回溯某个特征在每一轮筛选中的状态变化,便于审计和复现。
  3. 团队协作基础:不同分析师或数据科学家可以基于同一份清单开展工作,减少沟通歧义。
  4. 模型可解释性支撑:最终建模时,清单提供了“为什么选择这些特征”的完整证据链。
  5. 迭代优化依据:当模型效果不佳时,通过清单快速定位是哪个筛选环节过于严格或宽松。
常见误区:不要将特征筛选清单与“特征重要性排序”混为一谈。清单记录的是筛选过程,而特征重要性是建模后的产出。两者用途不同,但可以互补使用。

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格式,每轮筛选后追加新列,而不是覆盖旧值。这样可以保留完整的筛选历史,便于后续分析和调试。