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 等开源工具实现持续监控。