3. 特征工程基础:单变量分析、双变量分析与特征衍生

特征工程是精算建模的核心环节,直接影响坏样本归因的准确性与保费定价的合理性。本节从单变量分析、双变量分析、特征衍生三个层面,系统讲解如何从原始数据中提取有效信息,为后续模型构建奠定基础。

3.1 单变量分析:分布与统计量

单变量分析用于理解每个特征的自身属性,包括数据分布形态、集中趋势、离散程度及异常值情况。精算模型中常见的单变量分析指标如下:

分析维度 常用指标 精算应用场景
集中趋势 均值、中位数、众数 评估平均赔付金额、典型风险暴露
离散程度 标准差、方差、四分位距 衡量风险波动性、定价区间宽度
分布形态 偏度、峰度、直方图 判断损失分布是否右偏、是否存在厚尾
缺失与异常 缺失率、箱线图异常点 识别数据质量问题、极端索赔案例
精算提示: 在保费定价中,连续变量(如年龄、驾龄)通常呈现右偏分布,建议在建模前进行对数变换或Box-Cox变换,以改善模型拟合效果。

以下代码展示了单变量分析的典型实现:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

# 加载示例数据
df = pd.read_csv('claim_data.csv')

# 单变量统计量计算
stats = df['claim_amount'].describe()
print(stats)

# 偏度与峰度
skewness = df['claim_amount'].skew()
kurtosis = df['claim_amount'].kurtosis()
print(f'偏度: {skewness:.2f}, 峰度: {kurtosis:.2f}')

# 缺失率检查
missing_rate = df['claim_amount'].isnull().mean()
print(f'缺失率: {missing_rate:.2%}')
单变量分析流程 原始特征数据 分布分析 统计量计算 缺失异常检测 特征质量报告

3.2 双变量分析:相关性与交叉表

双变量分析用于探索两个特征之间的关系,是识别坏样本归因关键变量的重要手段。精算模型中主要采用以下两种方法:

3.2.1 相关性分析

适用于连续变量对,常用Pearson相关系数和Spearman秩相关系数。Pearson衡量线性关系,Spearman衡量单调关系,对异常值更稳健。

相关系数范围 相关强度 精算含义
|r| ≥ 0.7 强相关 可能存在共线性,需考虑变量筛选或融合
0.3 ≤ |r| < 0.7 中等相关 有解释价值,可纳入模型
|r| < 0.3 弱相关 解释力有限,可考虑剔除

3.2.2 交叉表分析

适用于分类变量对,通过列联表展示频数分布,并计算卡方统计量检验独立性。在坏样本归因中,交叉表常用于分析不同风险等级与出险率的关系。

实践要点: 当交叉表单元格期望频数小于5时,卡方检验结果可能不可靠,建议使用Fisher精确检验替代。
# 相关性分析示例
corr_pearson = df['age'].corr(df['claim_frequency'], method='pearson')
corr_spearman = df['age'].corr(df['claim_frequency'], method='spearman')
print(f'Pearson: {corr_pearson:.3f}, Spearman: {corr_spearman:.3f}')

# 交叉表与卡方检验
crosstab = pd.crosstab(df['risk_grade'], df['claim_flag'])
from scipy.stats import chi2_contingency
chi2, p, dof, expected = chi2_contingency(crosstab)
print(f'卡方值: {chi2:.2f}, p值: {p:.4f}')
双变量分析框架 变量类型判断 连续-连续 Pearson / Spearman 分类-分类 交叉表 + 卡方检验 连续-分类 ANOVA / 箱线图 特征关联性结论

3.3 特征衍生:比率、交互项与时间窗口聚合

特征衍生是从原始特征中构造新特征的过程,旨在捕捉更复杂的风险模式。精算模型中常用的衍生方法包括:

3.3.1 比率特征

通过两个相关变量的比值构造新特征,常用于归一化处理。例如:

  • 赔付率 = 赔付金额 / 已赚保费
  • 损失频率 = 出险次数 / 风险暴露数
  • 费用率 = 运营费用 / 保费收入

3.3.2 交互项特征

将两个或多个特征的乘积或组合作为新特征,用于捕捉非线性关系。例如:

  • 年龄 × 驾龄:年轻且驾龄短的驾驶员风险更高
  • 车辆价值 × 行驶里程:高价值高使用率车辆赔付风险更大
注意: 交互项会显著增加特征维度,建议结合业务逻辑有选择地构造,避免过度拟合。一般每个交互项需至少对应100个样本支持。

3.3.3 时间窗口聚合

对时序数据进行滑动窗口统计,提取历史行为模式。常见聚合方式包括:

窗口类型 聚合函数 精算应用
固定窗口(如过去12个月) 求和、均值、最大值 计算年化赔付率、最大单次赔付
滑动窗口(如最近3/6/12个月) 均值、标准差、趋势斜率 捕捉风险变化趋势、季节性模式
累计窗口(从保单生效至今) 累计和、累计均值 评估长期风险暴露水平
# 特征衍生示例
import pandas as pd
import numpy as np

# 比率特征
df['loss_ratio'] = df['claim_amount'] / df['earned_premium']

# 交互项特征
df['age_driving_interact'] = df['age'] * df['driving_years']

# 时间窗口聚合(过去12个月滚动均值)
df['rolling_claim_mean_12m'] = (
    df.groupby('policy_id')['claim_amount']
    .transform(lambda x: x.rolling(window=12, min_periods=1).mean())
)

print('衍生特征示例:')
print(df[['loss_ratio', 'age_driving_interact', 'rolling_claim_mean_12m']].head())
精算提示: 特征衍生完成后,务必进行单变量和双变量验证,确保新特征具有合理的分布形态和与目标变量的显著相关性。无效的衍生特征会增加模型复杂度而不提升性能。