数据质量评估:数据完整性、准确性、一致性、时效性的验证方法
数据质量,说白了就是模型的命根子。我见过太多模型,算法再漂亮,上线后一塌糊涂,最后查下来都是数据源头出了问题。今天咱们就聊聊,怎么把这四个维度的验证做实。
一、数据完整性验证
完整性,就是该有的数据都得有。别小看这个,我遇到过一家消费金融公司,他们的申请数据里,收入字段缺失率高达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"这种无效值。我建议把这些也纳入缺失统计。
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 跨字段逻辑校验
有时候单个字段没问题,但组合起来就矛盾了。比如,婚姻状态是"未婚",但配偶姓名却有值。或者,申请日期早于出生日期。
三、数据一致性验证
一致性,说白了就是不同来源的数据能不能对得上。这往往是数据仓库和业务系统之间的老大难问题。
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个月前的征信报告,那客户的负债情况可能已经天翻地覆了。
4.2 时间窗口验证
有些模型对时间窗口特别敏感。比如,用过去12个月的数据预测未来违约。如果实际只有10个月的数据,那模型效果肯定打折扣。
验证方法:
- 检查每个样本的时间戳是否在预期窗口内
- 验证窗口长度是否一致
- 检查是否有未来数据泄露(比如用未来的数据预测过去)
五、数据质量评估框架
说了这么多,咱们得有个系统性的评估框架。我习惯用下面这张图来梳理:
六、实战中的避坑指南
最后,分享几个我踩过的坑:
还有一个常见问题:数据一致性检查只做了总量比对,没做明细比对。总量对上了就以为没问题,结果某个月的数据明细全是乱的。我建议,总量和明细都要查,而且要用随机抽样的方式做人工复核。
嗯,数据质量这块,说白了就是"慢工出细活"。别指望一次检查就能搞定,要建立持续监控的机制。我一般会在模型上线后,每周跑一次数据质量报告,发现问题及时处理。
记住一句话:数据质量不是模型验证的附属品,而是整个风控体系的基石。这块做不好,后面再漂亮的模型都是空中楼阁。