数出 IBNR 并对上分出再保
目标
学习如何统计数据中尚未出现的事故,理解准备金由哪些部分组成,并亲手实践当再保险分出数据不一致时,应按什么顺序逐步缩小问题范围。
为什么重要
结算时点的事故数据始终尚未充分发展。6 月 30 日统计 6 月事故时,数量会偏少,这并不是因为事故较少,而是尚未来得及报案。如果不了解这一差异,就报告“本月赔付率改善”,下个月数字恢复原位时,会议就会追问为什么突然恶化。
尚未到达案件的数量不是猜测,而是计算结果。从已经充分发展的事故月中提取报案延迟分布,就能知道尚未充分发展的月份当前已发展到百分之多少。本练习的结算基准日为 2026-06-30,报案延迟最长 5 个月,因此已经完整发展 5 个月的事故月截至 2026-01。
准备金由两部分组成。
미지급 발생손해 발생손해액 − 기지급액. 이미 접수된 건의 남은 몫
IBNR 추정액 미접수 추정 건수 × 건당 평균 발생손해액
计算第二部分的平均值时,必须排除超过 1 亿韩元的大额案件。通常会对大额案件单独逐案估算;若混入平均值,会使准备金膨胀到数亿韩元。
最后是再保险。本数据对所有损失适用 QS30 比例再保险,即分出发生损失的 30%。但分出记录存在于两个地方——会计总账(按月计提)和再保险管理系统(逐案登记)。总账金额由原保险数据计算,再保险系统则由人工登记,因此两者会出现差异。
步骤
- 将右侧示例中的生成器保存为
/root/ins/make_reserve.py,并执行python3 make_reserve.py。这会创建 1,296 笔损失、1,293 笔分出记录和 12 个月总账。 - 将事故月 × 报案延迟月数表写入
/root/ins/triangle.csv,表头为accident_ym,lag0,lag1,lag2,lag3,lag4,lag5,reported。必须包含全部 12 个事故月。 - 只汇总完整发展 5 个月的事故月(
2025-07~2026-01),在/root/ins/lagrate.csv中写六行,表头为lag,claims,cum_claims,cum_permille。cum_permille是累计数量除以总量后得到的整数千分比。 - 估算尚未充分发展的事故月最终案件数,并写入
/root/ins/ibnr.csv,表头为accident_ym,reported,max_lag,cum_claims,ultimate,ibnr。 - 在
/root/ins/reserve.txt中写八行:outstanding=、ibnr_claims=、avg_incurred_excl_large=、ibnr_amount=、reserve_total=、avg_incurred_incl_large=、reserve_if_incl_large=、overstated_by=。 - 按事故月核对总账与再保险系统,将差额不为 0 的月份写入
/root/ins/cession_diff.csv,表头为accident_ym,ledger,system,diff;再缩小到逐案层面,写入/root/ins/cession_claims.csv,表头为claim_no,accident_ym,incurred,expected,recorded,diff。 - 在
/root/ins/netloss.txt中写七行:gross_incurred=、ceded=、net_retained=、big_claim=、big_net=、net_excl_big=、big_share_pct=。分出金额使用总账值。 - 在
/root/ins/reserve_report.md中按## 확인한 것、## 준비금、## 출재 대사、## 대형 사고、## 권고五个章节编写报告。建议至少包含三项。
参考
- 两个年月之间的月数差,可分别转换为
연 × 12 + 월后相减。字符串比较无法得到该值。 - SQLite 的
SUM(lag=0)会统计条件为真的行,无需编写冗长的CASE WHEN。 - 常见错误 1:第 3 步使用全部事故月计算比例。混入仍在发展中的月份,会使当月报案比例高于实际值。
- 常见错误 2:第 4 步先做除法。在整数运算中,商会变成 1,估算值因此保持不变。
- 常见错误 3:第 5 步将大额案件纳入平均值。准备金会膨胀近 1 亿韩元。
- 常见错误 4:第 6 步停留在按月层面。只说“9 月不一致”,任何人都无法据此处理。
创建结算数据
将右侧示例中的生成器保存为 /root/ins/make_reserve.py,并执行 python3 make_reserve.py。这会创建 1,296 笔损失、1,293 笔分出记录和 12 个月总账。
将练习说明中的生成器保存为 /root/ins/make_reserve.py,并使用 python3 执行。在结算基准日之后才报案的事故一开始就不会出现在数据中。
创建延迟三角形
将事故月 × 报案延迟月数表写入 /root/ins/triangle.csv,表头为 accident_ym,lag0,lag1,lag2,lag3,lag4,lag5,reported。必须包含全部 12 个事故月。
报案延迟月数可将 report_ym 和 accident_ym 分别转换为年×12+月后相减得到。右下角为空是正常现象。
从充分发展月份计算报告率
只汇总完整发展 5 个月的事故月(2025-07 ~ 2026-01),在 /root/ins/lagrate.csv 中写六行,表头为 lag,claims,cum_claims,cum_permille。cum_permille 是累计数量除以总量后得到的整数千分比。
结算基准月为 2026-06,最大延迟为 5 个月,因此完整发展 5 个月的事故月截至 2026-01。混入仍在发展中的月份,会使比例偏向前部。
估算尚未报案的案件
估算尚未充分发展的事故月最终案件数,并写入 /root/ins/ibnr.csv,表头为 accident_ym,reported,max_lag,cum_claims,ultimate,ibnr。
仍在发展中的月份可观测最大延迟小于 5。用截至该延迟的累计案件数作为除数,再乘以总案件数,即可得到最终估算值。先乘法,最后只做一次除法。
将准备金拆成两部分计算
在 /root/ins/reserve.txt 中写八行:outstanding=、ibnr_claims=、avg_incurred_excl_large=、ibnr_amount=、reserve_total=、avg_incurred_incl_large=、reserve_if_incl_large=、overstated_by=。
IBNR 估算金额等于未报案估算数量乘以平均每案发生损失。分别计算平均值中包含和排除超过 1 亿韩元大额案件的情况,并并列展示。
核对总账与再保险系统
按事故月核对总账与再保险系统,将差额不为 0 的月份写入 /root/ins/cession_diff.csv,表头为 accident_ym,ledger,system,diff;再缩小到逐案层面,写入 /root/ins/cession_claims.csv,表头为 claim_no,accident_ym,incurred,expected,recorded,diff。
先按事故月缩小范围,只保留差额不为 0 的月份,再展开到逐案层面确认。月度总差额与逐案差额之和相同,才说明全部找齐。
衡量一笔大额事故的财务影响
在 /root/ins/netloss.txt 中写七行:gross_incurred=、ceded=、net_retained=、big_claim=、big_net=、net_excl_big=、big_share_pct=。分出金额使用总账值。
分出金额应使用会计总账值,而不是尚未完成核对的再保险系统值。净自留等于总发生损失减去分出金额。
编写结算报告
在 /root/ins/reserve_report.md 中按 ## 확인한 것、## 준비금、## 출재 대사、## 대형 사고、## 권고 五个章节编写报告。建议至少包含三项。
需要五个章节,建议至少包含三项。准备金和再保险分出由不同团队负责,只有明确区分责任归属,文档才能推动行动。