3. 精算现金流基础概念
在构建精算现金流模型之前,必须先建立一套统一的“语言体系”。精算模型本质上是在时间轴上安排“钱”和“人”两类事件:钱会因利息而增值或折现,人会因生存或死亡而触发给付。本节将利息理论与生存模型的核心术语放在同一张图景中解析,为后续 Python 建模打下概念地基。
一、核心原理:两条时间轴的交汇
精算现金流有两条并行的时间轴。第一条是利息轴:今天的 100 元与一年后的 100 元不等价,折现率把未来金额拉回现在,终值把现在金额推向未来。第二条是生存轴:被保险人能否活到某个时点是不确定的,生存概率决定这笔现金流“是否发生”。精算现值正是把两者相乘后再求和:
精算现值 = Σ [ 第t期现金流 × 折现因子(t) × 生存概率(t) ]
折现因子(t) = 1 / (1 + i)^t
理解这个乘积结构,是理解一切寿险、年金、准备金模型的关键。利息负责“时间价值”,生存概率负责“发生概率”,二者缺一不可。
二、利息理论核心术语
利息理论提供折现的数学工具,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ₓ 混用;或在折现时用错期数(期初付与期末付差一期)。建模前务必确认给付时点与折现指数对齐。
五、复盘与建模建议
- 先明确现金流发生时点:期初、期末还是连续。
- 折现因子与生存概率分别封装为函数,避免公式内联导致难以复用。
- 生命表年龄索引与保单年度索引必须显式对齐,建议用字典或 DataFrame 管理。
- 对结果做“无死亡”与“无利息”两个极端测试,验证模型边界行为。