4. 数据清洗概述
在保险赔付三角形建模中,数据清洗不是“把数据变干净”这么简单,而是决定后续发展因子是否可信的第一道闸门。赔付三角形以事故期、发展期、累计赔付额为基本结构,任何一条记录的错误都会沿着对角线传播,污染整列发展因子。因此,本节先建立对常见数据问题的系统认知,再给出可落地的处理原则。
一、核心原理:为什么三角形数据对脏数据格外敏感
赔付三角形的本质是“按事故期分组、按发展期累计”的二维汇总结构。它的每一格都代表一个事故期在特定发展阶段的累计赔付。发展因子通常由相邻发展期的累计值相除得到,例如 f(k) = C(i,k+1) / C(i,k)。这意味着:
- 一个缺失的累计值会让整条对角线断裂,导致该事故期无法参与因子计算;
- 一个异常大的赔付额会同时抬高分子、压低分母,使相邻两个发展因子同时失真;
- 一条重复记录会直接虚增累计赔付,且重复往往集中在某几个事故期,造成系统性偏差;
- 不一致的日期、险种或口径会让同一事故期被拆成多个“伪事故期”,破坏三角形结构。
因此,清洗的目标不是追求“零缺失”,而是保证口径一致、粒度对齐、可追溯。清洗后的每一行数据都应能明确回答:它属于哪个事故期、哪个发展期、哪个险种、以什么口径累计。
核心判断:清洗是否合格,不看删了多少行,而看三角形是否仍能按事故期—发展期稳定聚合,且发展因子的波动是否落在业务可解释范围内。
二、四类常见问题与识别方法
结合赔付三角形的数据特征,常见问题可归纳为缺失值、异常值、重复记录和不一致性四类。下表给出识别要点与典型场景。
| 问题类型 | 识别方法 | 三角形中的典型场景 | 处理原则 |
|---|---|---|---|
| 缺失值 | 按事故期×发展期交叉计数,检查空单元格 | 某事故期早期发展期无累计赔付,或某列整列缺失 | 区分“真零”与“未记录”,优先补录,不可随意填零 |
| 异常值 | 箱线图、分位数、同比环比、业务阈值 | 单笔巨额赔案、错误小数点、重复计提 | 先核实业务真实性,再决定保留、修正或剔除 |
| 重复记录 | 主键去重、金额+日期+险种组合去重 | 同一赔案多次导入、系统迁移重复 | 保留唯一业务主键,合并而非简单删除 |
| 不一致性 | 日期范围、险种编码、币种、口径对照 | 事故日期晚于报案日期、险种编码混用 | 建立统一字典与校验规则,先对齐再聚合 |
三、方法流程:从原始明细到可建模三角形
清洗流程应围绕“可复现”设计,建议按以下顺序推进:
- 结构校验:确认字段齐全,事故日期、报案日期、赔付金额、险种编码、赔案号等关键字段非空。
- 口径对齐:统一币种、险种分类、事故期定义(按事故年或事故季),确保同一事故期口径一致。
- 去重:以赔案号为主键去重;无主键时,用“事故日期+险种+赔付金额+报案日期”组合识别重复。
- 缺失处理:区分结构性缺失与随机缺失。结构性缺失需补录;随机缺失可用业务规则或模型插补,但必须记录插补标记。
- 异常检测:用分位数法、Z-score 或业务阈值标记异常,逐条核实,避免批量删除。
- 聚合验证:按事故期×发展期汇总,检查累计值是否单调不减,发展因子是否出现负值或极端跳变。
# 示例:按事故期与发展期聚合前的关键校验
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,与相邻事故期趋于一致。
常见误区:直接删除所有异常值,可能删掉真实的大额赔案,导致尾部风险被低估;用均值填补缺失的累计赔付,会人为平滑发展因子,掩盖真实进展;只去重不核对业务主键,可能把不同赔案误判为重复。
复盘要点:清洗规则应版本化,每次清洗保留原始数据、清洗日志和变更原因。三角形建模的可信度,最终取决于清洗过程能否被审计和复现。
完成上述清洗后,数据才具备进入发展因子建模的基本条件。需要强调的是,清洗不是一次性动作,而应嵌入数据管道,随每次数据更新自动执行校验与告警,确保三角形始终建立在一致、可追溯的数据基础之上。