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 实现注册、查询、阶段转换。
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 表示分布稳定 |
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 | 保留所有历史版本指标用于对比 |
| 阶段转换审计 | 注册表事件日志 | 记录转换时间、操作人、审批信息 |
通过上述版本管理与元数据存储机制,信用评分模型的每一次迭代都具备完整的可追溯性,为模型监控、回滚和监管审计提供坚实的数据基础。