4. 数据清洗概述

在保险赔付三角形建模中,数据清洗不是“把数据变干净”这么简单,而是决定后续发展因子是否可信的第一道闸门。赔付三角形以事故期、发展期、累计赔付额为基本结构,任何一条记录的错误都会沿着对角线传播,污染整列发展因子。因此,本节先建立对常见数据问题的系统认知,再给出可落地的处理原则。

一、核心原理:为什么三角形数据对脏数据格外敏感

赔付三角形的本质是“按事故期分组、按发展期累计”的二维汇总结构。它的每一格都代表一个事故期在特定发展阶段的累计赔付。发展因子通常由相邻发展期的累计值相除得到,例如 f(k) = C(i,k+1) / C(i,k)。这意味着:

  • 一个缺失的累计值会让整条对角线断裂,导致该事故期无法参与因子计算;
  • 一个异常大的赔付额会同时抬高分子、压低分母,使相邻两个发展因子同时失真;
  • 一条重复记录会直接虚增累计赔付,且重复往往集中在某几个事故期,造成系统性偏差;
  • 不一致的日期、险种或口径会让同一事故期被拆成多个“伪事故期”,破坏三角形结构。

因此,清洗的目标不是追求“零缺失”,而是保证口径一致、粒度对齐、可追溯。清洗后的每一行数据都应能明确回答:它属于哪个事故期、哪个发展期、哪个险种、以什么口径累计。

核心判断:清洗是否合格,不看删了多少行,而看三角形是否仍能按事故期—发展期稳定聚合,且发展因子的波动是否落在业务可解释范围内。

二、四类常见问题与识别方法

结合赔付三角形的数据特征,常见问题可归纳为缺失值、异常值、重复记录和不一致性四类。下表给出识别要点与典型场景。

问题类型 识别方法 三角形中的典型场景 处理原则
缺失值 按事故期×发展期交叉计数,检查空单元格 某事故期早期发展期无累计赔付,或某列整列缺失 区分“真零”与“未记录”,优先补录,不可随意填零
异常值 箱线图、分位数、同比环比、业务阈值 单笔巨额赔案、错误小数点、重复计提 先核实业务真实性,再决定保留、修正或剔除
重复记录 主键去重、金额+日期+险种组合去重 同一赔案多次导入、系统迁移重复 保留唯一业务主键,合并而非简单删除
不一致性 日期范围、险种编码、币种、口径对照 事故日期晚于报案日期、险种编码混用 建立统一字典与校验规则,先对齐再聚合

三、方法流程:从原始明细到可建模三角形

清洗流程应围绕“可复现”设计,建议按以下顺序推进:

  1. 结构校验:确认字段齐全,事故日期、报案日期、赔付金额、险种编码、赔案号等关键字段非空。
  2. 口径对齐:统一币种、险种分类、事故期定义(按事故年或事故季),确保同一事故期口径一致。
  3. 去重:以赔案号为主键去重;无主键时,用“事故日期+险种+赔付金额+报案日期”组合识别重复。
  4. 缺失处理:区分结构性缺失与随机缺失。结构性缺失需补录;随机缺失可用业务规则或模型插补,但必须记录插补标记。
  5. 异常检测:用分位数法、Z-score 或业务阈值标记异常,逐条核实,避免批量删除。
  6. 聚合验证:按事故期×发展期汇总,检查累计值是否单调不减,发展因子是否出现负值或极端跳变。
# 示例:按事故期与发展期聚合前的关键校验
df["accident_period"] = df["accident_date"].dt.year
df["dev_period"] = (df["report_date"].dt.year - df["accident_date"].dt.year) + 1

# 检查累计赔付是否单调不减
check = df.groupby(["accident_period", "dev_period"])["cum_paid"].sum()
violations = check.groupby(level=0).diff().lt(0).sum()
print("累计值下降的事故期数量:", violations.sum())

# 重复记录识别
dup = df.duplicated(subset=["claim_id"], keep=False)
print("疑似重复赔案数:", dup.sum())

四、案例与复盘:一次典型的三角形清洗

某车险公司准备用三年赔付数据构建三角形,初步聚合后发现某事故期的发展因子异常偏高。排查发现三个问题叠加:一是该事故期有 12 条赔案被重复导入,累计赔付虚增约 8%;二是部分赔案的报案日期晚于事故日期两年以上,被错误归入后期发展期;三是有 3 笔大额赔案金额单位混用,元与万元未统一。清洗后,该事故期的发展因子从 1.42 回落到 1.18,与相邻事故期趋于一致。

常见误区:直接删除所有异常值,可能删掉真实的大额赔案,导致尾部风险被低估;用均值填补缺失的累计赔付,会人为平滑发展因子,掩盖真实进展;只去重不核对业务主键,可能把不同赔案误判为重复。

复盘要点:清洗规则应版本化,每次清洗保留原始数据、清洗日志和变更原因。三角形建模的可信度,最终取决于清洗过程能否被审计和复现。

赔付三角形数据清洗:问题识别与处理路径 原始赔案明细 事故期·发展期·金额 缺失值 空单元格 / 未记录 区分真零与缺失 异常值 巨额赔案 / 小数点 先核实再处理 重复记录 多次导入 / 迁移 主键去重合并 不一致性 日期 / 险种 / 币种 统一字典与口径 处理原则 1. 口径先对齐 2. 主键去重 3. 缺失标记插补 4. 异常逐条核实 5. 聚合后验证 6. 规则版本化 7. 保留清洗日志 8. 可审计可复现 可建模 赔付三角形 事故期×发展期 累计赔付稳定 发展因子可解释

完成上述清洗后,数据才具备进入发展因子建模的基本条件。需要强调的是,清洗不是一次性动作,而应嵌入数据管道,随每次数据更新自动执行校验与告警,确保三角形始终建立在一致、可追溯的数据基础之上。