3. 精算现金流基础概念

在构建精算现金流模型之前,必须先建立一套统一的“语言体系”。精算模型本质上是在时间轴上安排“钱”和“人”两类事件:钱会因利息而增值或折现,人会因生存或死亡而触发给付。本节将利息理论与生存模型的核心术语放在同一张图景中解析,为后续 Python 建模打下概念地基。

一、核心原理:两条时间轴的交汇

精算现金流有两条并行的时间轴。第一条是利息轴:今天的 100 元与一年后的 100 元不等价,折现率把未来金额拉回现在,终值把现在金额推向未来。第二条是生存轴:被保险人能否活到某个时点是不确定的,生存概率决定这笔现金流“是否发生”。精算现值正是把两者相乘后再求和:

精算现值 = Σ [ 第t期现金流 × 折现因子(t) × 生存概率(t) ]
折现因子(t) = 1 / (1 + i)^t

理解这个乘积结构,是理解一切寿险、年金、准备金模型的关键。利息负责“时间价值”,生存概率负责“发生概率”,二者缺一不可。

精算现值 = 现金流 × 折现因子 × 生存概率 利息轴(确定性) t=0 t=1 t=2 t=3 生存轴(不确定性) p₀=1 p₁ p₂ p₃ 折现因子 vᵗ 生存概率 ₜpₓ 现金流 CFₜ

二、利息理论核心术语

利息理论提供折现的数学工具,Python 建模时通常封装为独立函数。以下术语必须精确区分:

  • 现值(Present Value, PV):未来一笔金额按折现率折算到当前时点的价值。
  • 终值(Future Value, FV):当前金额按复利累积到未来某时点的价值。
  • 折现率(i):将未来金额折算为现值的利率,与累积方向相反。
  • 年金(Annuity):一系列等额或变额的定期给付,分为期初付(annuity-due)与期末付(annuity-immediate)。
  • 名义利率与实利率:名义利率需按计息频率换算,实利率直接用于年度折现。
在 Python 中建议统一使用“折现因子”而非直接写除法,便于后续替换为随机利率或期限结构。

三、生存模型核心术语

生存模型描述“人”的不确定性,与利息轴正交。常用术语包括:

术语符号含义Python 建模要点
生存概率ₜpₓx 岁的人活过 t 年的概率由生命表逐期累乘得到
死亡概率ₜqₓx 岁的人在 t 年内死亡的概率ₜqₓ = 1 − ₜpₓ
死亡率qₓ当年死亡概率生命表核心列,需注意年龄对齐
生存人数lₓ假设初始 10 万人中活到 x 岁的人数ₜpₓ = lₓ₊ₜ / lₓ
死亡力μₓ瞬时死亡强度连续模型中使用,离散模型可近似

四、案例场景:三年期生存年金

假设 40 岁男性购买一份三年期生存年金,每年年末给付 1000 元,折现率 3%,生存概率分别为 p₁=0.99、p₂=0.98、p₃=0.97。用 Python 计算精算现值:

i = 0.03
cf = [1000, 1000, 1000]
p = [0.99, 0.98, 0.97]

apv = sum(
    c / (1 + i) ** (t + 1) * p[t]
    for t, c in enumerate(cf)
)
print(round(apv, 2))   # 输出约 2805.63

可以看到,若忽略生存概率,普通年金现值约为 2828.61;乘以生存概率后降至约 2805.63。差额正是“死亡导致给付取消”所节省的成本,也是精算定价的核心来源。

常见误区:把死亡率 qₓ 与死亡概率 ₜqₓ 混用;或在折现时用错期数(期初付与期末付差一期)。建模前务必确认给付时点与折现指数对齐。

五、复盘与建模建议

  1. 先明确现金流发生时点:期初、期末还是连续。
  2. 折现因子与生存概率分别封装为函数,避免公式内联导致难以复用。
  3. 生命表年龄索引与保单年度索引必须显式对齐,建议用字典或 DataFrame 管理。
  4. 对结果做“无死亡”与“无利息”两个极端测试,验证模型边界行为。