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)可以直观展示缺失是否集中在某些样本或特征组合中。下图展示了一个典型的结构化缺失模式:

缺失模式矩阵示意图 特征A 特征B 特征C 特征D 特征E 样本1-5(完整) 样本6-8(A缺失) 样本9-12(C、E缺失) 样本13-15(全部缺失) 有值 缺失 观察要点: ① 特征A的缺失集中在样本6-8,可能存在批次问题; ② 特征C和E同时缺失,提示可能来自同一数据源。

实用工具: 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 诊断流程总览

下图总结了数据质量初步诊断的完整流程,从原始数据输入到输出诊断报告,每个环节都对应具体的检测方法。

数据质量初步诊断流程图 原始数据集 缺失值诊断 异常值诊断 重复值诊断 不一致诊断 缺失比例统计 缺失模式矩阵 箱线图 / IQR Z-Score / 业务阈值 完全重复检测 主键唯一性校验 格式/单位检查 交叉字段逻辑校验 问题汇总与标记 数据质量诊断报告

4.8 初步诊断后的行动建议

完成初步诊断后,根据结果采取差异化策略:

  • 轻度问题(缺失 < 5%,异常值 < 1%): 直接进入特征筛选阶段,在预处理环节统一处理。
  • 中度问题: 需在特征筛选前进行针对性清洗,避免污染后续统计量计算。
  • 重度问题(缺失 > 30%,大量不一致): 建议返回数据采集/整合环节,排查数据源问题,否则模型效果难以保证。

关键原则: 数据质量诊断不是一次性工作。在特征筛选过程中,每构造一个新特征,都应重新评估该特征的数据质量。迭代式诊断能有效避免“垃圾进,垃圾出”的问题。