4. 数据质量探查与清洗:缺失值、异常值、重复值、时间戳对齐、数据一致性校验

数据质量是模型性能的基石。在商户风险评分场景中,原始数据通常来自多个异构源(如交易流水、工商注册、黑名单库、第三方征信),脏数据会直接导致模型偏差、过拟合或线上推理失效。本章围绕五个核心维度展开系统性探查与清洗。

4.1 缺失值探查与处理

缺失值在商户数据中极为常见,例如“注册资本”字段在个体户中可能为空,“法人身份证号”在部分历史商户中缺失。处理策略需区分缺失机制与业务含义。

缺失类型业务示例推荐处理方式
完全随机缺失录入员随机漏填删除(缺失率 < 5%)或均值/中位数填充
随机缺失高风险商户更易缺失联系人信息多重插补或模型预测填充
非随机缺失注册资本为0的商户故意不填单独编码为“缺失类”,保留业务信号
结构性缺失非企业商户无“上市代码”保留空值,特征工程中创建哑变量
实践建议:在风险评分模型中,建议对缺失率超过 70% 的字段直接剔除;对 5%~70% 的字段,优先使用业务规则填充(如“逾期天数”缺失视为0),其次使用中位数或模型预测。

4.2 异常值检测与修正

异常值可能源于数据采集错误、商户欺诈行为或极端经营波动。常用检测方法包括统计阈值、箱线图、孤立森林等。

  • 统计阈值法:适用于正态分布特征,如“月交易金额”超出 μ±3σ 视为异常。
  • 箱线图法:适用于偏态分布,IQR 下界 Q1-1.5×IQR,上界 Q3+1.5×IQR。
  • 孤立森林:适用于高维特征空间,可批量检测异常样本。
  • 业务规则法:如“成立日期”早于 1900 年或晚于当前日期,直接标记为异常。
注意:不要机械删除异常值。在风控场景中,极端值往往代表欺诈或高风险行为,应单独标记为特征(如“是否异常交易”),而非直接丢弃。

4.3 重复值识别与去重

重复数据会导致模型对同一商户过度学习,降低泛化能力。重复类型包括完全重复与关键字段重复。

重复类型识别依据处理策略
完全重复行所有字段完全相同保留一条,删除其余
主键重复商户ID相同,但其他字段不同按时间戳取最新,或合并字段
业务语义重复同一商户注册多个账号通过身份证号/手机号去重,保留活跃度最高的
# 示例:基于商户ID去重,保留最新记录
import pandas as pd

df = df.sort_values('update_time', ascending=False)
df = df.drop_duplicates(subset=['merchant_id'], keep='first')

4.4 时间戳对齐

多源数据的时间戳格式、时区、粒度不一致,是模型上线后特征穿越(look-ahead bias)的主要来源。

  • 格式统一:将所有时间戳转为 UTC 标准格式(如 yyyy-MM-dd HH:mm:ss)。
  • 时区对齐:明确业务时区(如 Asia/Shanghai),统一转换。
  • 粒度对齐:交易流水精确到秒,工商数据精确到日,需按日聚合对齐。
  • 时间窗口校验:确保特征计算时只使用历史数据,禁止使用未来信息。
关键检查点:在模型训练前,必须对每个特征的时间戳做“滞后性”校验——特征时间戳必须早于标签时间戳,否则构成数据泄露。

4.5 数据一致性校验

一致性校验确保跨表、跨系统的同一业务含义字段值逻辑自洽。

校验类型检查内容常见问题
字段值域一致性性别字段是否只有 M/F出现“男/女/1/0”混用
逻辑约束一致性注册日期 ≤ 当前日期注册日期晚于当前日期
跨表引用一致性商户ID在交易表中存在孤儿交易记录
汇总一致性子商户交易总和 = 父商户汇总汇总金额不匹配
# 示例:跨表一致性校验
# 检查交易表中的 merchant_id 是否都在商户主表中
orphan_txns = transactions[~transactions['merchant_id'].isin(merchants['merchant_id'])]
print(f"孤儿交易记录数: {len(orphan_txns)}")

4.6 数据质量探查与清洗流程总览

以下 SVG 图展示了从原始数据到可用特征集的完整探查与清洗流水线,包含五个核心步骤及其输出产物。

数据质量探查与清洗流程 数据质量探查与清洗流程 原始多源数据接入 ① 缺失值探查与处理 ② 异常值检测与修正 ③ 重复值识别与去重 ④ 时间戳对齐 ⑤ 数据一致性校验 各阶段输出产物 • 缺失率统计报告 • 异常值标记特征 • 去重后商户主表 • 统一时间戳特征 • 一致性校验日志 • 清洗后宽表 • 数据质量看板 • 异常样本清单 • 字段血缘关系图 • 数据字典更新 • 清洗规则配置文件

4.7 数据质量报告与监控

每次探查与清洗后,应生成标准化的数据质量报告,作为模型迭代的基线参考。

报告维度指标示例阈值告警
完整性字段缺失率核心字段缺失率 > 5% 告警
准确性异常值占比异常值占比 > 3% 告警
唯一性重复记录数重复率 > 1% 告警
一致性跨表引用失败数孤儿记录 > 0 告警
时效性数据延迟时间延迟 > 24h 告警
最佳实践:将数据质量检查封装为自动化 pipeline,每次模型训练前自动运行,输出质量报告并阻断不合格数据进入训练流程。建议使用 Great Expectations 或 Deequ 等开源工具实现持续监控。