2. 特征工程基础回顾:特征类型、特征尺度与质量评估

在精算建模中,坏样本归因的成功与否高度依赖特征的质量。本章系统回顾特征工程的基础概念,涵盖特征类型、特征尺度以及特征质量评估三大核心模块,为后续的坏样本特征构造与筛选奠定理论基础。

2.1 特征类型:数值、类别与时序

精算数据通常包含三种基本特征类型,每种类型在建模前的预处理方式截然不同。

特征类型 定义 精算场景示例 常见预处理
数值型 可量化的连续或离散数值 保额、保费、已赚保费、赔付金额、年龄 标准化、归一化、对数变换、分箱
类别型 有限个离散取值,无自然顺序 险种代码、地区、职业等级、渠道 独热编码、标签编码、目标编码、WOE编码
时序型 带有时间顺序的观测值 保单生效日期、理赔发生日期、续保时间 滞后特征、滑动窗口统计、时间衰减权重
精算提示: 坏样本归因中,时序型特征常被忽视。例如,理赔发生距保单生效的时间间隔(“出险时长”)是区分欺诈与正常理赔的关键信号。务必保留时间戳的原始粒度,避免过早聚合。

2.2 特征尺度:测量水平的四种层次

特征尺度(Measurement Scale)决定了特征可进行的数学运算与统计操作。精算建模中常用 Stevens 分类法。

  • 定类尺度(Nominal): 仅用于标识类别,无大小、无顺序。如险种代码、性别。只能计算众数。
  • 定序尺度(Ordinal): 有顺序但差值无意义。如风险等级(低/中/高)、客户忠诚度评分。可计算中位数。
  • 定距尺度(Interval): 差值有意义,但无绝对零点。如温度(摄氏度)、年份。可计算均值、标准差。
  • 定比尺度(Ratio): 有绝对零点,比值有意义。如保额、赔付金额、年龄。可进行所有数学运算。
建模影响: 定类与定序特征通常需要编码后进入模型;定距与定比特征可直接输入,但需关注尺度敏感性(如树模型对尺度不敏感,线性模型与神经网络对尺度敏感)。
特征尺度层次结构(Stevens分类) 定类 Nominal 类别标识,无顺序 定序 Ordinal 有顺序,差值无意义 定距 Interval 差值有意义,无绝对零点 定比 Ratio 有绝对零点,比值有意义 信息量:低 ↑ ↑ 信息量:高 精算特征尺度示例 定类:险种代码 定序:风险等级 定距:保单年度 定比:赔付金额 尺度越高,可用的统计与建模操作越丰富

2.3 特征质量评估:缺失率、唯一值与分布

特征质量直接决定模型的上限。精算数据常存在高缺失、高基数、长尾分布等问题。以下三个指标是特征筛选的第一道关卡。

2.3.1 缺失率(Missing Rate)

缺失率 = 缺失样本数 / 总样本数。精算场景中,缺失往往携带信息(如“未填写理赔原因”可能暗示欺诈)。

  • 低缺失(< 5%): 可直接填充(均值/中位数/众数)或删除。
  • 中缺失(5% - 30%): 需分析缺失机制(MCAR/MAR/MNAR),考虑模型填充或单独编码。
  • 高缺失(> 30%): 通常删除,除非缺失本身是强预测信号。

2.3.2 唯一值(Unique Value Count)

唯一值数量反映特征的区分能力。

特征类型 唯一值过少 唯一值过多 精算处理建议
类别型 几乎为常数(方差为零) 高基数(如邮编、身份证号) 合并稀有类别、目标编码、哈希编码
数值型 离散值极少(如只有0/1) 每个样本都不同(如ID) 检查是否为噪声;分箱或剔除
避坑提醒: 精算数据中,保单号、客户ID等唯一值极高的特征,即使缺失率为0,也不能直接入模,否则会导致过拟合。必须通过聚合或编码转化为有统计意义的特征。

2.3.3 分布(Distribution)

特征的分布形态影响模型假设与预处理策略。

  • 正态分布: 适合线性模型,可直接使用。
  • 偏态分布(长尾): 精算赔付金额典型特征。需做对数变换、Box-Cox变换或分箱。
  • 双峰/多峰分布: 可能隐含子群体,需结合业务进行分群建模。
  • 均匀分布: 区分能力弱,需检查是否为噪声。
特征质量评估三要素 缺失率 Missing Rate 阈值:5% / 30% 唯一值 Unique Count 警惕常数与高基数 分布形态 Distribution 偏态 / 正态 / 双峰 特征质量评估决策流程 缺失率 > 30% → 删除或单独编码 唯一值 = 1 → 删除(零方差) 分布严重偏态 → 对数变换 / 分箱

2.4 特征质量评估实战代码片段

以下 Python 代码演示如何快速计算特征质量指标,适用于精算数据集的初步探索。

import pandas as pd
import numpy as np

def feature_quality_report(df):
    """
    生成特征质量评估报告
    参数:
        df: pandas DataFrame
    返回:
        report: DataFrame,包含缺失率、唯一值数、数据类型
    """
    report = pd.DataFrame({
        '特征名': df.columns,
        '数据类型': df.dtypes.values,
        '缺失率': df.isnull().mean().values,
        '唯一值数': df.nunique().values,
        '零方差标记': df.nunique().values == 1
    })
    report['缺失等级'] = pd.cut(
        report['缺失率'],
        bins=[-0.001, 0.05, 0.30, 1.0],
        labels=['低', '中', '高']
    )
    return report.sort_values('缺失率', ascending=False)

# 示例用法
# report = feature_quality_report(insurance_data)
# print(report[report['缺失等级'] == '高'])
精算实战要点: 在坏样本归因项目中,建议将特征质量评估作为数据流水线的第一步。每次新增特征后,重新运行质量报告,确保特征集保持健康。重点关注“高缺失 + 高唯一值”的组合特征,这类特征往往是噪声或数据录入错误的产物。