1. 课程导入

欢迎进入《R精算建模与保险数据分析实战》。在正式进入模型与数据之前,本章先解决三个问题:这门课要学什么、精算建模在R中如何落地、以及如何搭建一套可复用的实战环境。只有把目标、概念、框架和环境四件事对齐,后续的损失分布拟合、信度模型、准备金评估与定价分析才能形成连贯的能力链,而不是零散代码的堆叠。

一、学习目标:从“会跑代码”到“能交付精算结论”

本课程的学习目标不是单纯掌握R语法,而是建立“数据—模型—假设—结论—沟通”的完整闭环。具体可拆解为四个层次:

  • 数据层:能够读取并清洗保单、理赔、赔付、准备金等典型保险数据,识别缺失、异常、重复与口径不一致问题。
  • 模型层:理解损失分布、频率—强度模型、信度理论、广义线性模型、链梯法与随机准备金等核心方法,并能在R中实现。
  • 验证层:会做拟合优度检验、残差分析、交叉验证与敏感性分析,避免“模型能跑但结论不可靠”。
  • 交付层:能用R Markdown或Quarto输出可复现的分析报告,把技术结果转化为核保、定价、准备金与风险管理可用的建议。
学习建议:每学一个模型,都问自己三个问题——它解决什么精算问题?输入数据长什么样?输出结果如何解释?这三问能显著降低“学完就忘”的概率。

二、核心概念:精算建模的四个基本对象

保险数据分析与一般商业分析最大的区别,在于它围绕“不确定性”和“风险聚合”展开。本课程反复出现四个核心对象:

核心对象 含义 典型R工具/包 精算场景
损失频率 单位风险暴露下的索赔次数 MASS、fitdistrplus 车险索赔次数、健康险就诊次数
损失强度 单次索赔的赔付金额 fitdistrplus、actuar 车损金额、责任险赔付额
风险暴露 承保标的的数量或时间口径 dplyr、data.table 车年、人年、保额单位
聚合损失 频率与强度的复合结果 actuar、statmod 年度总赔付、巨灾损失

理解这四个对象之间的关系,是后续所有模型的共同基础。频率与强度通常分别建模,再通过卷积、模拟或近似方法得到聚合损失分布。若把频率和强度混在一起直接建模,往往会导致解释困难和预测偏差。

三、整体框架:一条从数据到决策的主线

本课程的整体框架可以概括为“一条主线、三个循环”。主线是:业务问题 → 数据准备 → 模型构建 → 验证诊断 → 精算解释 → 决策建议。三个循环分别是数据循环、模型循环和沟通循环。数据循环强调口径与质量;模型循环强调假设与验证;沟通循环强调把技术语言翻译成业务语言。

R精算建模主线:从业务问题到决策建议 业务问题 定价 / 准备金 / 风控 数据准备 清洗 / 口径 / 暴露 模型构建 分布 / GLM / 信度 验证诊断 残差 / 交叉验证 精算解释与决策建议 费率 / 准备金 / 风险限额 数据循环 · 模型循环 · 沟通循环

图中展示了本课程的主线结构:业务问题驱动数据准备,数据准备支撑模型构建,模型构建后必须经过验证诊断,最终回到精算解释与决策建议。三个循环贯穿始终,意味着任何一步发现问题,都可能需要回到上一步重新调整。

四、实战环境搭建:一次配置,长期复用

精算建模对环境的可复现性要求很高。建议使用R 4.3以上版本,配合RStudio或VS Code,并统一使用renv管理包版本。以下是一套最小可用的环境配置流程:

# 1. 安装核心包
install.packages(c(
  "tidyverse", "data.table", "fitdistrplus",
  "actuar", "MASS", "statmod", "glmnet",
  "rmarkdown", "knitr", "renv"
))

# 2. 初始化项目环境
renv::init()

# 3. 记录依赖快照
renv::snapshot()

# 4. 验证关键包是否可用
library(tidyverse)
library(fitdistrplus)
library(actuar)
sessionInfo()

建议项目目录采用如下结构,便于后续章节复用:

  • data/:存放原始数据与清洗后数据,原始数据只读。
  • R/:存放可复用的函数脚本,如数据清洗、分布拟合、模型评估。
  • reports/:存放R Markdown或Quarto报告。
  • output/:存放图表、模型对象与中间结果。
  • renv.lock:锁定包版本,保证结果可复现。
常见误区:直接在全局环境安装大量包而不做版本锁定,导致换机器后代码无法运行;或者把原始数据直接修改后覆盖保存,导致无法回溯。精算分析中,数据与代码的可追溯性与模型本身同样重要。

五、案例场景与复盘:从一张保单数据开始

假设我们拿到一份车险保单抽样数据,包含保单号、起保日期、终止日期、车型、地区、索赔次数、赔付金额等字段。初学者常犯的错误是直接对赔付金额建模,忽略了“零赔付”保单的存在。正确的做法是先区分频率与强度:用索赔次数除以风险暴露得到频率,再对正赔付记录建模强度。若忽略零赔付,强度模型会被高估,进而导致纯保费测算偏差。

复盘要点如下:

  1. 先明确分析单位:是保单、车年还是索赔记录?单位不同,模型口径完全不同。
  2. 再检查风险暴露:是否有重复保单、期限不足一年、批单调整等情况。
  3. 然后分别建模频率与强度,最后再聚合。
  4. 最后做敏感性分析:更换分布假设或剔除异常值后,结论是否稳定。
本章的核心任务不是记住所有包名,而是建立“业务问题—数据口径—模型假设—验证诊断—决策建议”的完整思维链。环境搭建只是起点,真正的精算能力体现在每一步都能说清“为什么这样做”以及“结果意味着什么”。

完成本章后,你应当能够独立配置一套可复现的R精算分析环境,理解频率、强度、风险暴露与聚合损失四个核心对象的关系,并能够用一条主线描述从数据到决策的完整流程。接下来,我们将进入数据准备与探索性分析,把这条主线落到真实保险数据上。