数据质量初步评估:完整性、一致性、准确性、时效性

拿到一份新数据,先别急着建模。我一般会花10%的时间做一轮快速评估,看看这数据能不能用。说白了,就是检查四个维度:完整性、一致性、准确性、时效性。你想想看,如果你连字段是不是齐的、格式是不是对的都说不清,后面的特征工程全是白搭。

这一节我们就聊聊这四个概念,以及对应的检查方法。我会结合我踩过的坑来讲,有些方法看着简单,但真做起来挺容易翻车。

1. 数据完整性(Completeness)

完整性最简单——看缺失值。但我得提醒你:不是所有缺失都是缺陷。比如信用评分里的“月收入”,很多申请人会跳过不填。这时候你要区分三种情况:

  • 随机缺失:没有规律,可以填充或删除
  • 系统缺失:比如高收入人群更倾向不填——这本身就是信息
  • 结构缺失:字段本身就不该存在(如“配偶月收入”对未婚的人就是空)
我的习惯做法:先统计每个字段的缺失比例,然后画个缺失值热力图。如果某个字段缺失超过50%,我会标记为高危,回头跟业务确认。

代码层面检查很简单:

# Python 快速检查缺失
import pandas as pd
df.isnull().sum() / len(df) * 100

另外,空字符串、'N/A'、'unknown'这类假值也要处理。我曾经接过一个数据集,里面“护照号”字段全是空字符串,长度0。当时我按缺失率0%报了,结果被老板骂了一顿。后来才知道——数据仓库ETL会把空值转成空字符串。所以别只看isnull,还得看空白字符。

2. 数据一致性(Consistency)

一致性是四个概念里最容易出问题的一个。我见过同一个客户在A表里性别是“男”,在B表里是“M”——这种不一致一多,后面关联查出来全是脏数据。

检查方法主要分三类:

类型检查方法举个栗子
格式一致正则匹配、枚举值校验手机号11位,后4位不能全零
范围一致边界检查、业务逻辑验证年龄0~120,超出就标记异常
跨表一致主键外键关联、汇总对账申请表中的用户ID必须在用户主表中存在

我会专门写个一致性检查脚本,跑完全量数据。遇到不一致的,先不修,而是统计分布。比如客户性别字段,如果出现“男、女、M、F、0、1”六种值,那八成是多个数据源没统一标准。

注意:一致性检查不能只靠自动脚本。业务逻辑是活的。比如2019年前的身份证号是15位,之后是18位——系统不会告诉你这个变化,你得懂业务。

3. 数据准确性(Accuracy)

准确性和真实世界比较。比如“客户年龄”是30岁,实际他今年25——这种偏差没人能完全避免。我们能做的,是找那些明显离谱的值。

常用的方法有:

  • 统计分布法:计算均值、标准差,超过3σ标记为异常
  • 业务规则法:比如申请贷款时填的“月收入”和“月还款额”不能超过某个倍数
  • 交叉验证法:用其他字段反推,比如用电话区号验证邮编

我印象特别深的一个案例:某合作方提供的征信报告中,“逾期金额”一列全是整数,而且全是100的倍数。一查发现,他们数据库里存的是“逾期天数×100”,根本没做转换。你说这算准确吗?在数据库层面是准的,但在业务层面完全错了。后来我加了一条规则:任何金额字段,如果所有值都是100的倍数,先报警。

4. 数据时效性(Timeliness)

时效性常被忽略,但信用评分里特别致命。一份半年前的征信报告,除了教育背景,其他基本都过时了。

检查时效性,核心就看两个指标:

  • 数据采集时间 vs 系统更新时间
  • 业务有效期:比如“近6个月平均使用额度”这个特征,如果采集日期是2019年,那2025年建模完全没用

我会加一个字段:data_freshness_days,计算今天距离数据最后更新日的间隔。如果超过90天,直接标记为过期样本。

经验之谈:时效性检查一定要跑在特征工程之前。我见过同事用过期数据训练了个好模型,上线后效果暴跌——因为时间窗口变了。现在我的数据处理pipeline里,第一道坎就是时效性过滤。

四个维度对比一览

维度核心问题典型检查工具个人重点提醒
完整性字段有没有空值?缺失率统计、热力图别漏掉空字符串和占位符
一致性数据格式/取值范围统一吗?枚举校验、正则、主键关联多源合并时最易翻车
准确性数据与真实情况吻合吗?异常值检测、业务规则、交叉验证不要迷信原始值,要反问逻辑
时效性数据是否过时?时间戳比较、业务有效期先过滤再特征工程

下面这张图,我把它画成四象限+中心检查流程,你自己看的时候可以对着记。

数据质量初步评估——四个维度 数据质量评估 缺失→格式→分布→时效 完整性 缺失值统计 空字符串排查 一致性 格式/枚举校验 跨表主键关联 准确性 异常值检测(3σ) 业务规则交叉验证 时效性 采集/更新时间差 业务有效期截断 检查顺序建议:完整性 → 一致性 → 准确性 → 时效性 先看“有没有”,再看“对不对”,最后查“新不新”

说到顺序,我推荐“完整性 → 一致性 → 准确性 → 时效性”这个流程。先解决“有没有数据”的问题,再统一格式,然后揪出异常值,最后判断时间窗口。每一步都可能淘汰一批样本,但早点淘汰总比建完模型再返工强。

一个小trick:如果你只有一天时间做质量评估,就盯住完整性和时效性。我见过太多项目死在这两个上面——要么缺关键字段,要么数据全是半年前的。一致性和准确性可以后面再补。

好,这一轮快速评估做完,你基本上就知道数据能不能用、哪里需要修了。接下来才是真正的清洗工作。但记住:评估不是一次性活。数据每更新一次,我建议重新跑一遍这四个检查——尤其是时效性,窗口一变,整个样本集都可能要重选。