4. 特征工程入门:特征构造、筛选与分箱

特征工程是授信评分模型的核心环节,直接影响模型区分好坏客户的能力。本章从特征构造、特征筛选、特征分箱三个维度,系统讲解如何从原始数据中提炼高质量特征。

4.1 特征构造方法

特征构造是将原始字段转化为更具预测能力的变量。授信场景中,常用三类构造方法:聚合特征、统计特征、衍生特征。

4.1.1 聚合特征

聚合特征基于时间窗口或业务维度,对原始记录进行汇总计算。典型场景包括:

  • 按客户ID聚合:近3个月、6个月、12个月的交易次数、总金额、最大单笔金额
  • 按产品类型聚合:信用卡、贷款、理财等不同产品的使用频次
  • 按渠道聚合:线上、线下、移动端等渠道的交易占比
聚合维度 常用函数 授信应用示例
时间窗口 SUM, AVG, MAX, MIN, COUNT 近6个月月均消费金额
业务分类 COUNT_DISTINCT, RATIO 使用产品种类数
行为序列 LAG, LEAD, DIFF 最近两次还款间隔天数

4.1.2 统计特征

统计特征描述数据分布形态,捕捉客户行为的波动性和稳定性:

  • 集中趋势:均值、中位数、众数
  • 离散程度:标准差、变异系数、极差
  • 分布形状:偏度、峰度
  • 分位数:25%分位、75%分位、四分位距
授信实战案例:某消费金融公司发现,客户近3个月消费金额的变异系数(标准差/均值)与逾期率呈显著正相关。消费波动大的客户,收入不稳定,违约风险更高。

4.1.3 衍生特征

衍生特征通过字段间的运算或业务逻辑生成新变量:

  • 比率类:负债收入比(DTI)、信用卡使用率、还款金额/应还金额
  • 差值类:当前年龄-开户年龄、最近消费日-账单日
  • 交叉类:收入等级×职业类型、年龄组×婚姻状况
  • 时序类:环比增长率、同比增长率、移动平均
# 衍生特征构造示例(Python伪代码)
import pandas as pd
import numpy as np

# 比率特征
df['dti_ratio'] = df['total_debt'] / df['annual_income']

# 差值特征
df['days_since_last_payment'] = (pd.Timestamp.today() - df['last_payment_date']).dt.days

# 交叉特征
df['age_occupation'] = df['age_group'] + '_' + df['occupation_type']

# 时序特征
df['consumption_growth_3m'] = df.groupby('customer_id')['monthly_consumption'].pct_change(periods=3)
特征构造原则:① 业务可解释性优先;② 避免信息泄露(如使用未来数据);③ 控制特征数量,防止维度灾难。

4.2 特征筛选方法

特征筛选旨在从大量候选特征中选出对目标变量(如是否逾期)预测能力最强、冗余度最低的特征子集。常用方法包括IV值筛选和相关性分析。

4.2.1 IV值(信息价值)

IV值衡量特征对好坏客户的区分能力。计算基于WOE(Weight of Evidence):

WOE_i = ln( (好客户占比_i) / (坏客户占比_i) )
IV = Σ (好客户占比_i - 坏客户占比_i) × WOE_i
IV值范围 预测能力 处理建议
< 0.02 无预测能力 删除
0.02 ~ 0.10 弱 可保留,结合业务判断
0.10 ~ 0.30 中等 推荐保留
0.30 ~ 0.50 强 优先保留
> 0.50 过强(可能过拟合) 谨慎使用,检查业务合理性

4.2.2 相关性分析

高相关性特征会导致模型共线性,降低稳定性和可解释性。常用方法:

  • 皮尔逊相关系数:适用于连续变量间的线性关系
  • 斯皮尔曼秩相关系数:适用于有序变量或非线性关系
  • 方差膨胀因子(VIF):VIF > 10 表示严重共线性
筛选策略:先按IV值保留预测能力强的特征(IV > 0.02),再对保留特征计算相关性矩阵。对于相关系数 > 0.7 的特征对,保留IV值较高的一个,删除另一个。
# 特征筛选流程示例
# 1. 计算IV值
iv_dict = {}
for col in feature_cols:
    iv = calculate_iv(df[col], df['target'])
    iv_dict[col] = iv

# 2. 保留IV > 0.02的特征
selected_features = [col for col, iv in iv_dict.items() if iv > 0.02]

# 3. 计算相关性矩阵
corr_matrix = df[selected_features].corr(method='spearman')

# 4. 删除高相关特征(|r| > 0.7)
final_features = remove_high_corr(selected_features, corr_matrix, threshold=0.7)
实战注意:IV值计算依赖分箱结果,不同分箱方式会导致IV值波动。建议在分箱完成后重新计算IV值,确保筛选结果的稳定性。

4.3 特征分箱

特征分箱将连续变量离散化为有限个区间,是评分卡模型的标准预处理步骤。分箱目的包括:处理非线性关系、降低异常值影响、增强模型可解释性。

4.3.1 分箱方法对比

分箱方法 原理 优点 缺点
等距分箱 按数值范围等分成k段 简单直观 易受异常值影响,箱内样本不均
等频分箱 按样本数量等分成k段 箱内样本数均衡 可能将相近值分到不同箱
卡方分箱 基于卡方检验合并相邻区间 考虑目标变量分布 计算复杂度较高
决策树分箱 用单变量决策树确定切分点 自动捕捉最优切分 可能过拟合
最优分箱 基于IV值或信息增益优化 预测能力最大化 需设定约束条件

4.3.2 分箱质量评估

好的分箱应满足以下标准:

  • 单调性:坏账率随特征值单调递增或递减
  • 区分度:相邻箱之间的坏账率差异显著
  • 样本量:每个箱至少包含5%的样本,且坏客户数≥5
  • 业务可解释:分箱边界符合业务常识(如年龄18、25、35、50)
# 等频分箱示例
import pandas as pd

def equal_freq_binning(series, n_bins=5):
    """等频分箱,返回分箱标签"""
    return pd.qcut(series, q=n_bins, duplicates='drop', labels=False)

# 卡方分箱示例(使用toad库)
import toad

# 自动分箱并返回分箱结果
bins = toad.transform.Combiner()
bins.fit(df[feature_cols], df['target'], method='chi', min_samples=0.05)
binned_df = bins.transform(df[feature_cols])
分箱实战建议:① 先尝试等频分箱(5~10箱),观察单调性;② 若单调性不佳,改用卡方或决策树分箱;③ 最终箱数控制在3~7箱,避免过细分箱导致过拟合;④ 分箱后务必计算WOE和IV值,验证区分效果。

4.4 特征工程完整流程

下图展示了从原始数据到最终特征集的完整工作流:

特征工程完整流程 原始数据 特征构造 聚合特征 统计特征 衍生特征 特征筛选 特征分箱 最终特征集
流程要点:① 特征构造是基础,需结合业务理解生成候选特征;② 特征筛选通过IV值和相关性过滤冗余特征;③ 特征分箱将连续变量离散化,提升模型稳定性和可解释性;④ 三个步骤可迭代进行,如分箱后重新计算IV值,进一步筛选特征。

4.5 本章小结

特征工程是授信评分模型成功的关键。通过聚合、统计、衍生三类方法构造特征,利用IV值和相关性分析筛选有效特征,再通过分箱处理提升模型性能。掌握这些方法,能够显著提升评分卡模型的区分能力和业务可解释性。