2. 评分卡建模基础:逻辑回归原理、WOE与IV值计算、特征分箱方法
信用评分卡的核心是逻辑回归模型,而特征分箱与证据权重(WOE)变换是连接原始数据与逻辑回归的桥梁。本章将系统讲解这三部分内容,帮助您理解评分卡从数据预处理到模型训练的全流程。
2.1 逻辑回归原理
逻辑回归(Logistic Regression)虽然名称中包含“回归”,但实际上是一种用于二分类问题的广义线性模型。在信用评分中,它用于预测借款人“违约”或“非违约”的概率。
2.1.1 模型形式
逻辑回归通过 Sigmoid 函数 将线性回归的输出映射到 (0, 1) 区间,表示违约概率:
P(y=1|x) = 1 / (1 + e^(-z))
其中 z = w0 + w1*x1 + w2*x2 + ... + wn*xn
这里,P(y=1|x) 是违约概率,x1, x2, ..., xn 是经过 WOE 变换后的特征,w0, w1, ..., wn 是模型权重。
2.1.2 评分卡转换
逻辑回归的输出概率可以通过线性变换转换为标准评分卡分数:
Score = Offset + Factor * ln(Odds)
其中 Odds = P / (1 - P)
实际应用中,通常设定两个基准点(如 600 分对应 Odds=50:1,每增加 20 分 Odds 翻倍)来求解 Offset 和 Factor。
2.2 WOE与IV值计算
WOE(Weight of Evidence,证据权重)和 IV(Information Value,信息量)是评分卡建模中最重要的特征工程工具。
2.2.1 WOE 定义与计算
WOE 衡量每个分箱中“好客户”与“坏客户”分布的差异:
WOE_i = ln( (Bad_i / Bad_total) / (Good_i / Good_total) )
其中 Bad_i 和 Good_i 分别是第 i 个分箱中的坏客户数和好客户数。
| 分箱区间 | 好客户数 | 坏客户数 | 好客户占比 | 坏客户占比 | WOE |
|---|---|---|---|---|---|
| [18, 25) | 500 | 120 | 0.10 | 0.24 | -0.875 |
| [25, 35) | 1500 | 200 | 0.30 | 0.40 | -0.288 |
| [35, 45) | 2000 | 120 | 0.40 | 0.24 | 0.511 |
| [45, 60] | 1000 | 60 | 0.20 | 0.12 | 0.511 |
2.2.2 IV 值计算与特征筛选
IV 值用于衡量特征对目标变量的预测能力:
IV = Σ ( (Bad_i/Bad_total - Good_i/Good_total) * WOE_i )
| IV 值范围 | 预测能力 |
|---|---|
| < 0.02 | 无预测能力,建议剔除 |
| 0.02 - 0.10 | 弱预测能力 |
| 0.10 - 0.30 | 中等预测能力 |
| > 0.30 | 强预测能力 |
2.3 特征分箱方法
特征分箱(Binning)是将连续变量或高基数离散变量划分为有限个区间(箱)的过程。分箱质量直接影响 WOE 变换的效果和模型稳定性。
2.3.1 三种主流分箱方法对比
| 方法 | 原理 | 优点 | 缺点 |
|---|---|---|---|
| 等距分箱 | 将数据按值域等分为 k 个区间 | 实现简单,区间边界直观 | 数据分布不均时,部分箱可能为空或样本极少 |
| 等频分箱 | 使每个箱包含大致相同数量的样本 | 保证每个箱有足够样本,统计稳定 | 边界值可能不自然,对异常值敏感 |
| 卡方分箱 | 基于卡方检验合并相邻区间,直到满足停止条件 | 自动寻找最优分箱点,与目标变量关联性强 | 计算复杂度高,可能过拟合 |
2.3.2 卡方分箱算法步骤
- 初始化: 将每个唯一值作为一个独立分箱
- 计算卡方值: 对每对相邻分箱计算卡方统计量
- 合并: 合并卡方值最小(差异最不显著)的相邻分箱
- 重复: 重复步骤 2-3,直到达到预设分箱数或卡方阈值
卡方统计量公式:
χ² = Σ Σ ( (O_ij - E_ij)² / E_ij )
其中 O_ij 为观测频数,E_ij 为期望频数
2.4 分箱与WOE变换流程
下图展示了从原始特征到评分卡输入的完整处理流程:
2.5 分箱后处理与单调性约束
评分卡建模中,分箱后的 WOE 值应满足 单调性约束,即随着特征值增大,WOE 值单调递增或递减。这符合业务直觉(如年龄越大,违约风险越低)。
- 单调递增: 特征值越大,WOE 值越大(坏客户占比相对增加)
- 单调递减: 特征值越大,WOE 值越小(好客户占比相对增加)
- U型/倒U型: 某些特征(如年龄)可能呈现先降后升的形态,需结合业务判断
scipy.stats.chi2_contingency 计算卡方值,结合 pandas.qcut 或 pandas.cut 实现等频/等距分箱。
2.6 代码实现示例
以下 Python 代码展示了等频分箱与 WOE 计算的核心逻辑:
import pandas as pd
import numpy as np
def woe_iv_calc(df, feature, target):
"""
计算WOE和IV值
df: DataFrame
feature: 特征名(已分箱)
target: 目标变量名(0/1)
"""
total_bad = df[target].sum()
total_good = len(df) - total_bad
grouped = df.groupby(feature)[target].agg(['count', 'sum'])
grouped.columns = ['total', 'bad']
grouped['good'] = grouped['total'] - grouped['bad']
grouped['bad_pct'] = grouped['bad'] / total_bad
grouped['good_pct'] = grouped['good'] / total_good
grouped['woe'] = np.log(grouped['bad_pct'] / grouped['good_pct'])
grouped['iv'] = (grouped['bad_pct'] - grouped['good_pct']) * grouped['woe']
return grouped['woe'], grouped['iv'].sum()
# 等频分箱示例
df['age_bin'] = pd.qcut(df['age'], q=5, duplicates='drop')
woe_values, iv_value = woe_iv_calc(df, 'age_bin', 'default_flag')
print(f"特征 IV 值: {iv_value:.4f}")
2.7 本章小结
| 核心概念 | 关键要点 |
|---|---|
| 逻辑回归 | 通过 Sigmoid 函数输出违约概率,线性可加性支持评分卡转换 |
| WOE 变换 | 将分箱特征转换为对数比率,建立与逻辑回归的线性关系 |
| IV 值 | 衡量特征预测能力,IV > 0.02 为可用特征 |
| 分箱方法 | 等距/等频/卡方三种方法,卡方分箱效果最优但需注意过拟合 |
| 单调性约束 | WOE 值随特征值单调变化,确保模型可解释性 |
掌握本章内容后,您将能够独立完成评分卡建模中的特征工程与 WOE 变换,为后续的模型训练与在线推理打下坚实基础。