第一部分,核心思想 不要盲目填充

星博讯 AI基础认知 2

处理缺失值的第一步不是“怎么填”,而是“为什么缺”。 在统计学中,缺失机制通常分为三类:

第一部分,核心思想 不要盲目填充-第1张图片-星博讯网络科技知识-SEO优化技巧|AI知识科普|互联网行业干货大全

  1. 完全随机缺失:数据缺失是随机的,与任何已观测或未观测的变量都无关,这是最理想的情况。
  2. 随机缺失:数据缺失与其他已观测变量有关,但与自身的真实值无关。
  • 在收入调查中,女性可能更不愿意报告收入,但“是否缺失”与“收入高低”无关,只与“性别”有关。
  1. 非随机缺失:数据缺失与其自身的真实值有关。
  • 高收入人群更可能隐瞒收入,这是最棘手的情况,因为缺失本身包含了信息。

行动指南:先分析缺失模式(缺失比例、与哪些变量相关),尝试理解其背后的原因,这能帮你判断填充是否合适,以及选择哪种方法。


第二部分:识别与评估缺失值

在动手之前,需要先摸清情况:

  • 计算缺失率:对每个变量(列)计算 (缺失数量 / 总样本数),高缺失率(如 > 30%-50%)的变量可能需要直接删除。
  • 可视化:使用热力图 (seaborn.heatmapmissingno.matrix) 可以直观看到数据集中缺失值的分布模式。
  • 模式判断:是集中在某几列(变量缺失)还是某几行(样本缺失)?

第三部分:基础处理方法(从简单到进阶)

直接删除

最简单粗暴,适用于特定情况。

  • 删除整行:当某样本(行) 的缺失值非常多,或者缺失目标变量时。
  • 缺点:可能损失大量有价值数据。
  • 删除整列:当某变量(列) 的缺失率极高,且信息价值不大时。
  • 使用条件:数据量大,缺失比例小,且缺失机制为“完全随机缺失”。

单变量填充(适用于数值型数据)

用一个固定的统计量来填充某一列的所有缺失值。

  • 均值/中位数/众数填充
  • 均值填充df['col'].fillna(df['col'].mean(), inplace=True)
  • 中位数填充:对异常值更稳健。
  • 众数填充:用于分类变量。
  • 优点:简单快速,不会改变数据的均值和分布(仅限均值填充)。
  • 缺点:低估了方差,忽略了与其他变量的关系,可能产生有偏估计。

临近值填充

利用数据在顺序上的相关性。

  • 前向填充/后向填充
  • df.fillna(method='ffill') 用上一个有效值填充。
  • 适用场景:时间序列数据,或数据按某种顺序排列且连续性强。
  • 缺点:可能传播异常值。

基于模型的填充(多变量填充)

利用数据集中其他已知变量来预测缺失值,这是更高级、更推荐的方法。

  1. K-最近邻填充
  • 原理:对于一个有缺失值的样本,在数据集中找到k个与其其他变量最相似的完整样本,用这k个样本在该变量上的(加权)均值/众数来填充。
  • 优点:考虑了变量间的相关性。
  • 缺点:计算量随数据量增大而增加。
  1. 回归/分类模型预测填充
  • 原理:将有缺失值的变量作为目标变量Y,其他完整变量作为特征X
    1. 用数据中该变量不缺失的部分训练一个模型(回归或分类)。
    2. 用训练好的模型去预测缺失部分的值。
  • 迭代填充:可以对所有有缺失的变量循环此过程,并用最新填充好的数据去预测其他变量的缺失值,迭代多次直到稳定。
  • 优点:最科学,能最好地利用数据中的信息,保持变量间的关系。
  • 缺点:更复杂,可能引入模型本身的误差,存在过拟合风险。

创建“缺失指示符”

有时,“缺失”本身就是一个重要信息。

  • 操作:在填充前或填充的同时,为每个有缺失的变量创建一个新的布尔型列(col_missing),标记原数据是否缺失。
  • 优点:可以为模型提供“数据缺失”这一潜在的重要模式信息,尤其适用于“随机缺失”或“非随机缺失”的场景。

第四部分:方法选择指南与注意事项

方法 适用场景 优点 缺点
删除 缺失率极低或极高;完全随机缺失;数据量巨大 简单,无偏(在MCAR下) 信息损失,样本减少
均值/中位数/众数 初步分析;缺失率较低;作为基线方法 极其简单快速 扭曲分布,忽略相关性,低估不确定性
临近填充 时间序列或有序数据 简单,保持顺序 可能传播误差,不适用于无序列数据
KNN填充 数据存在局部相似性;中小型数据集 考虑了数据结构 对k值敏感,计算量较大,不适用于高维稀疏数据
模型预测 变量间相关性较强;对准确性要求高 最科学,信息利用充分 复杂,可能过拟合,计算成本高
缺失指示符 缺失可能包含信息(非MCAR) 保留“缺失”模式信息 增加特征维度

黄金法则

  1. 分而治之:数值型和分类型变量往往需要不同的处理策略。
  2. 训练/测试集分离务必在划分训练集和测试集之后再进行填充!所有填充参数(如均值、模型)必须仅从训练集中计算,然后应用到测试集上,否则会造成数据泄漏
  3. 评估影响:尝试不同的填充方法,评估它们对最终分析或模型结果的影响,可以使用交叉验证来比较。
  4. 记录与透明:在报告中清晰记录你处理缺失值的方法和理由。

总结流程建议

  1. 探索:计算缺失率,可视化缺失模式。
  2. 分析:思考缺失的可能原因(MCAR?MAR?MNAR?)。
  3. 策略
    • 高缺失列/行:考虑删除。
    • 低缺失,且为完全随机:可用简单填充(均值/中位数)或删除。
    • 变量间有明确关系:使用KNN或模型预测填充。
    • 时间序列:使用前向/后向填充。
    • 怀疑缺失有含义:添加“缺失指示符”。
  4. 实施与验证:在训练集上拟合填充器,转换训练集和测试集,评估最终模型性能。

从简单的统计量填充开始建立基线,再尝试更复杂的基于模型的方法,这是实践中稳妥有效的路径。

标签: 核心思想 不要盲目填充

抱歉,评论功能暂时关闭!

微信咨询Xboxun188
QQ:1320815949
在线时间
10:00 ~ 2:00