You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于data.table的IBNR发展因子计算实现方案求助

IBNR数据处理及发展因子计算实现方案

步骤1:计算累计赔付额

按承保年度(IncurredYear)分组,对各发展年的赔付额做累计求和,生成AmountCumulative字段:

library(data.table)

# 原始数据
IBNR <- data.table(IncurredYear=c(2020,2020,2020,2020,2021,2021,2021,2022,2022,2023),
                   DevYear=c(0,1,2,3,0,1,2,0,1,0),
                   Amount=c(100,80,70,50,70,40,35,50,45,80))

# 计算累计赔付额
IBNRCumulative <- IBNR[, AmountCumulative := cumsum(Amount), by = IncurredYear]

步骤2:转换为三角宽表

通过dcast将长表转为宽表,行对应承保年度,列对应发展年,值为累计赔付额:

IBNRtriang <- dcast(IBNRCumulative, IncurredYear ~ DevYear, 
                    fun.aggregate = sum, value.var = "AmountCumulative")

注:由于每个(IncurredYear, DevYear)组合唯一,fun.aggregate = sum仅为格式兼容,实际不影响结果。

步骤3:计算发展因子

提取宽表中各发展年对应的列,计算相邻发展年累计赔付总额的比值,最后一个发展因子固定为1:

# 提取发展年对应的列(排除承保年度列)
dev_cols <- setdiff(names(IBNRtriang), "IncurredYear")
# 计算各发展年的累计赔付总和(忽略NA值)
col_sums <- colSums(IBNRtriang[, ..dev_cols], na.rm = TRUE)
# 计算发展因子:后一年总和/前一年总和,最后补1
dev_factors <- c(col_sums[-1] / col_sums[-length(col_sums)], 1)
# 整理为目标data.table格式
DevelopmentFactor <- data.table(DevYear = as.integer(dev_cols),
                                DevFactor = round(dev_factors, 3))

运行后得到的结果与目标一致:

DevYear DevFactor
1:       0      1.750
2:       1      1.362
3:       2      1.200
4:       3      1.000

内容的提问来源于stack exchange,提问作者highbury

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 07:31:00