4. 数据准备与探索
在非寿险费率因子分层与相对风险定价的整个建模链条中,数据准备与探索往往占据60%以上的工作量,却直接决定后续分层是否合理、相对风险系数是否可信。本节围绕数据来源、清洗、缺失值、异常值与分布探索五个环节,建立一套可复用的数据准备流程。
一、核心原理:数据质量决定风险刻画的精度
费率因子分层的本质,是把保单群体按风险特征切分为若干同质组,并估计每组相对基准组的风险水平。若原始数据存在重复保单、错误保额、缺失车型或极端赔付,分层边界会被扭曲,相对风险系数出现系统性偏差。因此数据准备的目标不是“把数据变干净”这么简单,而是保证风险暴露、赔付金额、因子取值三者在同一张保单记录上保持逻辑一致。
1. 可追溯:每条清洗规则都要记录来源与影响行数;
2. 可复现:清洗脚本版本化,避免手工修改;
3. 业务可解释:异常值判定需结合承保与理赔规则;
4. 分层可用:因子取值需具备足够样本量与稳定分布。
二、数据来源与整合
非寿险定价数据通常来自多个系统:核心承保系统提供保单、标的、因子字段;理赔系统提供赔案、赔付金额与进展状态;再保与财务系统提供摊回与费用数据;外部数据包括车型库、地区风险等级、气象或地理编码。整合时以保单号+标的序号为主键,以事故日期为时间轴,构建“保单—赔案—因子”三表关联。
| 数据域 | 典型字段 | 常见问题 | 处理要点 |
|---|---|---|---|
| 保单信息 | 保单号、起止日期、保额、保费 | 日期重叠、保额为零 | 按保单期拆分暴露期 |
| 标的因子 | 车型、车龄、使用性质、地区 | 编码不统一、缺失 | 映射标准码表 |
| 赔案信息 | 赔案号、事故日期、赔付金额 | 重复报案、零结案 | 去重并区分已决未决 |
| 外部数据 | 车型风险等级、地区编码 | 版本过期 | 按事故期匹配版本 |
三、数据清洗与缺失值处理
清洗顺序建议为:去重 → 格式标准化 → 逻辑校验 → 缺失值处理 → 异常值识别。逻辑校验包括:保单起期不得晚于止期、事故日期须落在保险期间内、赔付金额不得为负、车龄不得为负且不超过合理上限。
缺失值处理需区分三类机制:完全随机缺失、随机缺失、非随机缺失。对于因子字段,若缺失比例低于5%,可用众数或分组中位数填补;若介于5%~20%,建议增设“未知”分层,把缺失本身作为一种风险信号;若超过20%,应评估该因子是否值得进入模型。对于赔付金额缺失,不可简单填零,应结合是否已决、是否零结案判断。
# 示例:缺失值分层标记
df['vehicle_age_missing'] = df['vehicle_age'].isna().astype(int)
df['vehicle_age_filled'] = df.groupby('usage_type')['vehicle_age'] \
.transform(lambda s: s.fillna(s.median()))
# 缺失比例统计
missing_rate = df.isna().mean().sort_values(ascending=False)
print(missing_rate.head(10))
四、异常值识别与因子分布探索
异常值识别应结合统计规则与业务规则。统计上可用箱线图、Z分数、分位数截断;业务上需识别保额异常高、赔付远超保额、车龄极端、地区编码错误等。对于赔付金额,建议采用赔付率而非绝对金额进行异常判定,因为大保额保单的绝对赔付天然更高。
# 示例:基于分位数的异常值标记
q1, q3 = df['loss_ratio'].quantile([0.25, 0.75])
iqr = q3 - q1
lower, upper = q1 - 1.5*iqr, q3 + 1.5*iqr
df['loss_ratio_outlier'] = ((df['loss_ratio'] < lower) |
(df['loss_ratio'] > upper)).astype(int)
print(df['loss_ratio_outlier'].mean())
因子分布探索的目标是判断分层是否必要、边界是否合理。常用方法包括:直方图观察连续因子分布、柱状图观察类别因子集中度、分组赔付率曲线观察风险单调性、热力图观察两因子交互。若某因子各层级赔付率差异很小,说明该因子区分度弱;若某层级样本量过少,应合并相邻层级。
五、案例场景:车险车龄因子分层
某车险业务线拟对“车龄”进行分层定价。原始数据包含12万条保单,车龄字段缺失率8%,赔付率存在少量极端值。处理步骤:先按保单号去重,剔除保额为0的记录;对车龄缺失增设“未知”层;用分位数法标记赔付率异常并单独复核;绘制车龄分组赔付率柱状图。结果显示,车龄与赔付率呈单调上升关系,0~2年相对赔付率0.62,12年以上达1.30,说明车龄具备明显区分度,可划分为五层。
1. 直接用均值填补车龄,导致高龄车风险被低估;
2. 把零结案直接删除,造成赔付率虚高;
3. 异常值一律删除,忽略大额赔案的真实风险信息;
4. 分层过细导致某些层级样本不足,相对风险系数波动剧烈。
完成数据准备与探索后,应输出一份数据质量报告,记录各因子缺失率、异常率、分层样本量与赔付率分布,作为后续因子分层与相对风险定价的输入依据。