4. 数据准备与清洗:赔付率异常样本归因的基础
在赔付率异常归因项目中,数据准备与清洗通常占据整个工作流 60% 以上 的时间。原始赔付数据往往来自多个业务系统(承保、理赔、财务),存在字段定义不一致、缺失值、极端离群值等问题。本章将系统讲解赔付数据源的整合策略、字段标准化规则、缺失值处理方法以及异常值截断技术,为后续的归因分析奠定高质量的数据基础。
核心原则: 数据清洗的目标不是“删除数据”,而是“保留有效信息,消除噪声干扰”。对于赔付率异常样本,错误的清洗策略可能直接掩盖真实的异常成因。
4.1 赔付数据源与整合策略
赔付率计算涉及多个数据源的交叉关联,常见的数据源包括:
| 数据源 | 核心字段 | 常见问题 |
|---|---|---|
| 承保系统 | 保单号、险种、保额、保费、起保/终保日期 | 保单状态更新延迟、险种编码不一致 |
| 理赔系统 | 报案号、出险日期、立案金额、结案金额、赔付日期 | 多笔赔案对应同一保单、立案金额频繁调整 |
| 财务系统 | 实收保费、已决赔款、未决赔款准备金 | 入账时间滞后、科目编码与业务口径不匹配 |
| 再保系统 | 分保比例、摊回赔款 | 分保数据缺失、摊回周期与直接赔款不同步 |
整合策略: 采用“保单-事故-赔案”三级关联模型,以 保单号 + 出险日期 作为唯一键进行数据拼接。对于跨系统的时间戳差异,统一以 业务发生日期(而非系统录入日期)为基准进行对齐。
4.2 字段标准化规则
不同系统对同一业务含义的字段往往采用不同的编码或格式,必须进行标准化处理。以下是赔付率分析中关键的标准化项:
- 日期格式统一: 将所有日期字段转换为
YYYY-MM-DD格式,并标记时区(如 UTC+8)。 - 险种编码映射: 建立“业务线-险种-产品”三级编码映射表,将各系统的自定义编码统一为集团标准码。
- 金额单位归一: 所有赔款、保费、准备金字段统一为“元”,保留两位小数。原始数据为“万元”或“千元”的,需做除法转换。
- 赔付状态标准化: 将“已决/未决/注销/零赔付”等状态统一为枚举值:
PAID、PENDING、CANCELLED、ZERO。 - 保单有效期计算: 根据起保日期和终保日期,生成
保险期间(天)字段,用于后续的已赚保费分摊。
实战建议: 字段标准化应形成文档化的“数据字典”,每次清洗前先执行字典校验。对于无法映射的编码,统一归入
UNKNOWN 类别并记录日志,避免直接丢弃。
4.3 缺失值处理策略
赔付数据中的缺失值不能简单删除,因为缺失本身可能隐含业务信息(如未决赔款准备金缺失可能意味着案件尚未估损)。根据缺失类型采取不同策略:
| 缺失字段类型 | 推荐处理方法 | 适用场景 |
|---|---|---|
| 关键标识字段(保单号、报案号) | 删除记录 | 无法关联任何业务实体,保留无意义 |
| 金额字段(赔款、保费) | 中位数填充 或 同类均值填充 | 按险种、地区分组后计算中位数/均值 |
| 日期字段(出险日期、结案日期) | 业务规则推算 | 如缺失出险日期,用报案日期减合理报案延迟天数 |
| 分类字段(险种、渠道) | 众数填充 或 新增“未知”类别 | 保留缺失信息作为独立类别,避免引入偏差 |
| 未决赔款准备金 | 链梯法插补 或 保留缺失标记 | 精算方法插补;或单独标记用于后续敏感性分析 |
缺失值处理流程:
- 统计每个字段的缺失率,绘制缺失值矩阵(使用
missingno库)。 - 对缺失率 > 80% 的字段,直接删除该字段。
- 对缺失率 5%~80% 的字段,按上表策略处理。
- 对缺失率 < 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),以便在归因分析中单独评估这些样本的影响。
4.5 数据清洗质量检查清单
完成上述清洗步骤后,建议执行以下质量检查,确保数据可用于归因分析:
- 完整性检查: 关键字段(保单号、赔款金额、出险日期)缺失率是否为 0%。
- 一致性检查: 保费总额与财务系统对账差异 < 0.5%;赔款总额与理赔系统对账差异 < 1%。
- 合理性检查: 赔付率分布是否符合业务认知(如车险赔付率集中在 40%~80%)。
- 时效性检查: 数据时间窗口是否覆盖完整的赔付发展期(通常至少 12 个月)。
- 可追溯性检查: 每条清洗操作都能通过日志追溯到原始值和清洗值。
交付物: 数据清洗完成后,输出
赔付率分析宽表(包含所有原始字段 + 清洗后字段 + 标记字段)以及 数据清洗报告(包含缺失率统计、填充方法、截断阈值、异常记录数等)。该报告是归因分析可复现性的重要保障。