数据清洗的核心目标:修正脏数据、降低噪声、消除数据偏差,让模型学到真实规律而不是数据里的错误和干扰,一般按「评估 → 识别问题 → 清洗处理 → 验证闭环」流程落地。
一、先做数据探查与质量评估(清洗前必做)
不先摸底直接清洗很容易破坏有效信息。
基础统计探查
数值字段:均值、中位数、分位数、方差、极值;查看分布是否倾斜
分类字段:类别基数、各类占比,识别稀有类别、异常编码
时间字段:时间范围、时间跳跃、格式不一致
质量指标检查清单
缺失率:各字段缺失占比
重复率:样本重复、主键重复
异常值:超出业务合理范围的数据
一致性:单位、编码、大小写、标签不统一
数据泄露:特征包含预测目标信息(最容易导致模型虚高)
产出:数据质量报告,标记高风险字段,区分必须清洗和谨慎处理字段。
二、各类脏数据处理策略
1. 缺失值处理(优先区分缺失原因)
随机缺失:信息丢失无规律
缺失率低(<5%):样本直接删除;或用中位数 / 众数填充
缺失率中等:KNN 填充、MICE 多重插补
非随机缺失:缺失本身代表业务含义(如用户未填写收入)
不建议直接填充;新增
is_missing标记特征,再做填充
禁忌:大批量缺失字段直接无脑均值填充,会压缩方差,引入偏差。
2. 重复样本
完全重复:直接去重
主键相同、特征不一致:业务核查,保留正确记录
注意:不要盲目去重,部分场景重复样本是真实业务(如多笔相同订单)。
3. 异常值(离群点)
两种类型:业务错误异常、真实极端样本
业务错误:录入错误、接口 bug,直接修正或剔除
真实极端样本:不能简单删除,可选方案
缩尾 / 截尾(Winsorize):限制上下分位数极值
对数变换降低影响
单独建模分支处理
4. 格式与编码不一致
文本:统一大小写、去除多余空格、统一缩写(如 “江苏 / 江苏省” 归一)
分类编码:统一枚举值,合并同义标签,减少高基数稀疏特征
时间:统一时区、格式,拆分为年 / 月 / 星期等衍生特征
5. 标签清洗(监督学习重中之重)
标签错误对模型伤害远大于特征噪声:
核查置信度低的样本(模型预测与原始标签冲突)
标签漂移校验:训练集 / 测试集标签分布差异
修正标注混淆、漏标、多标
三、特征层面清洗与降噪
剔除无用特征:全为空、方差接近 0、单一常量字段
处理多重共线性:相关性极高的特征,保留一个或做降维
过滤噪声特征:人工业务规则过滤无效日志、爬虫脏数据
采样平衡:类别不平衡时,优先清洗标签噪声,再考虑上 / 下采样,不要直接采样掩盖数据质量问题
四、清洗后验证(闭环,防止清洗引入新问题)
分布校验:清洗前后,训练 / 验证集特征分布、标签分布对比(PSI、KS 检验),防止分布偏移
基线对比:用清洗前后两套数据集训练简单基线模型,看指标变化;如果指标下降,说明清洗误伤有效数据
抽样人工复核:随机抽取清洗样本人工校验,确认清洗逻辑符合业务
固化清洗流水线:将清洗逻辑代码化,做成可复用 ETL,避免手工清洗不可复现
五、工程实践要点
数据版本管理:原始数据只读,永远不修改原始表;清洗产出新数据集,保留版本号
分层清洗:第一层通用清洗(格式、重复);第二层业务规则清洗;第三层模型导向清洗(标签、异常样本)
把握边界:清洗≠无限删除样本。过度清洗会删减真实长尾样本,导致模型泛化变差。
六、常见踩坑点
训练集和测试集做了统一填充 / 归一化(数据泄露,正确做法:用训练集统计量作用于测试集)
把业务真实极值当成异常值删掉
只看指标提升,不做业务含义校验,清洗后模型在真实场景失效
本文原创作者:易君召,详见:https://www.yijunzhao.cn/authors/yijunzhao,转载请注明出处。
原文链接
欢迎访问 小易撩挨踢