TT Lab
博客 开始
学习 学习路径 课程

保险领域进阶

用生命表计算纯保费

在 TT Lab 中继续学习

目标

使用生命表和预定利率亲自计算定期寿险的净保费,在此基础上加上附加保费得到营业保费,再通过具体数字确认预定利率变化会使保费变动多少。

为什么重要

保费并不是“公司规定的数值”,而是依据三项假设计算出来的:死亡或受伤的概率有多大(风险率)、运用所收资金能获得多少收益(预定利率),以及销售和维持合同需要多少成本(费用)。这三项分别称为预定风险率、预定利率和预定费用率;保险产品系统中的产品定义,归根结底就是这三项假设构成的表。

净保费只由前两项假设得出。从生命表中读取在何时、以多大概率需要支付多少保险金额,再按预定利率折现为现值,得到趸缴净保费。将其分摊为“被保险人生存期间每年缴纳的金额”,就得到年缴净保费。在此基础上加上费用,便是客户实际缴纳的营业保费。

理解这一结构后,就能听懂业务现场的说法。“预定利率降低 0.25 个百分点会使保费上涨”,是指折现率降低导致现值增大;“该产品的附加保费占比较高”,是指费用假设较大。在产品系统中,如果保费相差 1 韩元,答案就在于哪项假设在哪一步采用了怎样的舍入方式。

本实验的规则

步骤

  1. 将右侧示例中的生成器保存为 /root/ins/make_premium.py,并运行 python3 make_premium.py。将生成 lifetable.csv(51 行)、params.csv 和 quotes.csv(5 份报价)。
  2. 在 /root/ins/lx.csv 中以 age,qx,lx,dx 为表头,写入 30~80 岁共 51 行数据。
  3. 将 5 份报价的趸缴净保费写入 /root/ins/nsp.csv,表头为 quote_id,age,term,sum_assured,nsp_rate,nsp。nsp_rate 为 A,nsp 为保险金额 × A(未经舍入的值)后对不足 1 韩元的部分四舍五入的值。
  4. 将 5 份报价的期初付年金现值写入 /root/ins/annuity.csv,表头为 quote_id,annuity_due。
  5. 将年缴、月缴净保费写入 /root/ins/net_premium.csv,表头为 quote_id,net_annual,net_monthly。A、ä 不使用文件中的六位小数值,而是用未经舍入的值相除。
  6. 将营业保费写入 /root/ins/gross_premium.csv,表头为 quote_id,net_annual,loading,gross_annual,gross_monthly。loading 等于营业保费减去净保费。
  7. 分别按 1.5%、2.5% 和 3.5% 的预定利率计算 Q1 的年缴净保费,并在 /root/ins/sensitivity.txt 中写入四行:net_at_1.5=, net_at_2.5=, net_at_3.5=, delta_pct=。delta_pct 表示 1.5% 利率下的保费比 3.5% 利率下的保费高出百分之多少,保留到小数点后一位。
  8. 在 /root/ins/quote_report.md 中撰写报价说明书,包含 ## Premium Breakdown(保费构成)、## Calculation Basis(计算依据)、## Interest Rate Sensitivity(预定利率敏感性)、## Limitations(局限与注意事项)四个章节。章节标题用英文标题或意思相同的韩文、日文、中文标题均可,也可以把两者用括号并写。

参考

生成生命表和报价请求

将右侧示例中的生成器保存为 /root/ins/make_premium.py,并运行 python3 make_premium.py。将生成 lifetable.csv(51 行)、params.csv 和 quotes.csv(5 份报价)。

请将实验说明中的生成器保存为 /root/ins/make_premium.py,并使用 python3 运行。如果手工修改,后续步骤中的所有数字都会出现偏差。

根据死亡率计算生存人数

在 /root/ins/lx.csv 中以 age,qx,lx,dx 为表头,写入 30~80 岁共 51 行数据。

从 l30 = 100000 开始,按 l(x+1) = l(x) × (1 − q(x))、d(x) = l(x) × q(x) 计算。计算过程持续使用浮点数,只在写入文件时使用 %.2f。

计算趸缴净保费

将 5 份报价的趸缴净保费写入 /root/ins/nsp.csv,表头为 quote_id,age,term,sum_assured,nsp_rate,nsp。nsp_rate 为 A,nsp 为保险金额 × A(未经舍入的值)后对不足 1 韩元的部分四舍五入的值。

A = Σ(t=0..n−1) v^(t+1) × l(x+t) × q(x+t) ÷ l(x), v = 1/1.025。由于假设在年末死亡,指数为 t+1。nsp = int(S × A + 0.5)。

计算分期缴纳保费时的价值

将 5 份报价的期初付年金现值写入 /root/ins/annuity.csv,表头为 quote_id,annuity_due。

ä = Σ(t=0..n−1) v^t × l(x+t) ÷ l(x)。由于是期初付,首项为 v^0 = 1。

计算年缴、月缴净保费

将年缴、月缴净保费写入 /root/ins/net_premium.csv,表头为 quote_id,net_annual,net_monthly。A、ä 不使用文件中的六位小数值,而是用未经舍入的值相除。

net_annual = int(S × A ÷ ä + 0.5), net_monthly = int(net_annual ÷ 12 + 0.5)。计算除法时请使用浮点数值,而不是文件中保留六位小数的值。

加上费用得到营业保费

将营业保费写入 /root/ins/gross_premium.csv,表头为 quote_id,net_annual,loading,gross_annual,gross_monthly。loading 等于营业保费减去净保费。

G = (P + 0.01 × S ÷ ä) ÷ (1 − 0.05 − 0.03),不足 1 韩元四舍五入。P 直接使用第 5 步中已经四舍五入的年缴净保费,loading = G − P。

改变预定利率并观察保费变化

分别按 1.5%、2.5% 和 3.5% 的预定利率计算 Q1 的年缴净保费,并在 /root/ins/sensitivity.txt 中写入四行:net_at_1.5=, net_at_2.5=, net_at_3.5=, delta_pct=。delta_pct 表示 1.5% 利率下的保费比 3.5% 利率下的保费高出百分之多少,保留到小数点后一位。

将第 5 步的计算分别以 i = 0.015、0.025、0.035 运行三次。delta_pct = (net_1.5 − net_3.5) ÷ net_3.5 × 100,并使用 %.1f 格式。

撰写报价说明书

在 /root/ins/quote_report.md 中撰写报价说明书,包含 ## Premium Breakdown(保费构成)、## Calculation Basis(计算依据)、## Interest Rate Sensitivity(预定利率敏感性)、## Limitations(局限与注意事项)四个章节。章节标题用英文标题或意思相同的韩文、日文、中文标题均可,也可以把两者用括号并写。

四个章节标题须与英文标题或意思相同的韩文、日文、中文标题一致。在保费构成(Premium Breakdown)章节中写入 Q1 的营业保费(gross premium)、净保费(net premium)和附加保费(loading);在计算依据(Calculation Basis)章节中写入 2.5% 的预定利率(assumed interest rate);在敏感性(Sensitivity)章节中以数字写入 delta_pct。