准备金、IFRS 17 与偿付能力流水线
目标
使用承保时的假设计算有效保单的责任准备金,再以当前折现率重新评估同一批保单,得出 IFRS17 下的最佳估计负债、风险调整和合同服务边际,最后结合公司数据计算简化的偿付能力充足率,将这些步骤组成一条完整流水线。
为什么重要
保险公司用今天收到的保费履行数十年后的承诺。因此,会计的核心问题是“未来需要支付的钱,今天应当预留多少”,其答案就是责任准备金。定期寿险的准备金等于未来给付的现值减去未来将收取的净保费现值。合同初期准备金较小,随着风险在后期增大,准备金也逐渐增加。
IFRS17 要求用另一种方式回答同一问题。负债不按承保时的假设,而按当前假设计量(最佳估计负债,BEL);再加上对不确定性的补偿(风险调整,RA);若仍有未实现利润,则将其确认为名为合同服务边际(CSM)的负债,并在合同期间分期确认为利润。这一机制防止提前确认利润;预计亏损的合同则立即确认损失。
偿付能力制度(K-ICS)从公司整体角度评估。它把保险风险、市场风险和信用风险分别转换成资本要求并进行汇总,再计算可用资本相当于该资本要求的百分之多少。这三个层次——成本基础准备金、当前价值负债和偿付能力——构成保险公司结算系统的骨架,同一份合同在三个层次中会呈现不同数字。
本实验的规则
- 精算函数与模块 1 相同。
A(x, n, i)是 n 年期定期寿险的趸缴净保费率,ä(x, n, i)是 n 年期初付年金现值。经过 t 年时的年龄为issue_age + elapsed,剩余期限为term − elapsed。 - 责任准备金(成本基础)为
V = S × A(x+t, n−t, 2.5%) − P × ä(x+t, n−t, 2.5%),不足 1 韩元四舍五入。P是inforce.csv中的年缴净保费。A、ä要用未经舍入的值相乘,而不是写入文件的六位小数值(评分精确到 1 韩元)。 - 递推验证:
(V_t + P) × (1 + i) = q(x+t) × S + (1 − q(x+t)) × V_(t+1)。V_(t+1)是将年龄加一岁、剩余期限减一年后用同一公式计算出的一年后准备金,到期时点的V_n为 0。 - IFRS17 按初始确认时点(承保时点)计算。最佳估计负债为
BEL = S × A(x, n, 3.0%) − P × ä(x, n, 3.0%),使用未扣除已过期间的承保年龄和完整期限。风险调整为RA = PV(benefits) × 0.5%(给付现值的 0.5%,即第 5 步的pv_claims)。履约现金流为FCF = BEL + RA。若FCF < 0,则CSM = −FCF,损失组成部分为 0;若FCF ≥ 0,则CSM = 0,损失组成部分为FCF。(本实验作了简化,省略后续期间的滚动计算。) - 偿付能力资本要求为
= √(I² + M² + C² + 2ρ(IM + IC + MC)) + O。I·M·C·O分别是capital.csv中的保险风险、市场风险、信用风险和操作风险,ρ为correlation。以亿韩元为单位四舍五入为整数。比率 = 可用资本 ÷ 资本要求 × 100,保留到小数点后一位。 A、annuity等精算比率保留到小数点后六位,金额写为整数。只有偿付能力充足率ratio_pct保留到小数点后一位。- 合计行(
total_reserve、total_csm、total_loss_component)是按保单四舍五入后写入的各列之和。
步骤
- 将右侧示例中的生成器保存为
/root/ins/make_reserve.py,并运行python3 make_reserve.py。将生成lifetable.csv、inforce.csv(5 份保单)、params.csv和capital.csv。还要按右侧示例保存后续步骤使用的精算函数文件/root/ins/act.py——其中包含term_insurance(qx, lx, x, n, i)和annuity_due(qx, lx, x, n, i)。 - 将
P001当前时点的准备金写入/root/ins/reserve_P001.txt,共三行:A=,annuity=,reserve=。 - 将全部 5 份保单写入
/root/ins/reserves.csv,表头为policy_no,age_now,remaining,A,annuity,reserve;并在/root/ins/reserves.txt中写入一行total_reserve=(reserve列之和)。 - 将递推验证结果写入
/root/ins/recursion_check.csv,表头为policy_no,v_next,lhs,rhs,diff。v_next是一年后的准备金V_(t+1)(到期时为 0),v_next、lhs和rhs四舍五入为整数,diff等于lhs − rhs。 - 以承保时点为基准应用当前折现率,生成
/root/ins/bel.csv,表头为policy_no,pv_claims,pv_premiums,bel。 - 在
/root/ins/csm.csv中以policy_no,bel,ra,fcf,csm,loss_component为表头写入结果,并在/root/ins/csm.txt中写入两行:total_csm=,total_loss_component=(各列之和)。 - 在
/root/ins/kics.txt中写入四行:required_capital=,available_capital=,ratio_pct=,meets_100=。ratio_pct保留到小数点后一位,meets_100为YES或NO。 - 在
/root/ins/valuation_report.md中撰写结算备忘录,包含## Policy Reserves(责任准备金)、## IFRS17 Summary(IFRS17 摘要)、## Solvency(偿付能力)、## Data and Regulatory Notes(数据与监管注意事项)四个章节。章节标题用英文标题或意思相同的韩文、日文、中文标题均可,也可以把两者用括号并写。
参考
- 精算函数在第 1 步按右侧示例保存到
/root/ins/act.py(与模块 1 相同的文件)。本实验会重新启动 Pod,所以模块 1 的文件不会保留。 - 只有用
A、ä单独计算V_(t+1)时,递推验证才有意义(如果用递推公式反推,diff永远为 0)。这样计算后diff接近 0(±2 韩元)时,表示准备金计算正确;如果偏差很大,请检查A的折现指数(t+1)或年龄推移是否有误。 - 常见错误 1:计算 BEL 时,按当前利率重新计算净保费
P,或使用扣除已过期间后的年龄。P是合同中固定的数值,而初始确认发生在承保时点。 - 常见错误 2:把操作风险放进资本要求的平方和中。本实验要求在平方和之外加上该项。
- 常见错误 3:因
P005(已过 0 年)的准备金不恰好为 0 而去修改它。由于P已四舍五入到整数韩元,留下几韩元是正常现象。
生成有效保单与假设
将右侧示例中的生成器保存为 /root/ins/make_reserve.py,并运行 python3 make_reserve.py。将生成 lifetable.csv、inforce.csv(5 份保单)、params.csv 和 capital.csv。还要按右侧示例保存后续步骤使用的精算函数文件 /root/ins/act.py——其中包含 term_insurance(qx, lx, x, n, i) 和 annuity_due(qx, lx, x, n, i)。
请将实验说明中的生成器保存为 /root/ins/make_reserve.py,并使用 python3 运行。还要把右侧示例中的精算函数保存为 /root/ins/act.py——评分器会调用 term_insurance(qx, lx, x, n, i) 和 annuity_due(qx, lx, x, n, i) 这两个函数来核对数值(本实验会重新启动 Pod,模块 1 的文件不会保留)。
计算一份保单的准备金
将 P001 当前时点的准备金写入 /root/ins/reserve_P001.txt,共三行:A=, annuity=, reserve=。
年龄 = 35 + 5 = 40,剩余期限 = 20 − 5 = 15。计算 A(40, 15, 2.5%) 和 ä(40, 15, 2.5%),再计算 reserve = int(S × A − P × ä + 0.5)。P 使用 inforce.csv 中的 198386。
计算全部有效保单的准备金
将全部 5 份保单写入 /root/ins/reserves.csv,表头为 policy_no,age_now,remaining,A,annuity,reserve;并在 /root/ins/reserves.txt 中写入一行 total_reserve=(reserve 列之和)。
对 inforce.csv 的五行数据重复第 2 步,并将 reserve 求和。age_now = issue_age + elapsed,remaining = term − elapsed。
使用递推公式验证准备金
将递推验证结果写入 /root/ins/recursion_check.csv,表头为 policy_no,v_next,lhs,rhs,diff。v_next 是一年后的准备金 V_(t+1)(到期时为 0),v_next、lhs 和 rhs 四舍五入为整数,diff 等于 lhs − rhs。
计算 V(t+1) 时,将年龄增加一岁、剩余期限减少一年,并使用相同公式(到期时为 0)。lhs = (V_t + P) × 1.025,rhs = q(x+t) × S + (1 − q(x+t)) × V_(t+1)。lhs 和 rhs 各自应在真实值的 ±2 韩元以内,diff 会接近 0。v_next 列中写入代入 rhs 的 V_(t+1),并对不足 1 韩元的部分四舍五入。
按当前折现率计算最佳估计负债
以承保时点为基准应用当前折现率,生成 /root/ins/bel.csv,表头为 policy_no,pv_claims,pv_premiums,bel。
由于按承保时点计算,应直接使用 issue_age 和 term(不扣除已过期间);利率使用 params.csv 中的 current_rate(0.030)。pv_claims = int(S × A + 0.5),pv_premiums = int(P × ä + 0.5),bel = 两者之差。P 保持不变。
划分风险调整与合同服务边际
在 /root/ins/csm.csv 中以 policy_no,bel,ra,fcf,csm,loss_component 为表头写入结果,并在 /root/ins/csm.txt 中写入两行:total_csm=, total_loss_component=(各列之和)。
ra = int(pv_claims × 0.005 + 0.5),fcf = bel + ra。若 fcf < 0,则 csm = −fcf、loss_component = 0;否则 csm = 0、loss_component = fcf。读取第 5 步的文件进行计算即可。
计算偿付能力充足率
在 /root/ins/kics.txt 中写入四行:required_capital=, available_capital=, ratio_pct=, meets_100=。ratio_pct 保留到小数点后一位,meets_100 为 YES 或 NO。
required = round(√(I² + M² + C² + 2 × 0.25 × (IM + IC + MC)) + O),ratio = available ÷ required × 100,并使用 %.1f 格式。结果应小于简单求和所得的 6600。
撰写结算备忘录
在 /root/ins/valuation_report.md 中撰写结算备忘录,包含 ## Policy Reserves(责任准备金)、## IFRS17 Summary(IFRS17 摘要)、## Solvency(偿付能力)、## Data and Regulatory Notes(数据与监管注意事项)四个章节。章节标题用英文标题或意思相同的韩文、日文、中文标题均可,也可以把两者用括号并写。
四个章节标题须与英文标题或意思相同的韩文、日文、中文标题一致。在责任准备金(policy reserves)章节中写入合计值;在 IFRS17 章节中把 CSM(合同服务边际,contractual service margin)合计值写在含有“CSM”的同一行,把当前折现率(discount rate)3.0% 写在含有“折现率(discount)”的同一行;在偿付能力(solvency)章节中写入比率;在注意事项章节中说明敏感信息(sensitive data)。