4. 数据准备与清洗:赔付率异常样本归因的基础

在赔付率异常归因项目中,数据准备与清洗通常占据整个工作流 60% 以上 的时间。原始赔付数据往往来自多个业务系统(承保、理赔、财务),存在字段定义不一致、缺失值、极端离群值等问题。本章将系统讲解赔付数据源的整合策略、字段标准化规则、缺失值处理方法以及异常值截断技术,为后续的归因分析奠定高质量的数据基础。

核心原则: 数据清洗的目标不是“删除数据”,而是“保留有效信息,消除噪声干扰”。对于赔付率异常样本,错误的清洗策略可能直接掩盖真实的异常成因。

4.1 赔付数据源与整合策略

赔付率计算涉及多个数据源的交叉关联,常见的数据源包括:

数据源 核心字段 常见问题
承保系统 保单号、险种、保额、保费、起保/终保日期 保单状态更新延迟、险种编码不一致
理赔系统 报案号、出险日期、立案金额、结案金额、赔付日期 多笔赔案对应同一保单、立案金额频繁调整
财务系统 实收保费、已决赔款、未决赔款准备金 入账时间滞后、科目编码与业务口径不匹配
再保系统 分保比例、摊回赔款 分保数据缺失、摊回周期与直接赔款不同步

整合策略: 采用“保单-事故-赔案”三级关联模型,以 保单号 + 出险日期 作为唯一键进行数据拼接。对于跨系统的时间戳差异,统一以 业务发生日期(而非系统录入日期)为基准进行对齐。

赔付数据源整合架构 赔付数据源整合架构 承保系统 保单/险种/保费 理赔系统 报案/立案/结案 财务系统 实收/已决/未决 数据整合层(保单-事故-赔案关联) 唯一键:保单号 + 出险日期 统一赔付率宽表

4.2 字段标准化规则

不同系统对同一业务含义的字段往往采用不同的编码或格式,必须进行标准化处理。以下是赔付率分析中关键的标准化项:

  • 日期格式统一: 将所有日期字段转换为 YYYY-MM-DD 格式,并标记时区(如 UTC+8)。
  • 险种编码映射: 建立“业务线-险种-产品”三级编码映射表,将各系统的自定义编码统一为集团标准码。
  • 金额单位归一: 所有赔款、保费、准备金字段统一为“元”,保留两位小数。原始数据为“万元”或“千元”的,需做除法转换。
  • 赔付状态标准化: 将“已决/未决/注销/零赔付”等状态统一为枚举值:PAID、PENDING、CANCELLED、ZERO。
  • 保单有效期计算: 根据起保日期和终保日期,生成 保险期间(天) 字段,用于后续的已赚保费分摊。
实战建议: 字段标准化应形成文档化的“数据字典”,每次清洗前先执行字典校验。对于无法映射的编码,统一归入 UNKNOWN 类别并记录日志,避免直接丢弃。

4.3 缺失值处理策略

赔付数据中的缺失值不能简单删除,因为缺失本身可能隐含业务信息(如未决赔款准备金缺失可能意味着案件尚未估损)。根据缺失类型采取不同策略:

缺失字段类型 推荐处理方法 适用场景
关键标识字段(保单号、报案号) 删除记录 无法关联任何业务实体,保留无意义
金额字段(赔款、保费) 中位数填充 或 同类均值填充 按险种、地区分组后计算中位数/均值
日期字段(出险日期、结案日期) 业务规则推算 如缺失出险日期,用报案日期减合理报案延迟天数
分类字段(险种、渠道) 众数填充 或 新增“未知”类别 保留缺失信息作为独立类别,避免引入偏差
未决赔款准备金 链梯法插补 或 保留缺失标记 精算方法插补;或单独标记用于后续敏感性分析

缺失值处理流程:

  1. 统计每个字段的缺失率,绘制缺失值矩阵(使用 missingno 库)。
  2. 对缺失率 > 80% 的字段,直接删除该字段。
  3. 对缺失率 5%~80% 的字段,按上表策略处理。
  4. 对缺失率 < 5% 的字段,优先使用中位数或众数填充。
  5. 记录所有填充操作的日志,包括填充值、填充方法、填充记录数。
# 缺失值处理示例(Python伪代码)
import pandas as pd
import numpy as np

def fill_missing_values(df):
    # 按险种分组填充赔款中位数
    df['claim_amount'] = df.groupby('product_code')['claim_amount']\
                           .transform(lambda x: x.fillna(x.median()))
    # 日期字段推算:缺失出险日期 = 报案日期 - 3天
    df['accident_date'] = df['accident_date'].fillna(
        df['report_date'] - pd.Timedelta(days=3)
    )
    # 分类字段:新增未知类别
    df['channel'] = df['channel'].fillna('UNKNOWN')
    return df

4.4 异常值截断技术

赔付率数据中常出现极端值,例如单笔赔款超出保额数倍、保费为负值、赔付率超过 10000% 等。这些异常值会严重扭曲归因分析结果,必须进行截断处理。

异常值识别方法:

  • 业务规则法: 赔付率 < 0% 或 > 1000% 视为异常;单笔赔款 > 保额 2 倍视为异常。
  • 统计法: 使用 IQR(四分位距)规则,超出 Q1 - 1.5*IQR 或 Q3 + 1.5*IQR 的值为异常。
  • Z-Score 法: 对对数变换后的数据计算 Z-Score,|Z| > 3 视为异常。

截断策略:

方法 操作 适用场景
封顶截断(Winsorize) 将超出 99% 分位数的值替换为 99% 分位数 赔付率、赔款金额等右偏分布字段
下限截断 将低于 1% 分位数的值替换为 1% 分位数 保费、保额等不应出现负值的字段
业务阈值截断 根据精算或风控规则设定硬阈值 赔付率上限设为 500%,下限设为 0%
分险种动态截断 按险种分别计算截断阈值 车险与健康险赔付率分布差异大
注意: 截断不是删除。截断后的数据仍保留在数据集中,只是将极端值压缩到合理范围内。对于截断的记录,应添加标记字段(如 is_capped),以便在归因分析中单独评估这些样本的影响。
异常值截断处理流程 异常值截断处理流程 原始赔付数据 业务规则法 IQR 统计法 Z-Score 法 截断决策:封顶 / 下限 / 动态阈值 截断后数据(含标记字段)

4.5 数据清洗质量检查清单

完成上述清洗步骤后,建议执行以下质量检查,确保数据可用于归因分析:

  • 完整性检查: 关键字段(保单号、赔款金额、出险日期)缺失率是否为 0%。
  • 一致性检查: 保费总额与财务系统对账差异 < 0.5%;赔款总额与理赔系统对账差异 < 1%。
  • 合理性检查: 赔付率分布是否符合业务认知(如车险赔付率集中在 40%~80%)。
  • 时效性检查: 数据时间窗口是否覆盖完整的赔付发展期(通常至少 12 个月)。
  • 可追溯性检查: 每条清洗操作都能通过日志追溯到原始值和清洗值。
交付物: 数据清洗完成后,输出 赔付率分析宽表(包含所有原始字段 + 清洗后字段 + 标记字段)以及 数据清洗报告(包含缺失率统计、填充方法、截断阈值、异常记录数等)。该报告是归因分析可复现性的重要保障。