3. 数据准备与探索

在非寿险GLM纯保费定价项目中,数据准备与探索往往占据整个项目60%以上的工作量。模型再精妙,如果输入数据存在缺失、异常或口径不一致,最终费率因子也会失真。本章围绕数据来源、清洗、缺失值与异常值处理、描述性统计、可视化探索和变量分布分析六个环节,构建一条从原始保单到可建模数据集的完整链路。

一、核心原理:为什么数据准备决定定价上限

纯保费定价的目标是估计 E[Loss] = Frequency × Severity,其中频率与案均赔款分别服从泊松/负二项与伽马/对数正态分布。GLM对数据有明确假设:自变量取值需稳定、因变量需满足指数族分布、曝光量需作为权重或偏移项。若原始数据中混入未决赔案、重复保单、极端大额赔款或缺失的车辆使用性质,模型系数会被严重扭曲。

数据准备的核心原则可归纳为三点:口径一致(承保口径与理赔口径对齐)、可追溯(每一步清洗都留痕)、业务可解释(异常值处理需经核保/理赔确认,而非机械删除)。

关键公式:纯保费 = 赔付总额 / 风险暴露量。因此数据准备必须同时保证“分子”(赔款)与“分母”(暴露量)的准确性,任何一侧出错都会直接传导至费率。

二、方法流程:六步数据工程链路

下图展示了从多源数据到建模宽表的完整数据流,包含数据来源、清洗、缺失值、异常值、描述统计与可视化探索六个环节,并标注了每一步的关键产出。

非寿险纯保费定价数据准备链路 数据来源 承保/理赔/再保 数据清洗 去重/口径对齐 缺失值处理 填补/删除/标记 异常值处理 截断/缩尾/核实 描述性统计 均值/分位数 可视化探索 直方图/箱线图/热力图 变量分布分析 分布族选择/变换

三、数据来源与清洗实操

非寿险定价数据通常来自三个系统:核心承保系统(保单、批单、标的)、理赔系统(报案、立案、赔付、未决)和再保/财务系统(分出、摊回)。整合时需以保单号+险别+起保日期为主键,构建“保单-赔案”一对多关系。

清洗阶段重点处理四类问题:重复保单、批单追溯、币种与金额单位、时间口径。以下Python片段展示典型清洗步骤:

import pandas as pd
import numpy as np

# 1. 读取承保与理赔数据
policy = pd.read_csv("policy.csv", parse_dates=["start_date", "end_date"])
claim  = pd.read_csv("claim.csv",  parse_dates=["accident_date", "report_date"])

# 2. 去重:同一保单号+险别+起保日期仅保留最新批单
policy = policy.sort_values("batch_no").drop_duplicates(
    subset=["policy_no", "coverage", "start_date"], keep="last")

# 3. 口径对齐:仅保留事故日期在保单有效期内的赔案
claim = claim.merge(policy[["policy_no", "start_date", "end_date"]], on="policy_no")
claim = claim[(claim["accident_date"] >= claim["start_date"]) &
              (claim["accident_date"] <= claim["end_date"])]

# 4. 暴露量计算:以年为单位
policy["exposure"] = (policy["end_date"] - policy["start_date"]).dt.days / 365.0

建议在清洗后立即生成数据质量报告:记录每步删除的行数、原因和占比。若某一步删除超过5%的样本,需回溯业务原因,避免系统性偏差。

四、缺失值与异常值处理

缺失值处理需区分三类机制:完全随机缺失(MCAR)、随机缺失(MAR)和非随机缺失(MNAR)。定价场景中,车辆使用性质、驾驶员年龄、行驶区域等字段常出现缺失。处理策略如下表:

缺失类型 典型字段 处理策略 风险提示
MCAR 随机漏录的性别 删除或众数填补 样本量损失小
MAR 高龄驾驶员未填职业 模型插补/分组填补 需验证插补后分布
MNAR 高赔付案件未填事故原因 单独设“未知”类别 不可直接删除
结构性缺失 未出险保单无赔款金额 补零并保留 零膨胀需专门建模

异常值方面,赔款金额常呈右偏长尾。建议先用箱线图与分位数识别,再结合业务判断:对明显录入错误(如赔款为负、年龄为200)直接修正;对真实大额赔案采用缩尾(Winsorize)或截断(Capping),例如将案均赔款限制在99.5%分位数以内,并在模型中引入大额赔案指示变量。

切勿对赔款金额做对数变换后直接删除原始极值。GLM的伽马分布本身可容纳长尾,过度截断会低估尾部风险,导致纯保费不足。

五、描述性统计与可视化探索

描述性统计应覆盖三个维度:集中趋势(均值、中位数)、离散程度(标准差、变异系数)、分布形态(偏度、峰度)。对频率数据,重点看零赔付占比;对案均赔款,重点看右偏程度。

可视化探索建议按以下顺序推进:

  1. 直方图与核密度图:观察因变量分布,判断是否需要对数变换。
  2. 箱线图:按险别、区域、车龄分组,识别组间差异与离群点。
  3. 热力图:查看自变量之间的相关性,避免多重共线性。
  4. 散点图与趋势线:观察连续变量(如车龄、保额)与纯保费的非线性关系。

例如,若发现“车龄”与“案均赔款”呈U型关系,则GLM中不应只放线性项,而应加入车龄的二次项或分段因子。

六、变量分布分析与建模衔接

变量分布分析直接决定GLM的分布族与连接函数选择。频率模型通常用泊松或负二项;案均赔款模型常用伽马或逆高斯。若直方图显示因变量严重右偏且方差随均值增大,伽马分布是合理起点。

对自变量,需检查:类别变量各水平的样本量是否充足(建议每水平至少30条记录)、连续变量是否需分箱、是否存在稀疏类别需合并。完成分布分析后,应输出一份“变量字典”,记录每个变量的类型、分布特征、处理方式和预期入模形式。

数据准备与探索的终点不是“数据干净”,而是“数据可解释、可建模、可复现”。只有每一步清洗和变换都有业务依据和代码留痕,后续GLM系数才能被核保和精算团队信任。

至此,原始保单与赔案数据已转化为结构清晰、质量可控的建模宽表。下一阶段即可基于该数据集开展GLM频率模型与案均赔款模型的拟合与诊断。