4. 版本管理入门
在精算建模工作中,模型文件往往不是“一次写完就结束”的交付物,而是随着经验数据更新、监管口径调整、再保安排变化而持续演进的资产。参数假设、死亡率表、退保率曲线、贴现率、情景设定、准备金评估逻辑,都会在不同版本之间发生细微但关键的变化。版本管理正是用来回答三个问题:改了什么、谁改的、为什么改,并保证任何历史状态都能被准确复现。
一、核心原理:版本管理不是“多存几个文件”
版本管理的本质是对文件集合随时间变化进行可追溯、可比较、可回退的受控记录。它把每一次有意义的修改固化为一个“提交”,并形成有向无环的版本历史。与“模型_v1.xlsx、模型_v2_最终版.xlsx、模型_v2_最终版_真的最终.xlsx”这类命名法相比,版本管理具备四个关键能力:
- 快照与差异:每个版本保存完整状态,同时能精确显示行级、参数级差异。
- 分支与合并:不同假设方案可并行开发,再合并回主线。
- 追溯与审计:提交信息、作者、时间戳构成审计线索。
- 回退与复现:可检出任意历史版本,重跑结果并比对。
二、常用工具:Git 与 SVN 的定位差异
精算团队常见的版本管理工具分为集中式与分布式两类。SVN 是集中式代表,所有历史存放在中央服务器;Git 是分布式代表,每个克隆都是完整仓库。二者并非简单的新旧替代关系,选择取决于团队协作模式、文件类型和合规要求。
| 对比维度 | Git | SVN |
|---|---|---|
| 架构模式 | 分布式,本地含完整历史 | 集中式,依赖中央服务器 |
| 分支成本 | 极低,鼓励频繁分支 | 较高,通常按目录复制 |
| 离线能力 | 可离线提交、查看历史 | 离线操作受限 |
| 大二进制文件 | 需 Git LFS,否则仓库膨胀 | 相对友好,可增量存储 |
| 权限粒度 | 通常仓库级,细粒度需平台支持 | 可到目录/文件级 |
| 精算适用场景 | 代码、脚本、配置、文本化假设 | 历史遗留 Excel、集中管控环境 |
典型 Git 操作流程如下,精算人员至少应掌握检出、提交、分支、合并与查看差异:
# 克隆模型仓库
git clone https://git.example.com/actuary/reserving-model.git
# 创建假设调整分支
git checkout -b assumption/mortality-2024-update
# 修改参数文件后查看差异
git diff params/mortality.csv
# 提交并推送
git add params/mortality.csv
git commit -m "更新2024版死亡率表,来源:监管口径调整"
git push origin assumption/mortality-2024-update
三、方法流程:从“改参数”到“可复现”
版本管理在精算工作中的落地,不是装一个工具就结束,而是形成一套可执行流程。建议按以下步骤建立规范:
- 确定纳管范围:模型代码、参数文件、假设文档、运行配置必须纳管;临时输出、日志、缓存不纳管。
- 约定分支策略:主线保持可运行,假设调整走特性分支,监管报送版本打标签。
- 规范提交信息:说明“改了什么假设、依据什么、影响哪些评估口径”。
- 建立评审机制:关键假设变更需第二人复核,合并前查看差异。
- 版本与结果绑定:每次正式评估记录提交哈希、参数版本和运行环境。
其中“版本与结果绑定”是精算审计的关键。仅保存结果文件而不记录对应代码与参数版本,等于无法复现。推荐在评估报告中写入类似标识:
评估批次:2024Q2-准备金
代码提交:a3f9c21
参数版本:mortality-2024.1 / lapse-2024.0
运行环境:Python 3.11 + 内部精算库 2.4.0
执行时间:2024-07-15 09:30
四、案例与场景:一次退保率假设调整
某寿险公司更新退保率假设,涉及三条产品线。若采用传统文件命名法,可能出现“退保率_新_最终_审核后.xlsx”多个副本,评估人员无法确认哪份被用于最终报告。引入 Git 后,流程变为:
- 从主线创建分支
assumption/lapse-2024Q3; - 修改
lapse_curve.csv,提交信息注明数据来源与精算师意见; - 发起合并请求,复核人查看差异并确认影响范围;
- 合并后打标签
v2024.3-lapse,用于季度评估; - 若监管要求回退,直接检出上一标签重跑。
整个过程可审计、可比较、可回退,且不依赖个人电脑上的文件副本。
五、误区与复盘
复盘建议:每季度检查一次仓库健康度,包括提交信息质量、分支是否及时清理、大文件是否误入、标签是否与正式报告对应。版本管理不是 IT 部门的专属工作,而是精算模型治理的基础设施。掌握它,意味着每一次假设调整都有据可查,每一个历史结论都能被重新验证。