3. 回放验证的数据准备:历史数据要求、数据清洗、数据分区与质量检查

回放验证的核心在于使用真实的历史数据“重演”模型在过去的决策过程。数据准备的质量直接决定了验证结论的可靠性。本节将系统阐述历史数据的准入标准、清洗流程、分区策略以及质量检查方法。

3.1 历史数据的基本要求

并非所有历史数据都适合回放验证。数据必须满足以下四个核心条件:

维度 要求 说明
时间跨度 覆盖至少一个完整的经济/承保周期 通常要求 ≥ 3 年,包含费率调整、重大理赔事件等波动期
数据粒度 保单级或交易级明细 聚合数据会掩盖个体风险差异,导致回放结果失真
字段完整性 包含模型输入变量、决策标签、实际结果 缺失关键变量(如历史赔付、续保标志)的数据不可用
业务一致性 承保规则、产品定义未发生结构性变化 若期间发生过产品停售或监管变更,需分段处理
实践提示: 在精算实务中,建议优先选取最近 3-5 年的数据。过长的历史数据可能包含过时的风险因子或费率结构,反而引入噪声。

3.2 数据清洗流程

原始数据通常包含缺失值、异常值、重复记录和逻辑错误。清洗流程应遵循以下步骤:

  1. 缺失值处理:对关键输入变量(如年龄、保额、风险等级)的缺失记录,优先追溯源系统补全;无法补全的,按变量重要性决定剔除或插补。
  2. 异常值检测:使用箱线图或 Z-score 方法识别极端值(如保额为负、赔付金额超过保额 10 倍),结合业务规则判断是否保留。
  3. 重复记录去重:按保单号 + 生效日期 + 险种代码组合去重,保留最新一条有效记录。
  4. 逻辑一致性校验:例如生效日期必须早于终止日期,投保年龄必须符合产品条款。
  5. 格式标准化:统一日期格式(YYYY-MM-DD)、货币单位(元)、分类变量编码(如性别:M/F)。
# 数据清洗示例(Python 伪代码)
import pandas as pd
import numpy as np

df = pd.read_csv('historical_policies.csv')

# 1. 缺失值处理:剔除关键变量缺失的记录
df = df.dropna(subset=['age', 'sum_insured', 'risk_score'])

# 2. 异常值过滤:保额必须在 0 到 500 万之间
df = df[(df['sum_insured'] > 0) & (df['sum_insured'] <= 5_000_000)]

# 3. 去重
df = df.drop_duplicates(subset=['policy_id', 'effective_date'])

# 4. 逻辑校验
df = df[df['effective_date'] < df['expiry_date']]

# 5. 格式标准化
df['effective_date'] = pd.to_datetime(df['effective_date'], format='%Y-%m-%d')

3.3 数据分区策略:训练集与回放集

回放验证要求严格区分训练集和回放集,以避免信息泄露。推荐使用时间序列分割而非随机分割。

核心原则: 回放集必须位于训练集之后的时间窗口内,且回放集的数据在模型训练时不可见。

典型的分区方案如下:

数据集 时间范围 用途 占比(参考)
训练集 2018-01 至 2021-12 模型参数估计、费率厘定 60% - 70%
验证集 2022-01 至 2022-06 模型调参、超参数选择 10% - 15%
回放集 2022-07 至 2023-06 回放验证、效果评估 20% - 25%
常见错误: 使用随机抽样划分训练集和回放集。这会导致未来数据泄露到训练过程中,使回放验证结果过于乐观,失去实际参考价值。
回放验证数据分区与流程 回放验证数据分区与流程 原始历史数据 数据清洗与校验 时间序列分割 训练集(60-70%) 回放集(20-25%)

3.4 数据质量检查清单

在数据进入回放流程前,必须执行系统性的质量检查。以下清单可作为标准操作程序:

  • 完整性检查:每个字段的空值比例是否低于 5%?关键字段是否 100% 非空?
  • 唯一性检查:保单号是否唯一?是否存在重复的生效记录?
  • 范围检查:数值型变量是否在合理区间内(如年龄 0-120,保额 > 0)?
  • 时间顺序检查:时间戳是否严格递增?是否存在未来日期?
  • 分布一致性检查:训练集与回放集的关键变量分布是否相似(KS 检验 p > 0.05)?
  • 业务规则检查:是否满足产品条款约束(如免赔额 < 保额)?
数据质量检查六维雷达 数据质量检查六维雷达 完整性 唯一性 范围 时间顺序 分布一致性 业务规则 95% 100% 90% 85% 80% 92% 检查标准 • 每项 ≥ 80% 为合格 • 任何一项 < 70% 需返工 • 综合评分 ≥ 85% 可进入回放

3.5 数据准备阶段的常见陷阱

陷阱一:幸存者偏差 — 只保留最终有效保单,忽略了中途退保或拒保的记录。这会导致回放集偏向低风险群体,高估模型效果。

陷阱二:特征泄露 — 在训练集中使用了回放期才能获取的信息(如未来的理赔记录)。必须确保所有特征在决策时点已知。

陷阱三:过度清洗 — 剔除了大量“异常”但真实的业务数据(如高额理赔案件),使回放环境脱离实际。

完成上述步骤后,数据即可进入回放验证引擎。下一阶段将聚焦于回放执行策略与结果记录方法。