2. 基础知识

在模型风险管理体系中,数据、样本、数据质量与独立验证是四个相互支撑的基础概念。模型开发团队与验证团队如果对这些术语理解不一致,后续的验证结论就很容易出现偏差。本章从定义出发,梳理常见术语,并说明验证与模型开发之间的关系。

一、核心定义

数据(Data)是模型开发与验证的原材料,通常指以结构化或非结构化形式记录的、可被采集、存储和计算的事实或观测值。在模型语境下,数据不仅包括建模用的特征变量和目标变量,还包括时间戳、主体标识、数据来源、采集口径等元信息。

样本(Sample)是从总体中按照一定规则抽取的、用于训练、测试或验证模型的数据子集。样本强调“代表性”和“可追溯性”:一个样本是否能够代表总体,直接决定了模型结论能否推广到真实业务场景。

数据质量(Data Quality)是数据满足特定使用目的的程度。它不是一个绝对概念,而是相对于模型用途而言的。同一份数据用于营销响应预测可能合格,用于信用风险计量则可能因缺失关键字段而不合格。

独立验证(Independent Validation)是由不参与模型开发的人员或团队,对模型的设计、数据、假设、参数、输出及局限性进行客观审查的过程。独立性的核心在于“无利益冲突”和“可独立复现”。

四个概念的关系可以概括为:数据是原料,样本是原料中按规则选取的部分,数据质量决定原料是否可用,独立验证则是对“原料选取与加工过程”的第三方复核。

二、常见术语与口径

在实际项目中,以下术语经常被混用,需要统一口径:

  • 总体与样本:总体是研究对象的全集,样本是总体的子集。验证时要关注抽样偏差。
  • 训练集、验证集、测试集:训练集用于拟合参数,验证集用于调参和模型选择,测试集用于最终评估。三者必须相互独立。
  • 时间外样本(Out-of-Time, OOT):按时间切分、用未来数据检验模型稳定性的样本。
  • 缺失值、异常值、重复值:数据质量的三个高频问题,分别对应完整性、准确性和唯一性。
  • 数据血缘(Data Lineage):记录数据从源头到模型输入的流转路径,是验证可追溯性的基础。
  • 基准模型(Benchmark Model):用于对比的简单模型或现行模型,帮助判断新模型是否具有增量价值。

三、数据质量的核心维度与检查清单

数据质量通常从完整性、准确性、一致性、时效性、唯一性和合规性六个维度评估。下表给出各维度的定义、典型问题和验证动作:

维度 定义 典型问题 验证动作
完整性 关键字段是否缺失 收入字段缺失率30% 统计缺失率,检查缺失是否随机
准确性 数据是否真实反映事实 年龄为负数或超过150 设定合理值域,抽样核对源系统
一致性 跨表、跨系统口径是否统一 同一客户在两表中性别不同 主键关联比对,检查口径文档
时效性 数据是否在有效期内 用三年前数据预测当前违约 检查时间戳,做时间外样本测试
唯一性 是否存在重复记录 同一笔订单被重复采集 按主键去重,统计重复率
合规性 采集和使用是否合法授权 使用未授权个人信息 核查授权协议与脱敏记录

验证团队不必重新清洗全部数据,但必须独立复现关键质量指标,例如缺失率、异常率、样本量变化,并与开发团队的报告进行交叉核对。

四、验证与模型开发的关系

验证不是开发的“对立面”,而是开发过程的“第二双眼睛”。两者关系可以从三个层面理解:

  1. 时间上的并行关系:验证应尽早介入,在数据准备和样本设计阶段就提出意见,而不是等模型开发完成后再补做。
  2. 职责上的分离关系:开发负责构建模型,验证负责质疑和复核。验证人员不应参与模型参数选择,否则独立性受损。
  3. 证据上的互补关系:开发提供开发文档、代码和结果,验证提供独立复现结果、敏感性测试和局限性说明,两者共同构成模型风险管理的证据链。

一个常见的误区是:把“验证”等同于“再跑一遍代码”。真正的独立验证至少包括:独立获取数据、独立编写或审查关键计算逻辑、独立设计测试场景、独立形成结论。以下伪代码展示了验证脚本与开发脚本应保持逻辑隔离的基本思路:

# 开发脚本: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%,而被拒绝客户几乎未被纳入。这意味着模型实际上是在“好人”中区分“更好的人”,无法回答“该不该拒绝”的问题。

验证团队随后要求开发团队补充拒绝推断样本,并重新评估模型在完整申请样本上的排序能力。复盘结论有三点:

  • 样本选择偏差是数据质量问题,不是模型算法问题;
  • 独立验证的价值首先体现在“独立取数”和“独立定义样本”;
  • 验证报告应明确写出样本口径、时间窗口和排除规则,便于后续审计。