4. 切片数据准备:数据采集、数据清洗、缺失值处理、异常值检测

切片效果评估的可靠性,首先取决于底层数据的质量。如果数据采集不完整、清洗不彻底、缺失值处理不当或异常值未被识别,后续的评估指标(如 KS、PSI、AUC)都会产生偏差,甚至误导业务决策。本章将系统讲解风控场景下切片数据的全流程准备方法。

4.1 数据采集:明确来源与字段清单

风控人群切片的数据通常来自多个异构系统,采集阶段需要明确数据源、采集方式以及核心字段。下表列出了常见的切片数据来源及对应的采集要点:

数据源类型 典型系统 采集方式 关键字段示例
业务系统 信贷核心、支付平台 API 接口 / 离线数仓 用户ID、申请时间、授信额度、放款金额
风控决策引擎 规则引擎、模型平台 日志采集 / 数据库同步 决策结果、拒绝原因码、模型分数、规则命中列表
外部数据源 征信机构、黑名单库 接口调用记录 / 文件传输 征信查询次数、多头借贷数、逾期标记
行为埋点 APP、H5 页面 事件上报 / 实时流 页面停留时长、点击次数、设备指纹
采集避坑提示: 切片评估要求数据具有明确的时间窗口(如 T+1、T+7 表现期),采集时必须记录数据产生的时间戳,避免因时间对齐错误导致切片归属混乱。

4.2 数据清洗:标准化与去重

原始数据中常包含格式不一致、重复记录或逻辑冲突的问题。清洗阶段的核心任务包括:

  • 字段格式统一: 将日期字段转为标准 yyyy-MM-dd HH:mm:ss 格式;将金额字段统一为分或元,并去除千分位分隔符。
  • 重复记录处理: 基于用户ID + 时间戳 + 事件类型 组合键去重,保留最新或最完整的一条记录。
  • 逻辑校验: 检查字段间的业务逻辑一致性,例如“放款日期”不应早于“申请日期”,“逾期天数”不应为负数。
# 数据清洗示例(Python 伪代码)
import pandas as pd

df = pd.read_csv('raw_slice_data.csv')

# 日期标准化
df['apply_time'] = pd.to_datetime(df['apply_time'], format='%Y%m%d')

# 金额统一为分
df['loan_amount'] = df['loan_amount'].str.replace(',', '').astype(float) * 100

# 去重
df = df.drop_duplicates(subset=['user_id', 'apply_time', 'event_type'], keep='last')

# 逻辑校验
df = df[df['loan_date'] >= df['apply_date']]

4.3 缺失值处理:策略与影响评估

缺失值在风控数据中普遍存在,尤其是外部征信字段和用户行为字段。处理策略需要根据缺失率、字段重要性和业务含义综合选择。

缺失率范围 推荐策略 适用场景 注意事项
< 5% 直接删除(行删除) 样本量充足,缺失随机 删除后需检查切片分布是否偏移
5% - 30% 均值/中位数/众数填充 数值型字段,分布较稳定 填充后需标记“是否填充”辅助特征
30% - 60% 模型预测填充(如 KNN、回归) 字段与其他变量相关性较强 避免引入过拟合偏差
> 60% 单独编码为“未知”类别 类别型字段或业务含义特殊 评估时需关注“未知”类别的表现
重要提醒: 在切片评估中,缺失值处理策略必须在训练集和评估集上保持一致。如果评估集使用了不同的填充值,会导致切片间的分布差异被扭曲,PSI 指标失真。

4.4 异常值检测:识别与处理

异常值可能来自数据录入错误、系统故障或真实的极端风险行为。检测方法需要结合统计规则和业务经验。

4.4.1 常用检测方法对比

方法 原理 适用字段类型 优点 缺点
Z-Score 基于均值与标准差,|Z|>3 视为异常 近似正态分布的数值字段 计算简单,解释性强 对极端值敏感,分布偏态时效果差
IQR 四分位距 Q1 - 1.5*IQR 或 Q3 + 1.5*IQR 之外为异常 偏态分布或含离群点的字段 不受极端值影响,鲁棒性好 对样本量要求较高
孤立森林 基于随机切割,路径短的样本视为异常 高维数值字段 适合大规模数据,线性复杂度 结果可解释性较弱
业务规则 根据风控经验设定阈值(如年龄 > 100) 所有字段 直接反映业务逻辑 规则维护成本高,可能遗漏未知异常

4.4.2 异常值处理流程

检测到异常值后,不建议直接删除,而是按以下优先级处理:

  1. 核实数据源: 与上游系统确认是否为采集或传输错误,若是则修正原始数据。
  2. 截尾处理: 对数值型字段,将异常值替换为 99% 或 1% 分位值,保留样本量。
  3. 单独分组: 将异常值标记为独立类别(如“异常_高额度”),在切片评估中单独观察其表现。
  4. 删除: 仅在异常值比例极低(< 1%)且确认无业务意义时删除。
案例提示: 某消费金融公司在评估“多头借贷次数”切片时,发现部分用户该字段值为 999。经核实为外部数据源接口超时后的默认填充值。处理方式:将 999 替换为该用户所在城市分组的 95% 分位值,并在特征中增加“多头借贷_是否默认值”标记。

4.5 数据准备全流程架构

下图展示了从原始数据到可用于切片评估的干净数据集的完整流程,包含采集、清洗、缺失处理、异常检测四个核心阶段,以及每个阶段的输出产物。

切片数据准备全流程架构 数据采集 API / 数仓 / 日志 数据清洗 去重 / 格式统一 / 逻辑校验 缺失值处理 填充 / 删除 / 单独编码 异常值检测 Z-Score / IQR / 孤立森林 干净切片数据集 可直接用于评估 反馈修正(异常值核实后回写清洗阶段) 质量监控 记录每阶段数据量变化

4.6 数据质量检查清单

在完成上述步骤后,建议使用以下清单进行最终验证,确保切片数据满足评估要求:

  • 完整性: 所有切片字段的缺失率是否在可接受范围内?是否已记录缺失模式?
  • 一致性: 不同数据源的同名字段(如“用户ID”)是否格式一致?时间窗口是否对齐?
  • 准确性: 抽样验证 100 条记录的字段值是否与原始系统一致?
  • 时效性: 数据采集时间是否覆盖了评估所需的表现期(如 T+30 逾期表现)?
  • 可追溯性: 每条记录是否能追溯到原始数据源和采集时间?
最佳实践: 建议为每个切片版本建立数据血缘文档,记录从原始数据到最终评估数据集的每一步转换逻辑、参数和代码版本。这不仅能提升团队协作效率,还能在评估结果出现异常时快速定位问题。