数据质量评估:数据完整性、准确性、一致性、时效性的验证方法

数据质量,说白了就是模型的命根子。我见过太多模型,算法再漂亮,上线后一塌糊涂,最后查下来都是数据源头出了问题。今天咱们就聊聊,怎么把这四个维度的验证做实。

一、数据完整性验证

完整性,就是该有的数据都得有。别小看这个,我遇到过一家消费金融公司,他们的申请数据里,收入字段缺失率高达30%。你想想看,这模型还怎么玩?

1.1 缺失值检测

我个人习惯,先跑一个全表的缺失率统计。代码很简单,但很管用:

-- 检查每个字段的缺失率
SELECT 
    column_name,
    COUNT(*) AS total_rows,
    SUM(CASE WHEN column_value IS NULL THEN 1 ELSE 0 END) AS null_count,
    ROUND(SUM(CASE WHEN column_value IS NULL THEN 1 ELSE 0 END) * 100.0 / COUNT(*), 2) AS null_pct
FROM dataset
GROUP BY column_name
ORDER BY null_pct DESC;

这里有个坑:有些字段不是NULL,但填的是"未知"、"N/A"、"0"这种无效值。我建议把这些也纳入缺失统计。

注意:缺失率超过5%的字段,就要重点关注了。超过20%的,除非有强业务逻辑支撑,否则建议直接剔除。

1.2 记录数完整性

除了字段缺失,还得看记录数对不对。比如,你预期每天应该有10万笔交易,结果某天只有8万。这可能是上游系统出了问题。

我一般会做这么几件事:

  • 对比源系统和目标系统的记录数
  • 检查时间序列是否有断点
  • 验证主键唯一性

二、数据准确性验证

准确性,就是数据得反映真实情况。这步最费功夫,也最容易出问题。

2.1 字段级准确性

举个例子,年龄字段。你可能会收到"150岁"这种离谱值。或者性别字段出现"男"、"女"、"M"、"F"、"1"、"0"混在一起的情况。

我常用的验证方法:

  • 范围检查:数值型字段是否在合理区间内
  • 格式检查:日期、身份证号、手机号是否符合规范
  • 枚举值检查:分类字段是否在预期取值内
-- 年龄字段准确性检查
SELECT 
    CASE 
        WHEN age < 0 THEN '负数'
        WHEN age > 120 THEN '超龄'
        WHEN age BETWEEN 0 AND 18 THEN '未成年'
        WHEN age BETWEEN 18 AND 65 THEN '成年'
        WHEN age > 65 THEN '老年'
        ELSE '未知'
    END AS age_category,
    COUNT(*) AS cnt
FROM customer
GROUP BY age_category;

2.2 跨字段逻辑校验

有时候单个字段没问题,但组合起来就矛盾了。比如,婚姻状态是"未婚",但配偶姓名却有值。或者,申请日期早于出生日期。

实战技巧:我建议建立一套业务规则库,把常见的逻辑矛盾都列进去。比如"收入为0但贷款金额大于100万"这种,一看就有问题。

三、数据一致性验证

一致性,说白了就是不同来源的数据能不能对得上。这往往是数据仓库和业务系统之间的老大难问题。

3.1 跨系统一致性

我记得有一次做贷后模型,发现催收系统的逾期天数和核心系统的对不上。查了半天,原来是两个系统对"逾期"的定义差了1天。一个算T+1,一个算T+0。

验证方法:

  • 关键指标(如贷款余额、逾期金额)跨系统比对
  • 汇总数据与明细数据核对
  • 时间戳一致性检查

3.2 历史数据一致性

数据迁移或者系统升级后,历史数据的一致性最容易出问题。我建议做"前后对比":

-- 新旧系统数据一致性检查
SELECT 
    a.customer_id,
    a.balance AS old_balance,
    b.balance AS new_balance,
    ABS(a.balance - b.balance) AS diff
FROM old_system a
JOIN new_system b ON a.customer_id = b.customer_id
WHERE ABS(a.balance - b.balance) > 0.01;

四、数据时效性验证

时效性,就是数据得够"新鲜"。风控模型对时效性要求特别高,过时的数据等于垃圾。

4.1 数据新鲜度检查

我一般会看两个指标:

  • 数据延迟:从业务发生到数据入库的时间差
  • 数据时效:模型使用的数据距离当前时间有多久

举个例子,征信数据。如果用的是3个月前的征信报告,那客户的负债情况可能已经天翻地覆了。

关键指标:对于申请评分卡,我要求数据延迟不超过24小时。对于行为评分卡,可以放宽到T+1。但对于反欺诈模型,延迟超过1小时就不可接受了。

4.2 时间窗口验证

有些模型对时间窗口特别敏感。比如,用过去12个月的数据预测未来违约。如果实际只有10个月的数据,那模型效果肯定打折扣。

验证方法:

  1. 检查每个样本的时间戳是否在预期窗口内
  2. 验证窗口长度是否一致
  3. 检查是否有未来数据泄露(比如用未来的数据预测过去)

五、数据质量评估框架

说了这么多,咱们得有个系统性的评估框架。我习惯用下面这张图来梳理:

数据质量评估框架 数据质量评估 完整性 准确性 一致性 时效性 缺失值检测 记录数完整性 主键唯一性 字段范围检查 格式校验 逻辑矛盾检查 跨系统比对 汇总明细核对 历史数据对比 数据延迟检查 时间窗口验证 未来数据泄露 验证流程 数据探查 → 规则定义 → 自动化检查 → 异常处理 → 报告输出 每个维度设置阈值,不达标则打回数据源

六、实战中的避坑指南

最后,分享几个我踩过的坑:

我曾经...接手过一个模型,数据完整性检查都过了,但模型效果就是差。后来发现,虽然字段没缺失,但大量数据是"默认值"。比如年龄字段全是"18",收入字段全是"5000"。这种"伪完整"比真缺失更可怕。

还有一个常见问题:数据一致性检查只做了总量比对,没做明细比对。总量对上了就以为没问题,结果某个月的数据明细全是乱的。我建议,总量和明细都要查,而且要用随机抽样的方式做人工复核。

我的习惯:每次数据质量评估,我都会留出10%的样本做人工抽检。虽然费时间,但能发现很多自动化检查漏掉的问题。特别是那些"看起来合理但实际错误"的数据。

嗯,数据质量这块,说白了就是"慢工出细活"。别指望一次检查就能搞定,要建立持续监控的机制。我一般会在模型上线后,每周跑一次数据质量报告,发现问题及时处理。

记住一句话:数据质量不是模型验证的附属品,而是整个风控体系的基石。这块做不好,后面再漂亮的模型都是空中楼阁。