第3章 特征工程优化策略:连续变量分箱技巧与缺失值处理

连续变量分箱是将原始数值特征划分为有限个离散区间(箱)的过程,在评分卡、风控和信用评分模型中极为常见。合理分箱能够:

  • 处理异常值与噪声:极端值被约束到边界箱内,降低对模型的干扰。
  • 捕捉非线性关系:无需引入多项式或核变换,分箱后可直接学习分段线性效应。
  • 提升模型稳定性:离散特征对数据分布变化(如时间迁移)更鲁棒。
  • 便于业务解释:如“年龄30-40岁”比“年龄32.7岁”更直观。

本章系统介绍三种主流分箱策略(等频、等距、最优分箱),并给出缺失值处理的可靠方案。

3.1 等频分箱(Equal‑Frequency Binning)

原理:将观测值按升序排列,每个箱包含大致相同数量的样本。
实现:通常用分位数确定边界(如每20%一个箱,共5箱)。

示例:Python 中使用 pandas.qcut() 实现等频分箱。
import pandas as pd
import numpy as np

# 模拟贷款金额(单位:千元)
np.random.seed(42)
amounts = np.random.exponential(scale=50, size=1000)
df = pd.DataFrame({'loan_amount': amounts})

# 等频分箱:5箱,每箱约200条
df['amount_bin_qcut'], bins = pd.qcut(df['loan_amount'], q=5, 
                                       labels=['VeryLow','Low','Medium','High','VeryHigh'],
                                       retbins=True)
print('边界(千元):', bins)
df['amount_bin_qcut'].value_counts().sort_index()
适用场景:数据分布偏态严重时,等频分箱可保证每箱均有足够样本,避免空箱。
风险:可能将相近数值分割到不同箱,破坏排序局部性;需结合业务逻辑微调边界。

3.2 等距分箱(Equal‑Width Binning)

原理:将数值范围均匀划分成宽度相等的区间,每个箱的数值区间长度相同。
实现:直接指定箱数或箱宽。

# 等距分箱:5箱,宽度 = (max-min)/5
bins_width = np.linspace(df['loan_amount'].min(), df['loan_amount'].max(), 6)
df['amount_bin_cut'] = pd.cut(df['loan_amount'], bins=bins_width,
                               labels=['VeryLow','Low','Medium','High','VeryHigh'])
df['amount_bin_cut'].value_counts().sort_index()
适用场景:数据均匀分布或与目标呈线性关系时,等距分箱结果自然、易解释。
风险:长尾分布下某些箱可能包含极少数样本,导致不稳定;建议与等频分箱结合使用。

3.3 最优分箱(Optimal Binning)

原理:基于目标变量(如违约/未违约)的分布,通过统计检验或决策树分裂准则寻找使组间差异最大化的分割点。常用方法包括:

  • 卡方分箱(Chi‑Merge):合并相邻区间直到卡方统计量超过阈值。
  • 决策树分箱:用决策树(如CART)对连续特征拟合目标变量,取分裂点作为分箱边界。
  • WOE/IV 分箱:以证据权重(Weight of Evidence)和信息量(IV)为目标,手动或自动搜索。
以下使用 optbinning 库(需安装)演示最优分箱:
# pip install optbinning
from optbinning import OptimalBinning

optb = OptimalBinning(name='loan_amount', dtype='numerical', solver='cp',
                      min_bin_size=0.05, max_n_bins=6)
optb.fit(df['loan_amount'], y=labels)  # labels 为 0/1 目标变量
binning_table = optb.binning_table.build()
print(binning_table[['Bin', 'Count', 'Count (%)', 'WoE', 'IV']])
优势:自动适应数据分布和目标关系,通常能提升模型区分度;推荐在评分卡建模中优先尝试。
注意:最优分箱对缺失值敏感,需先处理缺失或单独设定缺失箱。

3.4 缺失值处理策略

缺失值在评分场景中频繁出现,直接丢弃可能导致信息损失。推荐以下方案:

策略操作适用条件
单独分箱将缺失值作为独立类别(如“Missing”箱),与其他箱并列缺失有业务含义(如客户未提供收入)
统计填充均值/中位数/众数填充后再分箱缺失比例低(<5%)且随机
模型预测填充用其他特征预测缺失值(如KNN、回归)特征间相关性较强
创建缺失指示器增加“是否缺失”二元特征,原特征用填充值或单独箱希望保留缺失位置信息

与分箱的集成:先处理缺失(填充或设为单独类),再对非缺失部分执行分箱。缺失比例高(>10%)时,推荐“单独分箱 + 缺失指示器”组合。

处理缺失的典型流程(以单独分箱为例):
# 1. 将缺失值设为特殊标记
df['feature_missing'] = df['feature'].isna().astype(int)

# 2. 对非缺失部分分箱
non_missing = df.loc[df['feature'].notna(), 'feature']
bins = pd.qcut(non_missing, q=4, labels=['Q1','Q2','Q3','Q4'],
               duplicates='drop')

# 3. 合并:非缺失用分箱,缺失用 'Missing'
df['feature_bin'] = 'Missing'
df.loc[df['feature'].notna(), 'feature_bin'] = bins

3.5 分箱与缺失处理整体流程

下图展示了从原始连续特征到最终离散特征的完整策略树,包含分箱方法选择和缺失处理分支。

连续特征分箱与缺失处理流程图 原始连续特征 有缺失? 缺失处理策略 分箱方法选择 等频分箱 等距分箱 最优分箱 合并离散特征 分箱后离散特征 缺失处理策略包括: 单独分箱 / 统计填充 / 缺失指示器

3.6 分箱策略对比总览

方法边界划分依据对异常值敏感与目标变量相关性业务解释性推荐场景
等频分箱样本分位数低弱(仅依据分布)高(箱内样本数相同)偏态分布、需要稳定样本量
等距分箱数值区间宽度高弱高(宽度一致)均匀分布、线性效应
最优分箱目标变量分布可控(可设最小箱比例)强中等(需结合IV解释)评分卡、追求模型区分度

3.7 常见性能瓶颈与稳定性提升技巧

  • 空箱或稀疏箱:等距分箱在长尾分布下易产生空箱;解决方案:设定duplicates='drop'或合并尾箱。
  • 过拟合风险:最优分箱在数据量小或箱数过多时可能捕捉噪声;建议设置min_bin_size(如≥5%样本)和max_n_bins(如≤10)。
  • 分箱边界漂移:训练集和测试集分布不一致时,等频分箱的边界可能不适用;解决方案:基于训练集确定边界,测试集固定使用相同边界,或使用等距分箱。
  • 缺失值影响分箱结果:先填充再分箱可能扭曲分布;优先采用“单独箱 + 缺失指示器”,在模型训练时让模型自行学习缺失权重。
  • 计算效率:最优分箱(如Chi‑Merge)在大数据量(>100万行)时耗时久;可先采样或使用决策树分箱替代。
工程实践建议:在评分模型迭代中,先运行等频分箱作为基线(稳定、快速),再用最优分箱微调前几大重要特征,同时配合缺失单独处理,通常能获得显著效果提升。