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 异常值处理流程
检测到异常值后,不建议直接删除,而是按以下优先级处理:
- 核实数据源: 与上游系统确认是否为采集或传输错误,若是则修正原始数据。
- 截尾处理: 对数值型字段,将异常值替换为 99% 或 1% 分位值,保留样本量。
- 单独分组: 将异常值标记为独立类别(如“异常_高额度”),在切片评估中单独观察其表现。
- 删除: 仅在异常值比例极低(< 1%)且确认无业务意义时删除。
案例提示: 某消费金融公司在评估“多头借贷次数”切片时,发现部分用户该字段值为 999。经核实为外部数据源接口超时后的默认填充值。处理方式:将 999 替换为该用户所在城市分组的 95% 分位值,并在特征中增加“多头借贷_是否默认值”标记。
4.5 数据准备全流程架构
下图展示了从原始数据到可用于切片评估的干净数据集的完整流程,包含采集、清洗、缺失处理、异常检测四个核心阶段,以及每个阶段的输出产物。
4.6 数据质量检查清单
在完成上述步骤后,建议使用以下清单进行最终验证,确保切片数据满足评估要求:
- 完整性: 所有切片字段的缺失率是否在可接受范围内?是否已记录缺失模式?
- 一致性: 不同数据源的同名字段(如“用户ID”)是否格式一致?时间窗口是否对齐?
- 准确性: 抽样验证 100 条记录的字段值是否与原始系统一致?
- 时效性: 数据采集时间是否覆盖了评估所需的表现期(如 T+30 逾期表现)?
- 可追溯性: 每条记录是否能追溯到原始数据源和采集时间?
最佳实践: 建议为每个切片版本建立数据血缘文档,记录从原始数据到最终评估数据集的每一步转换逻辑、参数和代码版本。这不仅能提升团队协作效率,还能在评估结果出现异常时快速定位问题。