4. 等宽分箱法:原理介绍、Python实现、优缺点分析

4.1 原理介绍

等宽分箱法(Equal-Width Binning)是特征分箱中最直观的方法之一。其核心思想是将连续变量的取值范围划分为 宽度完全相等 的 k 个区间,每个区间包含相同的数据范围跨度,但落入每个区间的样本数量可能差异很大。

设特征的最小值为 min,最大值为 max,分箱数为 k,则每个箱的宽度 w 为:

w = (max - min) / k

第 i 个箱的边界为:

[min + (i-1)*w, min + i*w),   i = 1, 2, ..., k

等宽分箱在 PSI(群体稳定性指标)计算中常用于快速评估特征分布的整体偏移趋势,尤其适用于业务含义明确、取值范围稳定的评分卡或风控特征。

适用场景提示: 等宽分箱最适合取值范围有限且分布相对均匀的特征。对于存在极端离群值的特征,建议先做截尾处理(Winsorization)再分箱,否则大部分样本会集中在少数几个箱中,导致 PSI 计算失真。
等宽分箱原理示意图(k=5) 箱1 箱2 箱3 箱4 箱5 min +w +2w +3w +4w max ← w → ← w → ← w → ← w → ← w → 每个箱的数值范围宽度相等,但样本量可能差异很大 适用于分布均匀、无极端离群值的特征

4.2 Python实现

以下代码演示了使用 Pandas 和 NumPy 实现等宽分箱,并计算每个箱的样本占比,为后续 PSI 计算做准备。

import numpy as np
import pandas as pd

def equal_width_binning(data, k=10, return_bins=True):
    """
    等宽分箱函数

    参数:
        data : array-like, 输入连续特征
        k    : int, 分箱数量(默认10)
        return_bins : bool, 是否返回箱边界

    返回:
        bins : ndarray, 箱边界(k+1个点)
        bin_counts : ndarray, 每个箱的样本数
        bin_ratios : ndarray, 每个箱的样本占比
    """
    # 剔除缺失值
    data_clean = data[~np.isnan(data)]
    n = len(data_clean)

    # 计算等宽边界
    min_val = np.min(data_clean)
    max_val = np.max(data_clean)
    width = (max_val - min_val) / k
    bins = np.linspace(min_val, max_val, k + 1)

    # 分箱计数(左闭右开,最后一个箱包含右端点)
    labels = np.digitize(data_clean, bins, right=False)
    # 将落在 bins[-1] 上的点归入最后一箱
    labels[labels == k + 1] = k

    bin_counts = np.array([np.sum(labels == i) for i in range(1, k + 1)])
    bin_ratios = bin_counts / n

    if return_bins:
        return bins, bin_counts, bin_ratios
    else:
        return bin_counts, bin_ratios

# 示例:生成模拟数据并分箱
np.random.seed(42)
sample_data = np.random.normal(loc=100, scale=15, size=10000)

bins, counts, ratios = equal_width_binning(sample_data, k=5)

print("箱边界:", np.round(bins, 2))
print("各箱样本数:", counts)
print("各箱占比:", np.round(ratios, 4))
输出示例: 对于均值为100、标准差为15的正态分布数据,等宽分箱后中间箱(箱3)的样本占比通常最高,两端箱占比最低。这种分布不均匀性是等宽分箱的主要局限。

4.3 优缺点分析

维度 优点 缺点
实现复杂度 算法简单,仅需 min、max 和 k 三个参数,计算效率高 对离群值敏感,单个极端值会拉宽所有箱的跨度
可解释性 箱边界为等距整数或小数,业务人员容易理解 箱内样本分布不均时,稀疏箱的统计意义弱
PSI适用性 适合快速对比两个时间窗口的分布偏移趋势 样本量少的箱会导致 PSI 分母为零或占比波动剧烈
数据适配 适用于均匀分布、正态分布等对称性较好的特征 对长尾分布、偏态分布、多峰分布效果差
调参灵活性 只需调整 k 值,调参路径清晰 k 值固定后无法自适应数据局部密度

4.4 等宽分箱在PSI计算中的关键注意事项

  1. 空箱处理: 如果某个箱在训练集或测试集中样本数为0,PSI公式中的 ln(实际占比/预期占比) 会无法计算。建议对空箱做平滑处理(如加1平滑或合并相邻箱)。
  2. 边界稳定性: 等宽分箱的边界完全由 min 和 max 决定。如果生产环境出现新的极值,箱边界会整体偏移,导致 PSI 虚高。建议使用训练集的 min/max 固定边界,对超出范围的值做截断。
  3. 分箱数选择: k 值过小会丢失分布细节,k 值过大会放大噪声。经验规则:对于 PSI 计算,k 通常取 5~20,样本量越大可适当增加 k 值。
常见陷阱: 不要对离散型特征(如枚举值、类别编码)直接使用等宽分箱。离散值的数值间距没有实际意义,等宽分箱会破坏类别之间的语义关系。此时应使用等频分箱或业务规则分箱。
等宽分箱 vs 等频分箱对比(偏态分布数据) 等宽分箱 箱宽相等,样本量差异大 等频分箱 箱宽不等,样本量相等 偏态分布下等宽分箱易导致尾部箱样本稀疏,等频分箱可缓解此问题

4.5 等宽分箱的调优建议

  • 离群值截断: 在分箱前对特征做 1% 或 5% 分位数的截尾处理,避免极端值拉宽箱跨度。
  • 动态 k 值选择: 使用 Sturges 规则(k = log₂(n) + 1)或 Freedman-Diaconis 规则(k = (max-min) / (2×IQR×n⁻¹/³))作为初始参考,再根据 PSI 稳定性微调。
  • 合并稀疏箱: 分箱后检查每个箱的样本占比,将占比低于 1% 的箱与相邻箱合并,确保 PSI 计算的统计可靠性。
  • 固定边界对齐: 在模型监控阶段,始终使用训练集确定的箱边界对生产数据进行分箱,避免因边界漂移引入额外偏差。