4. 数据质量初探:缺失值、异常值、重复值、不一致数据的初步诊断方法
数据质量是样本构建与特征筛选的基石。在进入复杂的特征工程之前,必须对原始数据进行系统性诊断。本章聚焦于四种最常见的质量问题:缺失值、异常值、重复值与不一致数据,并给出初步诊断的标准化流程。
4.1 数据质量问题的四维分类
不同质量问题对模型的影响机制不同,诊断方法也各有侧重。下表概括了四类问题的定义、典型表现与初步诊断手段。
| 问题类型 | 定义 | 典型表现 | 初步诊断方法 |
|---|---|---|---|
| 缺失值 | 数据记录中某个字段为空或不存在 | NaN、NULL、空字符串、占位符(如 -999) | 统计缺失比例、可视化缺失模式(矩阵图) |
| 异常值 | 数据点显著偏离整体分布或业务常识 | 极端数值、业务逻辑矛盾(如年龄 200 岁) | 箱线图、Z-Score、IQR 规则、业务阈值 |
| 重复值 | 完全一致或关键字段一致的多条记录 | 完全重复行、部分字段重复(如相同 ID) | duplicated() 检测、主键唯一性校验 |
| 不一致数据 | 同一实体在不同记录或字段中存在矛盾 | 单位不统一、日期格式混乱、分类标签拼写错误 | 交叉字段校验、格式正则匹配、枚举值统计 |
诊断优先级建议: 先处理重复值(去重成本最低),再处理不一致数据(影响后续合并),最后处理缺失值与异常值(需结合业务判断)。
4.2 缺失值初步诊断
缺失值诊断的核心目标是回答三个问题:缺失多少?(缺失比例)、缺失在哪?(哪些字段/样本)、缺失是否随机?(缺失模式)。
4.2.1 缺失比例统计
使用 isnull().sum() / len(df) 计算每个特征的缺失比例。通常将缺失比例分为三个等级:
- 低缺失(< 5%): 可直接删除或简单填充。
- 中缺失(5% - 30%): 需分析缺失模式,选择填充或建模预测。
- 高缺失(> 30%): 考虑删除特征或构造“是否缺失”指示变量。
4.2.2 缺失模式可视化
缺失模式图(Missing Pattern Matrix)可以直观展示缺失是否集中在某些样本或特征组合中。下图展示了一个典型的结构化缺失模式:
实用工具: Python 中可使用 missingno 库的 matrix() 函数快速生成缺失模式图;R 语言可使用 VIM 包的 aggr() 函数。
4.3 异常值初步诊断
异常值诊断需结合统计方法与业务知识。初步诊断阶段推荐使用以下三种互补方法:
4.3.1 箱线图法(IQR规则)
箱线图通过四分位数识别异常值:下界 = Q1 - 1.5×IQR,上界 = Q3 + 1.5×IQR。超出上下界的点标记为异常值。该方法对数据分布假设要求低,适用于偏态分布。
4.3.2 Z-Score法
适用于近似正态分布的数据。通常将 |Z| > 3 的点视为异常值。对于小样本(n < 30),建议使用修正的 Z-Score(MAD法)。
4.3.3 业务阈值法
某些字段存在天然的业务边界。例如:年龄应在 0-120 之间,交易金额应为正数。这类规则应优先于统计方法执行。
常见陷阱: 不要一次性删除所有异常值。异常值可能包含重要信息(如欺诈交易、设备故障信号)。建议先标记,在特征筛选阶段结合目标变量进一步分析。
4.4 重复值初步诊断
重复值诊断分为两个层次:
- 完全重复行: 所有字段完全一致。使用
df.duplicated()检测,通常直接删除。 - 部分重复(关键字段重复): 如相同用户ID出现多次但其他字段不同。需判断是数据冗余还是业务上的合理重复(如多次交易记录)。
诊断时需明确唯一标识符(主键)。若数据集中存在主键,则主键重复即为异常;若无主键,需结合业务定义“重复”的判定规则。
4.5 不一致数据初步诊断
不一致数据是数据质量中最隐蔽的问题,常见于多源数据合并场景。初步诊断方法包括:
| 不一致类型 | 示例 | 诊断方法 |
|---|---|---|
| 格式不一致 | 日期:2024/01/01 vs 2024-01-01 vs 01/01/2024 | 正则表达式匹配、pd.to_datetime() 错误捕获 |
| 单位不一致 | 身高:175 cm vs 1.75 m | 字段值域分析(如最大值/最小值异常) |
| 分类标签不一致 | 性别:男 vs M vs Male | value_counts() 枚举值统计 |
| 逻辑矛盾 | 出生日期 > 入职日期 | 交叉字段比较(如 df[‘birth’] > df[‘hire_date’]) |
4.6 数据质量诊断报告模板
完成初步诊断后,建议输出标准化的数据质量报告。以下是一个简洁的报告框架:
# 数据质量诊断报告(示例)
# 数据集:customer_data.csv | 样本数:10000 | 特征数:25
## 1. 缺失值诊断
- 缺失比例 > 30% 的特征:income (42%), occupation (35%) → 建议删除或构造指示变量
- 缺失比例 5%-30% 的特征:education (12%), age (8%) → 需进一步分析缺失模式
- 缺失比例 < 5% 的特征:其余20个特征 → 直接填充均值/众数
## 2. 异常值诊断
- 箱线图法检出异常:age字段有5个样本 > 120岁 → 标记为业务异常
- Z-Score法检出异常:transaction_amount字段有12个样本 |Z|>3 → 需结合业务确认
## 3. 重复值诊断
- 完全重复行:0行
- 主键重复:customer_id 存在3组重复 → 保留最新记录
## 4. 不一致数据诊断
- 日期格式:2种格式混合 → 统一为 YYYY-MM-DD
- 性别标签:'男','M','Male' 共存 → 映射为统一编码
最佳实践: 将数据质量诊断流程封装为自动化函数,每次数据更新后自动运行并生成报告。这能显著降低后续特征筛选阶段的返工成本。
4.7 诊断流程总览
下图总结了数据质量初步诊断的完整流程,从原始数据输入到输出诊断报告,每个环节都对应具体的检测方法。
4.8 初步诊断后的行动建议
完成初步诊断后,根据结果采取差异化策略:
- 轻度问题(缺失 < 5%,异常值 < 1%): 直接进入特征筛选阶段,在预处理环节统一处理。
- 中度问题: 需在特征筛选前进行针对性清洗,避免污染后续统计量计算。
- 重度问题(缺失 > 30%,大量不一致): 建议返回数据采集/整合环节,排查数据源问题,否则模型效果难以保证。
关键原则: 数据质量诊断不是一次性工作。在特征筛选过程中,每构造一个新特征,都应重新评估该特征的数据质量。迭代式诊断能有效避免“垃圾进,垃圾出”的问题。