易君召
发布于 2026-09-20 / 作者:易君召 / 2 阅读
0

如何有效进行数据清洗以提高模型质量

数据清洗的核心目标:修正脏数据、降低噪声、消除数据偏差,让模型学到真实规律而不是数据里的错误和干扰,一般按「评估 → 识别问题 → 清洗处理 → 验证闭环」流程落地。

一、先做数据探查与质量评估(清洗前必做)

不先摸底直接清洗很容易破坏有效信息。

  1. 基础统计探查

    • 数值字段:均值、中位数、分位数、方差、极值;查看分布是否倾斜

    • 分类字段:类别基数、各类占比,识别稀有类别、异常编码

    • 时间字段:时间范围、时间跳跃、格式不一致

  2. 质量指标检查清单

    • 缺失率:各字段缺失占比

    • 重复率:样本重复、主键重复

    • 异常值:超出业务合理范围的数据

    • 一致性:单位、编码、大小写、标签不统一

    • 数据泄露:特征包含预测目标信息(最容易导致模型虚高)

产出:数据质量报告,标记高风险字段,区分必须清洗谨慎处理字段。

二、各类脏数据处理策略

1. 缺失值处理(优先区分缺失原因)

  • 随机缺失:信息丢失无规律

    • 缺失率低(<5%):样本直接删除;或用中位数 / 众数填充

    • 缺失率中等:KNN 填充、MICE 多重插补

  • 非随机缺失:缺失本身代表业务含义(如用户未填写收入)

    • 不建议直接填充;新增is_missing标记特征,再做填充

禁忌:大批量缺失字段直接无脑均值填充,会压缩方差,引入偏差。

2. 重复样本

  • 完全重复:直接去重

  • 主键相同、特征不一致:业务核查,保留正确记录

注意:不要盲目去重,部分场景重复样本是真实业务(如多笔相同订单)。

3. 异常值(离群点)

两种类型:业务错误异常真实极端样本

  • 业务错误:录入错误、接口 bug,直接修正或剔除

  • 真实极端样本:不能简单删除,可选方案

    • 缩尾 / 截尾(Winsorize):限制上下分位数极值

    • 对数变换降低影响

    • 单独建模分支处理

4. 格式与编码不一致

  • 文本:统一大小写、去除多余空格、统一缩写(如 “江苏 / 江苏省” 归一)

  • 分类编码:统一枚举值,合并同义标签,减少高基数稀疏特征

  • 时间:统一时区、格式,拆分为年 / 月 / 星期等衍生特征

5. 标签清洗(监督学习重中之重)

标签错误对模型伤害远大于特征噪声:

  • 核查置信度低的样本(模型预测与原始标签冲突)

  • 标签漂移校验:训练集 / 测试集标签分布差异

  • 修正标注混淆、漏标、多标

三、特征层面清洗与降噪

  1. 剔除无用特征:全为空、方差接近 0、单一常量字段

  2. 处理多重共线性:相关性极高的特征,保留一个或做降维

  3. 过滤噪声特征:人工业务规则过滤无效日志、爬虫脏数据

  4. 采样平衡:类别不平衡时,优先清洗标签噪声,再考虑上 / 下采样,不要直接采样掩盖数据质量问题

四、清洗后验证(闭环,防止清洗引入新问题)

  1. 分布校验:清洗前后,训练 / 验证集特征分布、标签分布对比(PSI、KS 检验),防止分布偏移

  2. 基线对比:用清洗前后两套数据集训练简单基线模型,看指标变化;如果指标下降,说明清洗误伤有效数据

  3. 抽样人工复核:随机抽取清洗样本人工校验,确认清洗逻辑符合业务

  4. 固化清洗流水线:将清洗逻辑代码化,做成可复用 ETL,避免手工清洗不可复现

五、工程实践要点

  1. 数据版本管理:原始数据只读,永远不修改原始表;清洗产出新数据集,保留版本号

  2. 分层清洗:第一层通用清洗(格式、重复);第二层业务规则清洗;第三层模型导向清洗(标签、异常样本)

  3. 把握边界:清洗≠无限删除样本。过度清洗会删减真实长尾样本,导致模型泛化变差。

六、常见踩坑点

  • 训练集和测试集做了统一填充 / 归一化(数据泄露,正确做法:用训练集统计量作用于测试集)

  • 把业务真实极值当成异常值删掉

  • 只看指标提升,不做业务含义校验,清洗后模型在真实场景失效


本文原创作者:易君召,详见:https://www.yijunzhao.cn/authors/yijunzhao,转载请注明出处。

原文链接 https://www.yijunzhao.cn/archives/data-cleaning-improve-model-quality-guide

欢迎访问 小易撩挨踢

https://www.yijunzhao.cn/