4. 模型版本管理与元数据:模型注册表的概念

在信用评分模型的持续交付与生产运维中,模型版本管理与元数据存储是保障模型可追溯、可复现、可审计的核心基础设施。本章围绕 MLflow Model Registry 的注册表概念、语义化版本控制策略以及模型元数据的存储规范展开,帮助团队建立标准化的模型生命周期管理流程。

4.1 模型注册表的核心概念

模型注册表(Model Registry)是一个集中化的模型存储与版本管理服务,它记录了模型从训练、验证、部署到退役的完整生命周期状态。与简单的文件存储不同,注册表提供了版本控制、阶段转换、元数据关联和权限管理能力。

核心价值:模型注册表解决了“哪个模型在生产中?”、“当前模型基于什么数据训练?”、“模型性能是否达标?”等关键运维问题。

4.1.1 MLflow Model Registry 架构

MLflow 是目前业界广泛使用的开源 MLOps 平台,其 Model Registry 组件提供了以下核心功能:

  • 模型注册与版本化:每次训练产生的模型可注册为同一模型名下的新版本。
  • 阶段管理:支持 Staging(预发布)、Production(生产)、Archived(归档)等阶段。
  • 元数据关联:自动关联运行 ID、实验名称、参数、指标、模型签名(输入/输出 schema)。
  • 模型描述与标签:支持自定义描述、标签(tags)和注释。
  • API 与 SDK 集成:通过 REST API 或 Python SDK 实现注册、查询、阶段转换。
MLflow Model Registry 生命周期流程 MLflow Model Registry 生命周期流程 训练实验 注册模型 Staging Production Archived 回退 退役 阶段转换规则 Staging → Production 需通过 A/B 测试验证

4.2 语义化版本控制策略

模型版本号采用 语义化版本(Semantic Versioning) 规范,格式为 MAJOR.MINOR.PATCH,每个字段的含义与模型变更类型严格对应。

版本字段 变更类型 信用评分模型示例 触发条件
MAJOR 不兼容的 API 或模型结构变更 从逻辑回归切换为 XGBoost 输入特征数量/类型变化、评分区间调整
MINOR 向后兼容的功能增强 新增特征衍生逻辑、优化缺失值处理 模型性能提升但输入/输出接口不变
PATCH 向后兼容的缺陷修复 修复数据预处理 bug、更新阈值校准 模型逻辑不变,仅修复计算错误
最佳实践:在信用评分场景中,MAJOR 版本变更通常需要重新进行模型验证、监管报备和业务审批;MINOR 和 PATCH 版本可通过自动化 CI/CD 流水线快速部署。

4.2.1 版本号管理示例

# 初始版本
credit_score_model: v1.0.0

# 修复评分卡计算精度问题(PATCH)
credit_score_model: v1.0.1

# 新增收入稳定性特征(MINOR)
credit_score_model: v1.1.0

# 模型算法从 LR 升级为 GBDT(MAJOR)
credit_score_model: v2.0.0

4.3 模型元数据的存储

模型元数据是描述模型本身及其运行上下文的结构化信息。在信用评分模型中,元数据至少包含以下三类核心信息:

4.3.1 特征列表(Feature List)

记录模型使用的所有输入特征,包括特征名称、数据类型、来源、衍生逻辑和缺失值处理策略。

特征名称 数据类型 数据来源 衍生逻辑 缺失值处理
age int 客户主表 直接取值 中位数填充
income_monthly float 收入表 近 6 月均值 行业均值填充
credit_utilization float 征信报告 总负债 / 总授信 0 值填充
loan_purpose category 申请表单 one-hot 编码 “其他”类别

4.3.2 阈值(Threshold)

信用评分模型通常输出一个连续分数,业务决策依赖于预设的阈值。元数据中需记录每个决策点的阈值及其业务含义。

{
  "thresholds": {
    "approve": 0.75,
    "manual_review": 0.50,
    "reject": 0.25
  },
  "score_range": [0, 100],
  "decision_mapping": {
    "score >= 0.75": "自动批准",
    "0.50 <= score < 0.75": "人工审核",
    "score < 0.50": "自动拒绝"
  }
}

4.3.3 性能指标(Performance Metrics)

记录模型在验证集和测试集上的关键性能指标,用于版本对比和模型监控基线。

指标名称 验证集 测试集 说明
KS 统计量 0.42 0.40 区分度指标,>0.3 为合格
AUC 0.85 0.83 模型整体排序能力
精确率(Precision) 0.78 0.76 坏客户识别准确率
召回率(Recall) 0.72 0.70 坏客户识别覆盖率
PSI(群体稳定性) 0.02 0.03 <0.1 表示分布稳定
模型元数据存储结构 模型元数据存储结构 模型元数据 特征列表 名称 / 类型 / 来源 / 衍生逻辑 阈值 批准 / 人工审核 / 拒绝 性能指标 KS / AUC / PSI / 精确率 元数据存储建议:使用 MLflow 的 model.get_metadata() 或自定义 JSON/YAML 文件与模型 artifact 一同打包 推荐存储位置:模型注册表 + 对象存储(如 S3/MinIO)双备份

4.4 元数据存储与版本关联实践

在 MLflow 中,元数据通过以下方式与模型版本关联:

import mlflow
from mlflow.tracking import MlflowClient

client = MlflowClient()

# 注册模型版本时附加元数据
client.create_model_version(
    name="credit_score_model",
    source="runs://model",
    run_id="",
    description="v1.1.0 - 新增收入稳定性特征",
    tags={
        "version": "1.1.0",
        "feature_count": "12",
        "threshold_approve": "0.75",
        "auc_test": "0.83",
        "ks_test": "0.40"
    }
)

# 读取模型版本元数据
version_info = client.get_model_version(
    name="credit_score_model",
    version="1"
)
print(version_info.tags)
注意:元数据中的阈值和性能指标应与模型 artifact 保持同步更新。建议在模型训练流水线结束时,自动将验证结果写入注册表标签,避免人工录入导致的版本错乱。

4.5 版本控制与元数据管理清单

管理项 推荐工具/方法 关键检查点
版本号规范 语义化版本 MAJOR.MINOR.PATCH 每次注册前确认变更类型
模型注册 MLflow Model Registry 自动关联运行 ID 和实验名称
特征列表存储 JSON Schema 或 Protobuf 与模型签名(signature)保持一致
阈值管理 注册表 tags 或独立配置文件 生产环境阈值变更需审批
性能指标记录 MLflow Metrics + Tags 保留所有历史版本指标用于对比
阶段转换审计 注册表事件日志 记录转换时间、操作人、审批信息

通过上述版本管理与元数据存储机制,信用评分模型的每一次迭代都具备完整的可追溯性,为模型监控、回滚和监管审计提供坚实的数据基础。