数据清洗是适配模型训练的逻辑起点,核心在于可解释、可回溯、可复用;需依建模需求反推策略,分层处理缺失与异常值,并封装为可配置、可测试的结构化流程。

数据清洗不是“把脏数据删掉”,而是让数据适配模型训练的逻辑起点。核心不在工具多炫,而在每一步是否可解释、可回溯、可复用。
明确清洗目标:先问模型要什么,再看数据缺什么
不同模型对数据质量的敏感点不同:树模型能容忍部分缺失和异常值,但线性模型或深度学习对量纲、分布、缺失模式更敏感。清洗前必须对照建模需求反推清洗策略。
- 分类任务重点关注标签一致性(如“是/否”混着“1/0”或空值)、类别失衡是否人为引入
- 时序预测需校验时间戳连续性、重复或跳跃,不能只靠去重
- NLP任务中,清洗重点常在非文本噪声(HTML标签、乱码、超长空白)、非目标语言混入,而非简单“去标点”
缺失值处理:拒绝一刀切,按机制分层应对
缺失不是bug,是信息。直接填均值/众数可能扭曲特征与目标的真实关系,尤其当缺失本身携带业务信号(如“用户未填写收入”可能代表低意愿或高隐私意识)。
- 先用缺失模式分析:按行/列统计缺失率,画缺失矩阵图,识别是随机缺失(MCAR)、依变量缺失(MAR)还是完全非随机(MNAR)
- 对MAR场景(如“年龄缺失”与“注册渠道”强相关),用分组统计(如按渠道中位数填充)比全局填充更合理
- 对MNAR,建议新增二值特征“是否缺失”,再单独填充,保留原始缺失语义
异常值判定:用业务逻辑锚定阈值,不迷信IQR或Z-score
自动检测容易把真实极端但合理的行为判为异常(如大客户单笔订单500万元,在金融风控里可能是正常,但在日销快消数据里就需核查)。关键在定义“异常=不合理”,而非“异常=离群”。
- 结合业务规则设硬边界:如“用户年龄>120岁”“订单金额<0”“时间戳早于系统上线日”必须修正或剔除
- 对连续型特征,优先用箱线图+分位数双校验:IQR方法找离群点,再人工抽样检查Top5样本是否真实有效
- 慎用“全部截断”或“全盘删除”——异常值占比<1%且确认为录入错误,可修正;若>5%且分布集中,大概率是数据采集逻辑问题,应回溯源头
结构化清洗流程:用函数封装动作,避免脚本式硬编码
清洗代码不是一次性的ETL脚本,而是可配置、可测试、可嵌入Pipeline的数据预处理模块。
- 每个清洗动作封装为独立函数:如
fill_missing_by_group(df, col, group_col, method='median'),输入输出明确,副作用可控 - 维护清洗日志表:记录每列清洗前/后缺失率、异常值数量、主要修正类型(如“电话号补0→11位”),支持后续归因
- 对关键字段(如ID、时间、主键)做清洗后校验:唯一性、非空、格式正则匹配,失败则中断并报警,不带病进模
基本上就这些。清洗不是越干净越好,而是越贴近业务实质、越利于模型理解越好。工具可以换,逻辑不能绕。










