4. 数据准备与清洗
在EAD模型回测与额度使用行为验证中,数据准备与清洗决定了后续所有结论的可信度。EAD(违约风险暴露)回测不同于PD或LGD回测,它高度依赖账户级、日频或月频的额度使用、还款、违约状态与额度调整记录。如果数据口径不一致、时间窗口错位或样本选择偏差,即使模型公式正确,回测结果也会严重失真。本节围绕六个关键环节展开:数据来源、字段说明、缺失值处理、异常值识别、时间窗口划分与样本选择。
一、核心原理:数据准备的目标与原则
数据准备的核心目标不是“把数据变干净”这么简单,而是构建一个可回溯、可对齐、可复现的EAD验证数据集。可回溯意味着每一条记录都能追溯到原始系统;可对齐意味着额度使用、违约状态与观察时点严格匹配;可复现意味着清洗规则以配置或代码形式固化,不同人执行得到相同结果。
在EAD回测中,需要特别关注三类时间概念:观察时点(用于计算EAD的基准日)、违约时点(客户实际违约日期)、表现期(违约后到核销或清偿的区间)。三者错位是EAD回测中最常见的隐性错误。
关键原则:先定义样本粒度,再定义字段口径,最后做清洗。顺序颠倒会导致反复返工。样本粒度通常为“账户-月”或“客户-月”,必须在数据准备初期明确。
二、数据来源与字段说明
EAD回测的数据通常来自多个系统,需要做跨源整合。常见来源包括:
- 额度管理系统:授信额度、已用额度、可用额度、额度调整记录、临时额度到期日。
- 核心账务系统:账户余额、本金、利息、还款计划、逾期天数、违约标志。
- 客户信息系统:客户编号、账户编号、产品类型、开户日期、销户日期、风险等级。
- 外部数据:征信查询记录、担保信息、抵质押物估值(如适用)。
字段说明必须形成数据字典,至少包含字段名、业务含义、数据类型、取值范围、空值含义、来源系统与更新频率。以下是一个简化的字段清单示例:
| 字段名 | 业务含义 | 类型 | 空值含义 | 来源 |
|---|---|---|---|---|
| acct_id | 账户唯一标识 | 字符串 | 不允许为空 | 核心账务 |
| cust_id | 客户唯一标识 | 字符串 | 不允许为空 | 客户信息 |
| obs_date | 观察时点(月末) | 日期 | 不允许为空 | 派生 |
| credit_limit | 授信额度 | 数值 | 空表示未激活 | 额度管理 |
| used_amount | 已用额度 | 数值 | 空按0处理需标记 | 额度管理 |
| dpd | 逾期天数 | 整数 | 空表示无逾期 | 核心账务 |
| default_flag | 违约标志 | 0/1 | 不允许为空 | 核心账务 |
| limit_type | 额度类型 | 枚举 | 空表示循环额度 | 额度管理 |
三、缺失值处理与异常值识别
缺失值在EAD数据中具有业务含义,不能一律删除或填充。例如,used_amount为空可能表示账户未激活,也可能表示系统同步失败;dpd为空通常表示无逾期,而非缺失。处理策略应遵循“先归因、再处理”的流程:
- 归因:区分结构性缺失(业务上不存在)与随机缺失(系统问题)。
- 标记:对每类缺失生成缺失标志字段,保留信息。
- 处理:结构性缺失按业务规则赋值(如未激活账户的已用额度为0);随机缺失可删除或插补,但需评估对样本量的影响。
异常值识别需结合业务边界。常见异常包括:已用额度大于授信额度、逾期天数为负数、观察时点晚于销户日期、额度使用率超过100%且无临时额度记录。以下代码片段展示了一个基于业务规则的异常检测逻辑:
# 异常检测示例(伪代码)
anomalies = []
for row in ead_data:
if row.used_amount > row.credit_limit * 1.05:
anomalies.append((row.acct_id, "used_gt_limit"))
if row.dpd < 0:
anomalies.append((row.acct_id, "negative_dpd"))
if row.obs_date > row.close_date and row.close_date is not None:
anomalies.append((row.acct_id, "obs_after_close"))
if row.used_amount < 0:
anomalies.append((row.acct_id, "negative_used"))
注意:异常值不等于错误值。例如,已用额度略高于授信额度可能由超限费或利息计入导致,需与业务确认后再决定是否剔除。直接删除会引入样本选择偏差。
四、时间窗口划分与样本选择
时间窗口划分是EAD回测的骨架。通常需要定义三个窗口:观察窗口(用于提取额度使用行为)、违约窗口(识别违约客户)、表现窗口(跟踪违约后的暴露变化)。三者关系如下图所示:
样本选择需明确纳入与排除标准。常见纳入标准:观察时点账户状态为正常或逾期但未核销;至少有一个完整观察月;额度类型为循环额度。常见排除标准:观察时点已销户;违约后无任何还款记录;数据缺失关键字段且无法归因。
实战建议:样本选择应保留排除日志,记录每个账户被排除的原因和数量。这不仅是审计要求,也能帮助发现数据源的系统性问题。
五、案例场景:某信用卡EAD回测的数据准备
某银行对信用卡循环额度产品进行EAD回测。原始数据包含120万账户、36个月记录。初步清洗发现:约8%的记录used_amount为空,其中70%为未激活账户,30%为系统同步失败。处理策略:未激活账户赋0并标记,同步失败记录剔除并记录日志。异常值方面,发现0.3%的记录已用额度超过授信额度5%以上,经业务确认其中大部分为临时额度未及时录入,最终将临时额度合并后重新计算。时间窗口划分为:观察窗口为2022年1月至2022年12月,违约窗口为2023年1月至2023年6月,表现窗口为违约后12个月。最终有效样本为98万账户,排除原因分布为:销户42%、关键字段缺失31%、无完整观察月27%。
六、常见误区与复盘
- 误区一:用违约后的额度使用数据预测违约前EAD。这会造成前视偏差,回测结果虚高。必须严格按时间窗口切分。
- 误区二:忽略额度调整记录。临时额度、额度调升调降会显著影响EAD,若未合并,已用额度与授信额度口径不一致。
- 误区三:缺失值全部删除。会损失大量未激活或低活跃账户,导致样本偏向高使用率客户,EAD被高估。
- 误区四:异常值直接截断。截断会改变分布尾部,而EAD回测恰恰关注尾部风险。应先归因再处理。
复盘时建议输出数据准备报告,包含:各数据源记录数、字段缺失率、异常值分布、样本纳入排除漏斗、时间窗口边界校验结果。该报告应作为回测文档的必备附件,确保结果可解释、可审计。