第2章 模型历史数据收集:提取建模样本、线上评分日志、特征数据、标签数据

模型复盘优化的第一步是拿齐“原料”——历史数据集。原料质量直接决定后续诊断与调优的有效性。本章覆盖从生产环境到分析环境的数据提取、校验与归档流程,确保建模样本、线上评分日志、特征宽表与标签数据可追溯、可复现。

核心原则:所有提取操作必须基于时间戳对齐的生产快照,禁止混入未来信息或跨版本特征。每批数据提取后应生成校验摘要,记录行数、时间范围、缺失率与分布概要。

2.1 适用场景

  • 需要复盘线上模型评分效果(如AUC、KS、PSI、Lift)与预期偏差时。
  • 准备训练新一代模型,需要复用历史特征与标签构建训练集。
  • 诊断评分模型失效原因(特征漂移、样本选择偏差、标签泄漏)。
  • 合规审计或模型监管要求提供可追溯的历史开发数据。

2.2 前置条件

  • 已确定复盘时窗(如过去6个月或最近一个完整季度)。
  • 已获取数据仓库/离线表访问权限(Hive、BigQuery、Redshift等)。
  • 已准备数据拉取脚本(Python、SQL或Spark)并经过同行审查。
  • 已建立数据脱敏规则:客户ID、手机号等PII字段需脱敏或散列。
  • 拥有模型评分日志存储路径(如ELK、HDFS、S3),日志包含request_time、score、model_version、decision等字段。

2.3 操作步骤

  1. 确认复盘时窗与模型版本:与业务方确认复盘起止日期、线上已生效的模型版本号(major.minor.patch)。记录于复盘登记表。
  2. 提取线上评分日志:从日志系统拉取时窗内所有评分记录,过滤model_version为目标版本。每条日志应包含:sample_id、score、timestamp、decision。
  3. 提取建模样本ID列表:从模型训练元数据表查询该版本的训练集、验证集、测试集样本ID(分区或列表)。用于去重与全量映射。
  4. 拉取特征数据(特征宽表):以sample_id为键,join评分时窗对应的特征快照表。特征表需记录特征名称、值、特征版本。输出为feat_{table_name}.parquet。
  5. 关联标签数据:从标签系统(如逾期表现表、转化表)拉取目标标签,时间窗口对齐复盘要求(如“申请后90天逾期>=30天”)。标签来源表包含sample_id、label、label_time。
  6. 合并建模样本、评分日志、特征与标签:以sample_id为主键进行左连接,生成完整分析宽表。检查主键唯一性,输出为full_analysis_{version}.parquet。
  7. 数据校验与摘要生成:运行校验脚本,输出行数、缺失率、特征与标签分布、评分区间直方图。生成校验报告并归档。
效率提示:如果一次拉取数据量超过内存(如亿级记录),应采用分月/分日增量拉取策略,使用Spark或Dask分布式处理,最后合并成单一parquet分区目录。

2.4 输入输出物

输入/输出 内容说明 存储格式 示例路径
输入 线上评分日志(原始) JSON / CSV /data/score_log/2025/01/
输入 特征快照表(历史版本) Parquet /warehouse/features/snapshot/
输入 标签表现表 Parquet / Hive /warehouse/label/overdue
输出 完整分析宽表 Parquet(分区) /analysis/model_review/v3.2.1/
输出 数据校验报告 HTML / Markdown /analysis/model_review/v3.2.1/validation.html

2.5 责任边界

角色 职责
数据工程师 提供数据拉取脚本、权限配置、数据脱敏。保证数据管道可重复执行。
模型分析师 定义复盘时窗、模型版本、特征列表、标签定义。执行校验并签字确认。
业务/风控 确认复盘业务逻辑(如逾期口径),审批数据使用申请。
质量控制 独立交叉验证输出行数、关键字段分布、标签泄漏风险。

2.6 记录材料

  • 数据拉取脚本及其版本(存放于Git仓库,tag为data_extract_v1.2)。
  • 数据校验报告(包含行数、缺失率、特征分布概要、评分分箱直方图)。
  • 数据溯源表:记录sample_id、原始来源表、快照时间、模型版本。
  • 复盘登记表(Excel / 共享文档):包含时窗、模型版本、数据路径、签字确认栏。

2.7 异常处理

常见异常与应对:
  • 评分日志缺失部分时间段:检查日志采集服务是否中断。若中断,只能使用可用区间并备注在报告中,模型复盘需说明样本覆盖度。
  • 特征表与评分日志sample_id不匹配:可能存在ETL延迟或ID映射错误。需联合数据工程师自查,必要时回源系统重新提取。
  • 标签时间窗口尚未关闭:对于“申请后90天逾期”标签,若当前时间距离最新申请不足90天,应剔除该部分样本或标记为“待定”。
  • 主键重复:合并时发现非唯一键(如同一sample_id出现多条评分记录)。应先聚合:保留时间最新的一条评分记录,或与业务确认取第一次申请记录。
  • 脱敏后数据无法重连ID:需在脱敏前保留临时映射表,提取完成后销毁映射关系,仅保留脱敏ID。

2.8 验收标准

  • 输出数据行数在预期误差范围内(±5%),评分日志覆盖率达到复盘时窗有效值的95%以上。
  • 特征宽表字段与模型开发时的特征schema完全一致(字段名、类型、缺失率差异<2%)。
  • 标签定义与业务口径一致,标签分布与历史统计无明显偏移(若有,需业务解释)。
  • 数据校验报告通过部门内交叉审核,所有异常情况均有书面说明。
  • 所有提取脚本已上传Git仓库,并附带README说明运行参数与依赖。
模型历史数据收集流程 1. 确认复盘时窗与版本 2. 提取线上评分日志 3. 提取建模样本ID列表 4. 拉取特征宽表 5. 关联标签数据 6. 合并为分析宽表 7. 校验与摘要生成 ⚠️ 自检点:每步都必须记录sample_id、time_range、版本号; 出现缺失或字段不一致时停止,按异常处理流程排查后再继续。 复盘时窗边界 时窗结束