4. 数据收集与理解

在车险风险分层与保费定价项目中,数据是模型的地基。没有对数据来源、字段语义和质量边界的清晰理解,后续的特征工程、风险分层与定价模型都会变成“垃圾进、垃圾出”。本节围绕四个核心问题展开:数据从哪里来、每个字段代表什么、数据是否可信、数据分布是否支持建模假设。

一、核心原理:车险数据的三个来源层次

车险数据通常来自三个层次,理解层次差异有助于判断字段的可靠性与使用边界。

  • 承保数据:来自核心业务系统,包括保单号、投保人信息、车辆信息、险种、保额、保费、起保日期等。这类数据字段规范、更新及时,是定价的基础。
  • 理赔数据:来自理赔系统,包括报案时间、出险原因、损失金额、赔付金额、责任比例、维修方式等。理赔数据直接反映风险暴露,但存在报案延迟、估损偏差和未决赔案问题。
  • 外部数据:包括车辆零整比、车型风险等级、地区交通违法记录、气象与道路数据等。外部数据能补充风险维度,但需要关注合规性、覆盖率和更新频率。
核心判断:承保数据回答“谁保了什么”,理赔数据回答“出了什么事、赔了多少”,外部数据回答“环境与车辆本身有多危险”。三者通过保单号、车辆识别代号、时间窗口进行关联。

二、字段含义:从业务语义到建模语义

字段理解不能停留在字面翻译,而要建立“业务语义—统计语义—建模语义”的映射。例如“车龄”在业务上是车辆使用年限,在统计上是连续变量,在建模中可能需要分箱为“0-1年、2-5年、6-10年、10年以上”,因为不同区间的风险非线性。

字段类别 典型字段 业务含义 建模注意点
车辆属性 车龄、新车购置价、使用性质、座位数 反映车辆价值与使用强度 使用性质需区分营业/非营业;价格需考虑折旧
保单属性 险种、保额、免赔额、起保日期 反映保障范围与自留风险 免赔额与出险频率存在逆向选择
驾驶人属性 年龄、驾龄、性别、历史出险次数 反映驾驶行为与经验 年龄与驾龄常共线;出险次数需定义观察窗口
理赔结果 赔付金额、出险原因、责任比例 反映实际损失强度 需区分已决/未决;零赔付案件要单独处理

三、数据质量检查:六类高频问题与处理策略

车险数据质量检查建议按以下顺序推进,先解决结构性问题,再处理数值问题。

  1. 完整性:检查关键字段缺失率。例如车辆识别代号缺失超过5%时,外部数据关联会大面积失败。
  2. 唯一性:保单号应唯一;若出现重复,需判断是批单、续保还是系统重复推送。
  3. 一致性:起保日期不应晚于终保日期;赔付金额不应为负;责任比例应在0到1之间。
  4. 时效性:理赔数据存在报案延迟,建模时需设定观察窗口,避免用未来信息预测过去风险。
  5. 异常值:赔付金额的极端值可能是真实大案,也可能是录入错误,需结合分位数与业务规则判断。
  6. 分布偏移:训练集与验证集在地区、车龄、险种上的分布应大致可比,否则模型泛化能力会下降。
常见误区:直接删除所有缺失值。车险中缺失本身可能携带信息,例如“未填写驾龄”可能集中在某些渠道或特定客群,盲目删除会引入选择偏差。

四、探索性分析:用分布与关系定位风险信号

探索性分析的目标不是“画很多图”,而是回答三个问题:目标变量长什么样、哪些字段与风险相关、字段之间是否高度共线。车险中最常用的目标变量是出险频率和案均赔付,前者适合用直方图与泊松分布对比,后者适合用对数变换后的分布观察。

# 示例:车险数据质量与分布快速检查
import pandas as pd
import numpy as np

df = pd.read_csv("auto_insurance.csv")

# 1. 缺失率与唯一性
quality = pd.DataFrame({
    "missing_rate": df.isnull().mean(),
    "nunique": df.nunique()
})
print(quality.sort_values("missing_rate", ascending=False).head(10))

# 2. 关键字段一致性检查
invalid_date = df[df["起保日期"] > df["终保日期"]]
invalid_amount = df[df["赔付金额"] < 0]
print("日期异常:", len(invalid_date), "金额异常:", len(invalid_amount))

# 3. 目标变量分布
df["出险次数"].value_counts().sort_index().plot(kind="bar")
df["赔付金额"].apply(lambda x: np.log1p(x)).hist(bins=50)

在探索性分析中,建议优先关注以下关系:车龄与出险频率是否呈U型、历史出险次数与当前出险是否强相关、不同使用性质下的案均赔付差异是否显著。这些发现会直接指导后续的风险分层变量选择。

实操建议:把数据质量检查结果固化为一份“数据健康度清单”,每次数据更新后自动运行,记录缺失率、异常率、分布偏移指标。这样在模型上线后,能快速定位是数据问题还是模型问题。

五、案例复盘:一次因字段理解偏差导致的定价偏差

某车险项目在建模时直接使用“历史出险次数”作为特征,未区分观察窗口。结果发现该特征在训练集上重要性极高,但上线后区分度骤降。复盘发现:训练集的历史出险次数包含了未来信息,属于数据泄漏。修正方法是严格按保单起保日期划分观察期与表现期,只用观察期内的出险记录预测表现期风险。这个案例说明,字段含义不仅要看业务定义,还要看时间边界。

车险数据理解与质量检查主线 数据来源 承保系统 理赔系统 外部数据 字段语义映射 业务含义 统计类型 建模处理方式 质量检查 完整性 / 唯一性 一致性 / 时效性 异常值 / 分布偏移 探索性分析:分布 · 关系 · 时间边界 出险频率分布 → 泊松/负二项假设检验 案均赔付分布 → 对数变换与极端值识别 字段相关性 → 共线性与变量筛选 数据来源决定字段边界,字段语义决定特征质量,质量检查决定模型可信度,探索性分析决定风险信号是否被正确捕捉

总结来看,数据收集与理解不是一次性任务,而是贯穿项目始终的持续动作。只有在来源、语义、质量和分布四个维度都建立清晰认知,后续的风险分层与保费定价才有可靠依据。