首页/数据/数仓建模速查/案例:保险保单缴费理赔建模
建模基础69 条

案例:保险保单缴费理赔建模

保险域三过程:承保(保单)、缴费(期缴流水)、理赔(赔案);投保人与被保人是两个角色维度,保额/保费/赔付分别度量。

数仓建模速查数据更新于 2026-10-13

保险域三个过程

保险域围绕三个业务过程建模:承保形成保单,缴费形成期缴流水,理赔形成赔案。投保人与被保人是两个独立的角色维度,同一张保单可能涉及多个被保人,因此要用角色扮演维度或保单与被保人的关系表来承载。度量上保额、保费、赔付额分属不同业务含义,不能混在一张表里相加。保单是一等维度,续保、批改、退保都挂在保单维度或事件表上管理。

基本信息

业务过程承保、缴费、理赔
维度投保人、被保人、险种、渠道、机构
度量保额、保费、赔付额、手续费
角色维度投保人与被保人分开建模
事件批改、续保、退保、给付

典型使用场景

  • 保费收入与续保率分析,按险种、渠道、机构多维查看
  • 理赔时效与赔付率监控:报案到结案的周期分布
  • 保单保有量统计,区分有效、失效、退保状态
  • 批改管理:保额与被保人变更留痕,支撑争议追溯
  • 与财务精算口径核对,确认准备金与实收保费的关系

理赔事实

理赔事实
-- 理赔事实:赔案级粒度,关联保单与角色维
CREATE TABLE fact_claim (
  claim_id   string,
  policy_id  string,
  insured_sk bigint    COMMENT '被保人角色维键',
  claim_type string    COMMENT '赔案类型',
  report_ts  timestamp COMMENT '报案时间',
  close_ts   timestamp COMMENT '结案时间,空表示未结案',
  claim_amt  decimal(18,2) COMMENT '赔付金额'
) PARTITIONED BY (dt string) STORED AS ORC;

-- 赔付率按险种聚合,注意分子分母的期间口径
SELECT claim_type, count(1) AS claim_cnt FROM fact_claim GROUP BY claim_type;

建模对象对照

建模对象粒度要点
保单一保单一行状态变化需事件表补充
期缴流水一缴费一行应收与实际到账需分开
赔案一赔案一行结案时间为空表示未结案
角色维投保人与被保人一人多角色需桥接表承载
投保人与被保人不能合并成一个维度:一张保单可以有多个被保人,合并后风险人数会被算错,风控与精算口径都会受影响。
保单状态不要原地覆盖:保全变更、退保、失效都是业务事实,用状态事件表记录变更过程,才能在争议与审计时给出完整链条。

易错点

  • 投保人与被保人不区分,风险人数与理赔分析错位
  • 保单状态覆盖更新,保全与批改历史丢失
  • 保额、保费、赔付额混在一张表里相加,指标失去意义
  • 未结案赔案被排除在分母之外,赔付率与时效系统性偏乐观

数据来源与参考

  • 保险数仓实践:保单域模型
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌