评分卡模型分箱整理——0820

本文探讨了评分卡模型中分箱的原因,包括提高模型稳定性、降低过拟合风险等,并介绍了分箱的基本原则和不同方法,如等距分箱和等频分箱,强调了分箱应保证箱内样本分布均匀和单调性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在尝试做传统评分卡模型的时候,发现有一个必备的步骤是分箱,但是对于分箱不是很理解。找了一些相关的文章,记录下来,后续看是不是更理解的清楚。 

问题一:为什么要分箱? 

一般在建立分类模型时,需要对连续变量离散化,特征离散化后,模型会更稳定,降低了模型过拟合的风险。比如在建立申请评分卡模型时用logsitic作为基模型就需要对连续变量进行离散化,离散化通常采用分箱法。

1、离散特征的增加和减少都很容易,易于模型的迭代优化;

2、稀疏变量内积乘法运算速度快,计算结果方便存储,容易扩展;

3、离散化后的特征对异常数据有很像的鲁棒性:例如年龄大于50特征是1,否则就是0.如果没有离散化,年龄300这个异常值就会多模型有很大干扰;

4、逻辑回归属于广义线性模型,表达能力受限;单变量离散化后未N个,每个变量都有单独的权重,相当于为模型引入了非线性,能够提升模型表达能力,加大拟合;

5、离散后可以进行特征交叉,有M+N个变量变为m*n个变量,进一步引入非线性,提升表达能力;

6、离散后特征会更稳定,比如20-30岁之间,是一类,用户不会因为长大了一岁就变成一个完全不一样的人;

7、特征离散后,起到了简化逻辑回归模型的作用,降低了模型过拟合的风险;

8、可以将缺失作为独立的一列带入模型;

9、所有的确实都作为独立的一类带入模型;

问题二:分箱的方式是什么?

针对连续型变量和离散型变量会有不同的分箱方式,基本的原则如下:

1、分的箱数不能太多,太多了就没什么意义了——极端情况下,本身每一种特征取值就是一箱,需要把这些再进行聚类分组;

2、分箱要保证每箱里面同时包含好坏样本——为了后面计算IV和WOE

3、分箱最终要实现的是每一组内差异较小,但是每一组与每一组之间的差异要尽可能大;

4、分箱每组占比不能低于5%,否则就没有意义;

5、分箱之后需要保证单调性;

问题三:分箱的方法

第一种:有监督分箱——卡方分箱;

第二种:无监督分箱

### 变量分箱的概念及其重要性 在构建信用评分卡的过程中,变量分箱是一项重要的预处理工作。通过对连续型或离散型特征进行合理的区间划分(即分箱),能够有效提升模型的表现力和解释性[^1]。 ### 常见的分箱方法 #### 自动化分箱技术 - **等频分箱**:按照样本数量相等的原则将数据划分为若干个区间。 - **等宽分箱**:依据数值范围均匀分割成固定宽度的多个子集。 - **最优分箱**:基于统计学原理寻找最佳切点使各组间差异最大化,通常采用方检验等方式确定边界位置。 #### 手工设定规则 对于某些具有特殊意义的关键指标,可根据行业经验手动定义合适的分类标准,确保既能反映实际情况又便于理解和操作。 ### Python实现逻辑回归中的变量分箱 下面展示一段完整的Python代码示例,演示如何使用`pandas.cut()`函数完成自动化的等频分箱过程: ```python import pandas as pd from sklearn.model_selection import train_test_split from sklearn.linear_model import LogisticRegression from sklearn.metrics import roc_auc_score # 加载数据集 data = pd.read_csv('credit_data.csv') # 对年龄字段执行等频分箱 bins_age = pd.qcut(data['age'], q=5, duplicates='drop') data['binned_age'] = bins_age.cat.codes # 将类别转换为整数编码 X_train, X_test, y_train, y_test = train_test_split( data.drop(['SeriousDlqin2yrs', 'age'], axis=1), data['SeriousDlqin2yrs'], test_size=.3, random_state=42) model = LogisticRegression() model.fit(X_train, y_train) print(f'ROC AUC Score on Test Set: {roc_auc_score(y_test, model.predict_proba(X_test)[:, 1]):.4f}') ``` 此段代码首先读取了一个名为`credit_data.csv`的数据文件,并选择了其中的一个特征——年龄来进行分箱实验。这里采用了`pd.qcut()`实现了等频分箱的功能;之后通过训练一个简单的逻辑回归模型验证了经过分箱后的特征是否有助于提高预测性能。 为了进一步优化上述流程,在实际项目开发过程中还可以考虑引入更多高级工具包如`sklearn-pandas`、`category_encoders`等辅助完成更复杂的自定义分箱策略设计。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值