3. 完整性指标定义:空值率、缺失率、记录完整度、字段完整度
聊到数据质量,完整性是我个人觉得最直观、也最容易出问题的一环。说白了,完整性就是问一句:「该有的数据,你到底有没有?」
我在项目里见过太多这样的情况:一张看似完美的报表,跑出来结果却对不上。查到最后,发现某个关键字段空了 30% 的数据。嗯,这种坑,踩过一次就忘不了。
完整性指标,我们拆成四个核心概念来讲:空值率、缺失率、记录完整度、字段完整度。它们之间有关系,但侧重点完全不同。
3.1 空值率(Null Rate)
空值率是最基础的指标。它衡量的是:某个字段中,空值(NULL)占所有记录的比例。
公式:
空值率 = (字段中空值数量 / 总记录数) × 100%
举个例子。一张用户表有 10,000 条记录,其中「手机号」字段有 150 条是空的。那么手机号的空值率就是 1.5%。
你可能会问:「空值率越低越好吗?」不一定。我遇到过一种情况:某个系统为了「好看」,把空值全部填成了默认值 '0' 或 '未知'。结果空值率是 0%,但数据质量反而更差了——因为你根本分不清这个 '0' 是真实值还是填充值。
注意:空值率只统计数据库中的 NULL。如果字段被填了空字符串 ''、'N/A'、'0' 等占位符,空值率不会把它们算进去。这时候就需要用缺失率来补充判断。
3.2 缺失率(Missing Rate)
缺失率比空值率更「狠」一点。它不仅统计 NULL,还把那些「看起来像空」的值也算进去。
公式:
缺失率 = (缺失值数量 / 总记录数) × 100%
这里的「缺失值」包括:NULL、空字符串、全空格、以及你自定义的无效占位符(比如 '-', 'N/A', 'unknown')。
我曾经帮一个电商团队做数据清洗。他们告诉我「用户邮箱字段空值率只有 2%」,我一看数据,好家伙,那 2% 确实是 NULL,但还有 8% 填的是 'noemail@test.com' 和 '123456@qq.com' 这种垃圾数据。用缺失率一算,实际缺失率是 10%。
| 对比维度 | 空值率 | 缺失率 |
|---|---|---|
| 统计范围 | 仅 NULL | NULL + 空串 + 占位符 |
| 适用场景 | 数据库字段完整性检查 | 业务数据有效性检查 |
| 误判风险 | 可能漏掉「假填充」 | 需要自定义缺失值列表 |
| 计算成本 | 低 | 中(需要做值匹配) |
我的建议:在数据质量看板中,同时展示空值率和缺失率。空值率用于快速扫描,缺失率用于深度分析。两个指标放在一起,你才能看到全貌。
3.3 记录完整度(Record Completeness)
记录完整度是从「行」的视角来看的。它衡量的是:一条记录中,有多少比例的字段是完整的。
公式:
记录完整度 = (该记录中非空字段数 / 该记录总字段数) × 100%
举个例子。一张订单表有 10 个字段,某条订单只填了 7 个字段,那么这条记录的完整度就是 70%。
为什么要看这个指标?因为有时候单个字段的空值率看起来不高,但多条记录同时缺多个字段,整体数据可用性就很差。我记得有一次做用户画像分析,发现「年龄」字段空值率只有 5%,「收入」字段空值率 8%,「职业」字段空值率 6%。单独看都还行,但一算记录完整度——只有 60% 的用户同时拥有这三个字段。那这个画像的覆盖度就大打折扣了。
在实际看板中,我习惯把记录完整度按区间分组展示:
- 完整记录:完整度 = 100%
- 基本完整:完整度 ≥ 80%
- 部分缺失:完整度 50% ~ 80%
- 严重缺失:完整度 < 50%
3.4 字段完整度(Field Completeness)
字段完整度是从「列」的视角来看的。它衡量的是:某个字段在所有记录中的完整程度。
公式:
字段完整度 = (1 - 字段缺失率) × 100%
说白了,字段完整度就是缺失率的「反义词」。缺失率是 5%,字段完整度就是 95%。
你可能会觉得:「这不就是换个说法吗?」其实不是。在数据质量看板中,用「完整度」比用「缺失率」更直观。因为人天生对「正向指标」更敏感。你说「这个字段完整度 98%」,大家会觉得「还不错」;你说「缺失率 2%」,有些人可能觉得「才 2%,无所谓」。但 2% 在百万级数据里就是 2 万条,影响很大。
我一般会在看板上同时展示这两个指标:字段完整度用绿色进度条,缺失率用红色数字。一眼就能看出哪些字段需要关注。
3.5 四个指标的关系与选择
这四个指标不是孤立的。它们从不同维度描述同一个问题:数据有没有缺?
在实际项目中,我一般这样用:
- 数据接入阶段:用空值率做快速筛查,发现明显问题。
- 数据清洗阶段:用缺失率做深度分析,定位「假填充」数据。
- 数据应用阶段:用记录完整度评估单条数据是否可用。
- 数据监控阶段:用字段完整度做长期趋势监控。
一个小技巧:在看板中,把字段完整度做成趋势图。如果某个字段的完整度连续 3 天下降,自动触发告警。我曾经用这个规则发现了一个上游接口的 bug——对方改了接口文档但没通知我们,导致新接入的数据全是空的。要不是完整度趋势图报警,这个坑可能要等到月底对账才能发现。
3.6 避坑指南
最后,分享几个我踩过的坑:
- 别只看空值率:我曾经只盯着空值率看,结果被「假填充」数据坑了两次。从那以后,我每个字段都会配一个缺失率指标。
- 记录完整度要设阈值:不是所有字段都同等重要。比如「用户昵称」缺失了可能不影响核心业务,但「订单金额」缺失了就是大问题。我建议给每个字段设一个权重,计算加权记录完整度。
- 注意数据量级:空值率 0.1% 在小数据量下可能只有几条,但在亿级数据里就是十万条。看百分比的同时,一定要看值。
嗯,完整性指标就讲到这里。这四个指标是数据质量看板的基础,把它们搞清楚了,后面的准确性、一致性、时效性指标才能站得住脚。