2. 基础知识
在模型风险管理体系中,数据、样本、数据质量与独立验证是四个相互支撑的基础概念。模型开发团队与验证团队如果对这些术语理解不一致,后续的验证结论就很容易出现偏差。本章从定义出发,梳理常见术语,并说明验证与模型开发之间的关系。
一、核心定义
数据(Data)是模型开发与验证的原材料,通常指以结构化或非结构化形式记录的、可被采集、存储和计算的事实或观测值。在模型语境下,数据不仅包括建模用的特征变量和目标变量,还包括时间戳、主体标识、数据来源、采集口径等元信息。
样本(Sample)是从总体中按照一定规则抽取的、用于训练、测试或验证模型的数据子集。样本强调“代表性”和“可追溯性”:一个样本是否能够代表总体,直接决定了模型结论能否推广到真实业务场景。
数据质量(Data Quality)是数据满足特定使用目的的程度。它不是一个绝对概念,而是相对于模型用途而言的。同一份数据用于营销响应预测可能合格,用于信用风险计量则可能因缺失关键字段而不合格。
独立验证(Independent Validation)是由不参与模型开发的人员或团队,对模型的设计、数据、假设、参数、输出及局限性进行客观审查的过程。独立性的核心在于“无利益冲突”和“可独立复现”。
四个概念的关系可以概括为:数据是原料,样本是原料中按规则选取的部分,数据质量决定原料是否可用,独立验证则是对“原料选取与加工过程”的第三方复核。
二、常见术语与口径
在实际项目中,以下术语经常被混用,需要统一口径:
- 总体与样本:总体是研究对象的全集,样本是总体的子集。验证时要关注抽样偏差。
- 训练集、验证集、测试集:训练集用于拟合参数,验证集用于调参和模型选择,测试集用于最终评估。三者必须相互独立。
- 时间外样本(Out-of-Time, OOT):按时间切分、用未来数据检验模型稳定性的样本。
- 缺失值、异常值、重复值:数据质量的三个高频问题,分别对应完整性、准确性和唯一性。
- 数据血缘(Data Lineage):记录数据从源头到模型输入的流转路径,是验证可追溯性的基础。
- 基准模型(Benchmark Model):用于对比的简单模型或现行模型,帮助判断新模型是否具有增量价值。
三、数据质量的核心维度与检查清单
数据质量通常从完整性、准确性、一致性、时效性、唯一性和合规性六个维度评估。下表给出各维度的定义、典型问题和验证动作:
| 维度 | 定义 | 典型问题 | 验证动作 |
|---|---|---|---|
| 完整性 | 关键字段是否缺失 | 收入字段缺失率30% | 统计缺失率,检查缺失是否随机 |
| 准确性 | 数据是否真实反映事实 | 年龄为负数或超过150 | 设定合理值域,抽样核对源系统 |
| 一致性 | 跨表、跨系统口径是否统一 | 同一客户在两表中性别不同 | 主键关联比对,检查口径文档 |
| 时效性 | 数据是否在有效期内 | 用三年前数据预测当前违约 | 检查时间戳,做时间外样本测试 |
| 唯一性 | 是否存在重复记录 | 同一笔订单被重复采集 | 按主键去重,统计重复率 |
| 合规性 | 采集和使用是否合法授权 | 使用未授权个人信息 | 核查授权协议与脱敏记录 |
验证团队不必重新清洗全部数据,但必须独立复现关键质量指标,例如缺失率、异常率、样本量变化,并与开发团队的报告进行交叉核对。
四、验证与模型开发的关系
验证不是开发的“对立面”,而是开发过程的“第二双眼睛”。两者关系可以从三个层面理解:
- 时间上的并行关系:验证应尽早介入,在数据准备和样本设计阶段就提出意见,而不是等模型开发完成后再补做。
- 职责上的分离关系:开发负责构建模型,验证负责质疑和复核。验证人员不应参与模型参数选择,否则独立性受损。
- 证据上的互补关系:开发提供开发文档、代码和结果,验证提供独立复现结果、敏感性测试和局限性说明,两者共同构成模型风险管理的证据链。
一个常见的误区是:把“验证”等同于“再跑一遍代码”。真正的独立验证至少包括:独立获取数据、独立编写或审查关键计算逻辑、独立设计测试场景、独立形成结论。以下伪代码展示了验证脚本与开发脚本应保持逻辑隔离的基本思路:
# 开发脚本:dev_model.py
data = load_data("train.csv")
model = fit_model(data, features=["x1","x2","x3"])
score = model.predict(data)
# 验证脚本:val_model.py(独立目录、独立环境)
data_val = load_data("val.csv") # 独立取数
assert data_val.shape[0] > 0 # 样本量检查
check_missing(data_val, threshold=0.05) # 缺失率复核
score_val = reproduce_score(data_val) # 独立复现打分
compare_distribution(score, score_val) # 分布对比
如果验证人员直接复用开发团队的特征工程代码,而没有检查其口径和时点,就可能把开发阶段的错误原样带入验证结论。独立性首先体现在“关键逻辑可独立复现”,而不是“换个人点一次运行”。
五、案例与复盘:一个样本偏差的教训
某零售信贷模型在开发时使用全量申请样本,AUC达到0.82。验证团队在独立取数时发现,开发样本中“已审批通过”客户占比高达95%,而被拒绝客户几乎未被纳入。这意味着模型实际上是在“好人”中区分“更好的人”,无法回答“该不该拒绝”的问题。
验证团队随后要求开发团队补充拒绝推断样本,并重新评估模型在完整申请样本上的排序能力。复盘结论有三点:
- 样本选择偏差是数据质量问题,不是模型算法问题;
- 独立验证的价值首先体现在“独立取数”和“独立定义样本”;
- 验证报告应明确写出样本口径、时间窗口和排除规则,便于后续审计。