1. 课程导论:坏样本归因与赔付率分析在精算中的核心价值

1.1 为什么精算模型需要关注“坏样本”?

在非寿险精算定价与准备金评估中,赔付率(Loss Ratio)是衡量业务质量与盈利能力的核心指标。然而,原始承保数据中往往混杂着因欺诈、误操作、数据迁移错误或特殊理赔事件导致的“坏样本”。这些样本若不加以识别与归因,会直接扭曲赔付率曲线,导致定价模型产生系统性偏差。

坏样本归因的核心价值在于:

  • 提升模型稳健性:剔除或修正异常样本,使 GLM、GBM 等模型拟合更贴近真实风险。
  • 精准识别风险驱动因子:区分“真实赔付波动”与“数据污染”,避免错误调费。
  • 优化再保与资本配置:基于干净的赔付率分布计算纯保费与风险边际。
  • 合规与审计支持:为监管报送提供可追溯的样本清洗逻辑。
关键认知:坏样本不是简单的“脏数据”,而是包含欺诈、异常理赔、数据录入错误、保单生效前出险等结构性噪声。精算师需要一套系统化的归因框架来区分“噪声”与“信号”。

1.2 赔付率分析在精算中的核心位置

赔付率分析贯穿精算工作的全链路,从费率厘定到准备金评估,再到经验监控。下表展示了赔付率在不同精算场景中的角色:

精算场景 赔付率类型 坏样本影响 归因目标
费率厘定 期望赔付率 高估或低估纯保费 识别异常理赔记录
准备金评估 已发生赔付率 链梯法趋势扭曲 剔除大额欺诈案
经验监控 日历年度赔付率 季节性波动误判 区分系统性 vs 偶发性
再保定价 超赔层赔付率 损失分布尾部失真 标记极端值样本

1.3 坏样本归因的三大核心维度

本课程将坏样本归因拆解为三个可操作的分析维度,每个维度对应不同的精算技术与数据科学方法:

  1. 数据质量维度:检测缺失值、异常值、逻辑矛盾(如出险日期早于保单生效日)。
  2. 理赔行为维度:识别欺诈模式、重复理赔、超额医疗账单等行为异常。
  3. 模型残差维度:通过 GLM 残差分析、GBM 特征重要性排序,定位模型无法解释的赔付偏差。
实践建议:在项目初期建立“坏样本归因清单”,将每个维度的检测规则与赔付率影响量化,形成可复用的分析流水线。

1.4 课程目标与学习路径

完成本课程后,你将能够:

  • 独立设计一套坏样本检测与归因的工程化流程。
  • 使用 Python(pandas、scikit-learn、statsmodels)实现赔付率清洗与归因分析。
  • 将归因结果转化为精算定价与准备金调整建议。
  • 通过可视化报告向非技术团队解释坏样本对赔付率的影响。

学习路径分为四个阶段:

阶段 章节范围 核心产出
基础篇 第 1-5 章 坏样本归因框架与赔付率指标定义
方法篇 第 6-15 章 统计检验、机器学习、规则引擎实现
实战篇 第 16-25 章 车险、健康险、财产险案例全流程
进阶篇 第 26-30 章 自动化流水线、监管合规与模型监控

1.5 坏样本归因与赔付率分析整体框架

下图展示了本课程的核心分析框架,从原始承保数据输入到最终精算决策输出的完整链路:

坏样本归因与赔付率分析框架 原始承保数据 理赔历史数据 外部征信/欺诈库 坏样本归因引擎 数据质量检测 | 理赔行为分析 | 模型残差诊断 数据质量维度 理赔行为维度 模型残差维度 精算决策:费率调整 / 准备金修正 / 再保策略
常见误区:不要将坏样本归因等同于简单的数据清洗。归因的目标是理解“为什么”样本异常,而不仅仅是“删除”异常。错误的删除可能掩盖重要的风险信号,导致赔付率分析产生更大的偏差。

1.6 本课程使用的技术栈与工具

课程所有案例均基于开源工具实现,确保可复现性:

  • 数据处理:Python 3.10+,pandas 2.0,numpy 1.24
  • 统计建模:statsmodels 0.14,scipy 1.11
  • 机器学习:scikit-learn 1.3,lightgbm 4.0
  • 可视化:matplotlib 3.7,seaborn 0.12
  • 精算专用:chainladder 0.9(准备金评估)

以下是一个简单的坏样本检测代码示例,用于快速识别赔付率中的极端值:

import pandas as pd
import numpy as np

# 模拟赔付率数据
np.random.seed(42)
data = {
    'policy_id': range(1, 1001),
    'earned_premium': np.random.uniform(500, 2000, 1000),
    'incurred_loss': np.random.gamma(2, 300, 1000)
}
df = pd.DataFrame(data)
df['loss_ratio'] = df['incurred_loss'] / df['earned_premium']

# 坏样本检测:基于 IQR 方法
Q1 = df['loss_ratio'].quantile(0.25)
Q3 = df['loss_ratio'].quantile(0.75)
IQR = Q3 - Q1
lower_bound = Q1 - 1.5 * IQR
upper_bound = Q3 + 1.5 * IQR

bad_samples = df[(df['loss_ratio'] < lower_bound) | (df['loss_ratio'] > upper_bound)]
print(f"检测到 {len(bad_samples)} 个坏样本,占比 {len(bad_samples)/len(df):.2%}")
学习建议:建议在本地 Jupyter 环境中运行上述代码,并尝试修改 IQR 倍数(1.5 → 2.0 或 3.0),观察坏样本数量与赔付率分布的变化。这是理解“归因阈值”敏感性的第一步。