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值和相关性分析筛选有效特征,再通过分箱处理提升模型性能。掌握这些方法,能够显著提升评分卡模型的区分能力和业务可解释性。