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 如何逐层检测。
常见误区: 不要试图用一个检测规则覆盖所有维度。例如,非空检查只解决完整性问题,无法替代有效性的格式校验。在 Python 工具链中,建议为每个维度建立独立的检测函数,最后通过聚合器合并质量报告。
2.5 本章小结
数据质量的六个维度构成了检测工具的评估骨架。在实际项目中,建议按以下步骤落地:
- 维度映射: 将业务需求映射到六个维度,明确每个字段的检测重点。
- 规则配置: 为每个维度编写可复用的 Python 检测函数,支持参数化配置。
- 优先级排序: 先处理完整性和唯一性,再处理有效性和一致性,最后评估准确性和时效性。
- 报告聚合: 将各维度检测结果合并为统一的质量评分矩阵,支持钻取分析。