4、数据清洗与准备:为精算建模打造干净可靠的数据源

精算建模的成败,往往在数据进入模型之前就已注定。无论是寿险准备金评估、非寿险费率厘定,还是资产负债匹配分析,模型输出的可信度直接取决于输入数据的质量。实践中,精算师花费在数据清洗与准备上的时间通常占整个建模周期的 50% 以上,这并非效率低下,而是对模型稳健性的必要投资。本章将系统讲解从数据导入到数据验证的完整链路,帮助您建立一套可复用、可审计的数据预处理框架。

数据清洗与准备——精算建模数据质量保障链路 ① 数据导入 CSV / Excel / SQL 类型识别与编码 ② 去重 完全重复 / 部分重复 业务主键识别 ③ 缺失值处理 删除 / 插补 / 标记 缺失机制判断 ④ 异常值识别 统计法 / 业务规则 极值 / 逻辑矛盾 ⑤ 数据透视 维度汇总 / 交叉分析 发现数据规律 ⑥ 数据验证 规则校验 / 一致性检查 生成质量报告 干净可靠的数据源 供精算模型直接使用 核心原则:每一步操作都需记录日志,确保数据清洗过程可追溯、可复现 建议使用 Excel Power Query + 数据验证工具 + 版本管理组合方案

4.1 数据导入:从源头控制质量

核心原理:数据导入是数据清洗的第一道关口。精算建模常用的数据来源包括保险公司核心系统的导出文件(CSV、TXT)、再保人提供的报表(Excel)、以及数据库查询结果(SQL Server、Oracle)。导入阶段的核心任务不仅是读取数据,更是识别数据类型、检查编码格式、确认字段含义,为后续清洗建立基础。

操作流程:

  1. 文件格式检查:确认文件编码(UTF-8、GBK)、分隔符(逗号、制表符、分号)、日期格式(YYYY-MM-DD vs MM/DD/YYYY)。
  2. 字段类型预判:在 Excel 中使用 Power Query(数据 > 获取数据 > 自文件)导入时,提前指定每列的数据类型(文本、整数、小数、日期、布尔值)。
  3. 首行检查:确认首行是否为字段名,是否存在合并单元格、标题行、备注行等干扰信息。
  4. 数据量核对:导入后立即对比源文件行数与导入行数,发现差异需排查原因。
数据源类型常见问题推荐导入方式
CSV 文件编码混乱、字段中包含逗号Power Query 指定分隔符与编码
Excel 报表多 Sheet、合并单元格、公式残留仅选择数据区域,关闭“启用加载”
SQL 查询结果字段类型隐式转换、NULL 值使用 ODBC 连接,保留原生类型
经验提醒:建议在导入阶段就建立“数据字典”——记录每个字段的业务含义、数据类型、允许的取值范围。这将在后续清洗和建模中大幅减少沟通成本。

4.2 去重:识别并消除重复记录

核心原理:重复数据会导致精算模型中的计数指标虚高、聚合结果失真。去重并非简单地删除重复行,而是需要区分“完全重复”和“部分重复”。完全重复指所有字段完全一致;部分重复则指业务主键相同但其他字段存在差异,例如同一保单号下有多条不同状态的记录。

判断方法:

  • 完全重复:使用 Excel 的“数据 > 删除重复值”功能,选择所有列进行去重。
  • 部分重复:需先确定业务主键(如保单号、客户ID、交易流水号),再检查主键相同的记录中哪些字段存在差异。
  • 时间序列重复:对于包含生效日期的数据,同一主键可能在不同时间点有合法记录,需结合业务逻辑判断。
// 在 Power Query 中按业务主键去重(保留最新记录)
= Table.Group(源, {"保单号"}, {{"最新记录", each Table.Max(_, "统计日期"), type table}})
风险提示:盲目去重可能删除有效数据。例如,同一保单在理赔阶段可能有多条赔付记录,这些记录在业务上是合法的。去重前务必与业务部门确认主键定义。

4.3 缺失值处理:策略选择与实施

核心原理:缺失值处理是数据清洗中最需要判断力的环节。精算数据中的缺失可能源于系统迁移遗漏、人工录入不完整或业务上确实不适用(如未出险保单的理赔金额为空)。处理策略需基于缺失机制:完全随机缺失(MCAR)、随机缺失(MAR)或非随机缺失(MNAR)。

处理策略对比:

策略适用场景优点缺点
删除记录缺失比例 < 5%,且缺失机制为 MCAR简单、不引入偏差损失样本量
均值/中位数插补连续变量,缺失比例较低计算简单低估方差,扭曲分布
回归插补存在强相关预测变量利用变量间关系可能过度拟合
多重插补缺失比例较高,模型较复杂考虑不确定性实现复杂,需专业软件
单独标记缺失本身具有业务含义保留信息增加维度

案例拆解:某寿险公司准备评估终身寿险产品的退保率,数据集中“退保原因”字段有 30% 缺失。经分析,缺失记录主要集中在早期保单(2005-2010年),当时系统未强制录入该字段。由于缺失机制与时间强相关(MNAR),简单删除会导致早期保单完全丢失,影响退保率的时间趋势分析。最终方案是:将“退保原因”分为“缺失-早期系统”和“缺失-其他”两个标记,并在建模时作为独立类别处理,同时使用多重插补对“退保时年龄”等其他字段进行填补。

复盘要点:缺失值处理没有正确的方法,关键是记录处理逻辑并测试不同策略对模型结果的影响。建议在建模阶段进行敏感性分析,比较不同插补方法下的参数估计差异。

4.4 异常值识别:区分错误与极端风险

核心原理:异常值在精算中具有双重含义:一是数据录入或传输错误导致的“脏数据”,二是真实存在的极端风险事件(如巨额理赔、极端死亡率)。识别异常值的目的是区分这两者,而非简单删除。

识别方法:

  • 统计方法:Z-score(|Z|>3)、四分位距法(超出 Q1-1.5×IQR 或 Q3+1.5×IQR)、箱线图可视化。
  • 业务规则:年龄 > 120 岁、理赔金额为负数、保费 < 0 等明显逻辑错误。
  • 模型诊断:在回归模型中,通过标准化残差(|残差|>3)识别影响点。

案例拆解:在非寿险费率厘定中,某财产险公司发现车险理赔数据中有一笔 500 万元的理赔记录,而该保单的保额上限仅为 100 万元。经核查,这是系统录入时将“50,000”误录为“5,000,000”。该异常值若直接进入模型,将导致纯保费被严重高估。处理流程:首先通过箱线图识别该极端值,然后与业务部门核实原始理赔单,确认录入错误后修正为 5 万元,并在数据验证报告中记录该修正。

风险提示:对于真实存在的极端值(如巨灾理赔),不应直接删除,而应考虑使用稳健统计方法(如中位数、Huber 估计)或单独建立极端风险模型。删除真实极端值会导致风险低估,影响偿付能力评估。

4.5 数据透视与验证:确保数据可用性

核心原理:数据透视是验证数据质量的有效手段,通过多维度的交叉汇总,可以发现单变量检查无法察觉的问题。数据验证则是建立一套规则,确保数据满足建模要求,包括完整性、准确性、一致性和时效性。

操作流程:

  1. 创建数据透视表:按关键维度(如险种、地区、年度)汇总保费、赔款、保单数等核心指标。
  2. 交叉验证:将透视结果与业务报表、精算假设进行对比,差异超过阈值需追溯原因。
  3. 建立验证规则:使用 Excel 的“数据验证”功能设置字段约束(如年龄在 0-120 之间、保费 > 0)。
  4. 生成质量报告:记录数据量、缺失率、异常值数量、修正记录等,形成可审计的文档。
验证维度检查内容示例规则
完整性必填字段是否为空保单号不能为空
准确性数值是否在合理范围赔付金额 ≤ 保额
一致性关联字段是否匹配险种代码必须在代码表中存在
时效性日期是否合理生效日期 ≤ 当前日期
经验提醒:数据验证规则应形成模板,在每次数据刷新后自动运行。建议使用 Excel 的“条件格式”高亮异常值,配合“数据验证”下拉列表限制输入,从源头减少错误。

4.6 总结复盘:构建数据清洗的标准流程

数据清洗不是一次性任务,而是需要持续优化的流程。精算建模团队应建立标准操作程序(SOP),明确每一步的责任人、操作方法和验收标准。以下是一份推荐的流程清单:

  • 步骤1:数据导入后立即生成数据概览(行数、列数、字段类型、缺失率)。
  • 步骤2:按业务主键去重,记录重复数量和处理规则。
  • 步骤3:对缺失值进行分类,制定插补或标记策略。
  • 步骤4:使用统计方法和业务规则双重识别异常值,区分错误与极端风险。
  • 步骤5:通过数据透视验证关键指标,与业务报表交叉核对。
  • 步骤6:应用数据验证规则,确保数据符合建模要求。
  • 步骤7:输出数据质量报告,存档清洗日志,确保可追溯性。
核心原则:数据清洗的每一步都应可复现、可审计。建议使用 Excel 的“Power Query”记录所有清洗步骤,或将清洗逻辑编写为可重复执行的脚本。精算模型的价值不仅在于算法,更在于数据基础的可靠性——干净的数据源是精算判断的基石。