2. 数据质量基础概念:六大核心维度

在构建数据质量检测工具之前,必须建立统一的质量评估语言。业界通常将数据质量拆解为六个相互独立又彼此关联的维度:准确性、完整性、一致性、时效性、唯一性和有效性。这六个维度构成了所有检测规则的底层逻辑。

2.1 六大维度总览

下表从定义、典型问题、检测对象三个角度对六个维度进行横向对比,帮助建立全局认知。

维度 核心定义 典型问题举例 检测对象
准确性 数据记录值与真实世界一致的程度 用户年龄为 150 岁、订单金额多一位小数点 字段值、跨字段逻辑
完整性 数据是否存在缺失或空值 手机号字段为 NULL、地址缺少省份 字段空值率、记录缺失率
一致性 同一数据在不同系统或字段中保持统一 CRM 中性别为 "M",订单库中为 "男" 跨表、跨系统、编码映射
时效性 数据在需要时是可用的、最新的 昨日交易数据今天下午仍未入库 时间戳、更新频率、延迟
唯一性 实体在数据集中只出现一次 同一客户 ID 出现两条重复记录 主键、业务键、重复记录
有效性 数据符合预定义的格式、范围或业务规则 邮箱格式缺少 "@"、日期为 2025-02-30 正则、枚举值、边界值
实践提示: 在实际项目中,一个字段可能同时违反多个维度。例如,空值既属于完整性问题,也可能导致准确性无法验证。建议在检测规则设计阶段就明确每个规则归属的主维度,避免检测结果重复计数。

2.2 维度关系与检测优先级

六个维度并非完全独立,它们之间存在天然的依赖与递进关系。下图展示了数据质量检测的推荐优先级顺序:先解决完整性和唯一性,再处理有效性和一致性,最后评估准确性和时效性。

数据质量六大维度依赖关系 数据质量维度检测优先级与依赖关系 完整性 数据是否缺失 唯一性 数据是否重复 有效性 格式与范围合规 一致性 跨系统编码统一 准确性 与真实世界一致 时效性 贯穿全流程 说明:时效性作为横贯维度,影响所有其他维度的检测结果时效
检测策略建议: 在 Python 工具链中,建议按“基础层 → 规则层 → 价值层”的顺序编排检测模块。先通过 isnull() 和 duplicated() 清理脏数据,再用正则和枚举校验格式,最后用业务规则验证准确性。时效性检测应作为独立调度器,在数据入库时触发。

2.3 各维度深度解析与 Python 检测思路

2.3.1 准确性 (Accuracy)

准确性衡量数据记录与真实世界实体的一致程度。这是最难自动验证的维度,通常需要外部基准或业务规则。

  • 检测方法: 范围校验(年龄 0-120)、逻辑校验(下单时间 ≤ 发货时间)、与权威数据源交叉比对。
  • Python 示例:
import pandas as pd

df = pd.DataFrame({'age': [25, 150, 30, -5]})
# 准确性规则:年龄必须在 0~120 之间
df['age_valid'] = df['age'].between(0, 120)
print(df[~df['age_valid']])  # 输出异常记录

2.3.2 完整性 (Completeness)

完整性关注数据是否存在缺失。缺失可能是字段级(列空值)或记录级(整行缺失)。

  • 检测方法: 统计空值比例、计算记录缺失率、检查必填字段。
  • Python 示例:
# 计算每列缺失率
missing_rate = df.isnull().mean()
print(missing_rate[missing_rate > 0.05])  # 缺失率超过 5% 的列

2.3.3 一致性 (Consistency)

一致性确保同一数据在不同存储位置或不同字段中保持逻辑统一。常见于跨系统数据集成场景。

  • 检测方法: 编码映射校验("M" ↔ "男")、汇总值比对(总金额 = 明细之和)、跨表外键关联。
  • Python 示例:
# 检查性别编码一致性
gender_map = {'M': '男', 'F': '女', '1': '男', '0': '女'}
df['gender_std'] = df['gender'].map(gender_map)
inconsistent = df[df['gender_std'] != df['gender_target']]

2.3.4 时效性 (Timeliness)

时效性评估数据从产生到可被使用的时间延迟,以及数据是否仍然适用于当前决策。

  • 检测方法: 计算数据延迟(当前时间 - 数据时间戳)、检查更新频率是否满足 SLA。
  • Python 示例:
from datetime import datetime, timedelta

df['event_time'] = pd.to_datetime(df['event_time'])
now = datetime.now()
df['delay_hours'] = (now - df['event_time']).dt.total_seconds() / 3600
# 标记超过 24 小时未更新的数据
stale_data = df[df['delay_hours'] > 24]

2.3.5 唯一性 (Uniqueness)

唯一性要求每个业务实体在数据集中只出现一次。重复记录会导致统计偏差和资源浪费。

  • 检测方法: 主键唯一性检查、基于业务键的重复记录检测、模糊匹配去重。
  • Python 示例:
# 基于订单号检查重复
duplicates = df[df.duplicated(subset=['order_id'], keep=False)]
print(f"重复订单数: {len(duplicates)}")

2.3.6 有效性 (Validity)

有效性检验数据是否符合预定义的格式、类型和业务规则。这是最容易被自动化检测的维度。

  • 检测方法: 正则表达式(邮箱、手机号)、数据类型校验、枚举值检查、边界值测试。
  • Python 示例:
import re

def validate_email(email):
    pattern = r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$'
    return bool(re.match(pattern, str(email)))

df['email_valid'] = df['email'].apply(validate_email)

2.4 维度交叉:一个真实案例

以下案例展示一条数据如何同时违反多个质量维度,以及 Python 如何逐层检测。

多维度交叉检测案例流程 一条问题数据的多维度检测流程 原始记录 完整性:手机号为空 有效性:邮箱格式错 唯一性:订单号重复 时效性:数据延迟3天 综合质量评分:25%(4项不合格) 需返回业务系统修正
常见误区: 不要试图用一个检测规则覆盖所有维度。例如,非空检查只解决完整性问题,无法替代有效性的格式校验。在 Python 工具链中,建议为每个维度建立独立的检测函数,最后通过聚合器合并质量报告。

2.5 本章小结

数据质量的六个维度构成了检测工具的评估骨架。在实际项目中,建议按以下步骤落地:

  1. 维度映射: 将业务需求映射到六个维度,明确每个字段的检测重点。
  2. 规则配置: 为每个维度编写可复用的 Python 检测函数,支持参数化配置。
  3. 优先级排序: 先处理完整性和唯一性,再处理有效性和一致性,最后评估准确性和时效性。
  4. 报告聚合: 将各维度检测结果合并为统一的质量评分矩阵,支持钻取分析。