你在月底估算一批尚未付完的账单,通常会参考它们过去的增长节奏。可只要其中一组数字突然回落再上升,原本顺滑的推算就可能失灵。保险准备金也有类似难题:保险公司要为已经发生、但尚未完全赔付的索赔留出资金,异常的发展曲线会直接影响这笔钱的估计。
Christian Lorentzen 展示了一个完整案例:先用 Polars 批量计算 233 家美国保险公司的 Chain-Ladder 准备金,再找出一条非单调曲线,用 Whittaker–Henderson smoothing 将它平滑。按作者报告,平滑后,这一家公司的估计准备金变化约 3%。以下计算结果与效果均来自作者单一信源。
先把 233 张“三角表”变成一条管线
Chain-Ladder——中文常称“链梯法”——会把不同事故年度的累计赔款排成三角表。较早年份已经观察了很多期,较晚年份只露出开头,因此形状像一个缺角的表格。方法根据历史上相邻发展期的增长比例,补出尚未观察到的部分。
案例使用 CAS 的 other liability 数据,包含 233 家美国保险公司、1998—2007 年共 10 个事故年度,以及第 1—10 个发展期的已付损失和已发生损失。作者把 2007 年当作报告年度,模拟一次年末结账。
这里 Polars 的作用不是改变精算公式,而是把重复的数据整理自动化。Polars 是处理表格数据的 DataFrame 工具。作者先按公司、事故年度和发展期汇总数据,再筛出报告时点已经可见的“左上三角”,最后按发展期计算按金额加权的发展因子:
直观地说,分子是某一阶段已经累积到的赔款,分母是同一批事故在上一阶段的累计赔款。两者之比告诉模型:赔款通常会从上一阶段增长多少。
作者用 group_by 完成分组汇总,用窗口表达式取得每个事故年度的上一期数值,再按发展期计算因子。这样可以一次处理所有公司,不必为每张三角表手写循环。作者还选取 Grinnell Mut Grp,将已发生损失的发展因子与 R 的 ChainLadder 包交叉核对,并称结果一致。
曲线不肯乖乖上升时
233 家公司中,有一家公司的已发生损失发展模式呈非单调形态,也就是曲线并非沿着一个方向稳定变化。这样的折返可能让标准参数曲线难以拟合。
作者改用 Whittaker–Henderson smoothing。它在两个目标之间做权衡:既不要离原始数据太远,又要惩罚相邻点过于剧烈的变化。可以把它理解成整理一条锯齿线:不是抹掉每个高低点,而是避免某一个尖角支配整条趋势。作者称,该方法处理了这条异常模式,并让这家公司的准备金估计变化约 3%;材料没有说明变化方向。
这项方法听起来新,其实数学脉络很长。据卡内基梅隆大学统计学系论文和 R 项目 WH 包文档,Georg Bohlmann 早在 1899 年就提出差分惩罚平滑;后来 E. T. Whittaker 独立提出相近思想,Robert Henderson 又在美国精算界推广。如今它以 scipy.signal.whittaker_henderson 进入通用计算工具。SciPy 官方文档注明,二阶版本也就是经济学中熟悉的 Hodrick–Prescott filter。
值得看的不是“几行代码”
这个案例的价值,在于把三件常被拆开的事接到了一起:Polars 负责可重复的数据管线,R 的成熟包提供一次交叉核对,平滑方法则处理传统发展因子失常后的统计问题。它没有证明 Polars 比 Excel 或专业工具更准确,却说明批量整理、筛选观测三角和计算发展因子,可以表达为一套统一操作。
局限与未知
- “约 3%”只涉及一家异常公司;材料未披露方向、基准准备金、参数选择和敏感性,不能推广到全部 233 家公司。
- 与 R
ChainLadder的核对只明确展示了 Grinnell Mut Grp,且没有逐项误差或独立复现实验。 - 供稿在代码和结果表处截断;数据注释写“December 2025”,链接路径却含“2026-03”,两者含义尚不清楚。