特征分箱基础:概念、目的与常见方法
各位同学好。今天咱们聊聊反欺诈特征工程里的基础操作——特征分箱。我早期做评分卡模型时,几乎天天跟分箱打交道。说白了,分箱就是把连续数值切成几段,比如“年龄”这个特征,我们切成[0,18)、[18,30)、[30,45)、[45,60)、[60,+]几个区间。为什么要做这件事?又该怎么做?今天我把自己的理解和方法都摊开来讲。
一、到底什么是特征分箱?
特征分箱(Binning),也叫离散化。就是把一个连续型变量,根据某种规则,划分成有限个区间(箱子)。每个区间赋予一个类别标签或编码值。
核心思想:用分段近似替代原始数值,减少模型对单点噪声的敏感度。
我参与过一个反欺诈项目,交易金额字段里有个极端异常值——某笔交易金额高达9亿(数据录入错误)。如果不做分箱,模型会死死记住这个9亿,导致其他正常区间都失效。分箱后,9亿被归入“极高金额”组,模型反而能学到真正的模式。
二、为什么要分箱?三个核心目的
- 处理非线性关系:年龄与欺诈概率往往不是直线,而是U型或倒U型。分段后模型可以自由拟合每段的权重。
- 提高鲁棒性:少受极端值、数据漂移的影响。你想想看,如果明天交易系统变了单位,数值整体乘以100,只要分箱边界等比例调整,模型输出几乎不变。
- 增强可解释性:风控业务人员更愿意接受“金额在3000-10000元间风险高”,而不是“β系数为0.037”。
注意:分箱不是越多越好。我曾经见到有人把年龄切成50箱,结果20个区间样本数为0,模型直接报错。分箱数量一般控制在5~15箱,反欺诈场景下建议5~10箱。
三、常见分箱方法:等距 vs 等频
分箱方法很多,但入门最常用的两种就是等距分箱和等频分箱。下面这张图把它们的流程和区别展示清楚了。
四、两种方法的详细对比
| 对比维度 | 等距分箱 | 等频分箱 |
|---|---|---|
| 划分原则 | 固定区间宽度 | 固定每个区间样本数 |
| 边界确定 | (max-min)/K | 分位数(Q1、Q2…) |
| 优点 | 数值含义清晰,便于业务解释 | 每个区间样本均衡,避免空箱 |
| 缺点 | 数据偏态时大部分样本挤在少数区间 | 边界可能落在不合理数值点(如金额99.99元) |
| 反欺诈适用场景 | 金额、次数等业务含义明确且分布均匀的特征 | 年龄、收入等分布极不均匀的特征 |
我的实践经验:在交易金额分箱中,如果客户群体消费能力差异很大(比如既有学生又有企业),等距分箱会导致高金额区间样本极少。我通常先用等频分箱做一轮探索,再根据业务逻辑手动调整边界。
五、代码动手:pandas 实现
Python里用pandas就能快速做分箱。我用一个简单的模拟数据来演示。
import pandas as pd
import numpy as np
# 模拟交易金额数据(元)
np.random.seed(42)
data = {'amount': np.random.exponential(scale=500, size=1000)}
df = pd.DataFrame(data)
# 等距分箱:分成5箱,宽度固定
df['amount_cut'] = pd.cut(df['amount'], bins=5)
print(df['amount_cut'].value_counts().sort_index())
# 等频分箱:分成5箱,每箱样本数基本一样
df['amount_qcut'] = pd.qcut(df['amount'], q=5, labels=['Q1','Q2','Q3','Q4','Q5'])
print(df['amount_qcut'].value_counts().sort_index())
运行后你会看到:等距分箱的第一个区间可能塞了900个样本,最后一个区间只有几个;而等频分箱每个区间大约200个样本。这就是两种方法的直观差异。
六、选哪种?一个经验法则
- 数据分布接近均匀或业务边界明确(如年龄0-120固定范围)→ 优先等距
- 数据严重偏态或样本量不均衡 → 先试等频,再手工调整
- 反欺诈场景:我强烈建议两种都试一遍,送入LightGBM跑AUC对比。有时候别看等距分箱的区间样本很不均衡,但如果那个极小的高额区间恰好是欺诈聚集区,等距反而能捕获信号。
曾经踩过的坑:一次项目里,我对“距离上次登录天数”特征做了等频分箱,结果边界值恰好是0.5天(按分位数计算)。业务方反馈“0.5天是什么意思?半天?”我只好重新把边界根据业务调整为0-1、1-3、3-7、7-30等业务可理解的区间。所以分箱不能纯靠算法,一定要结合理解。
好了,这一章就聊到这儿。等距和等频是分箱最基础的两个方法。下个阶段我们会聊聊更有监督意义的卡方分箱和决策树分箱——它们能直接利用标签信息来划边界,效果通常更好。不过今天先把这两个基础打扎实,后面的内容才吃得透。