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 强预测能力
实践建议: 通常保留 IV > 0.02 的特征。对于 IV > 0.50 的特征需谨慎,可能存在过度拟合或数据泄露风险。

2.3 特征分箱方法

特征分箱(Binning)是将连续变量或高基数离散变量划分为有限个区间(箱)的过程。分箱质量直接影响 WOE 变换的效果和模型稳定性。

2.3.1 三种主流分箱方法对比

方法 原理 优点 缺点
等距分箱 将数据按值域等分为 k 个区间 实现简单,区间边界直观 数据分布不均时,部分箱可能为空或样本极少
等频分箱 使每个箱包含大致相同数量的样本 保证每个箱有足够样本,统计稳定 边界值可能不自然,对异常值敏感
卡方分箱 基于卡方检验合并相邻区间,直到满足停止条件 自动寻找最优分箱点,与目标变量关联性强 计算复杂度高,可能过拟合

2.3.2 卡方分箱算法步骤

  1. 初始化: 将每个唯一值作为一个独立分箱
  2. 计算卡方值: 对每对相邻分箱计算卡方统计量
  3. 合并: 合并卡方值最小(差异最不显著)的相邻分箱
  4. 重复: 重复步骤 2-3,直到达到预设分箱数或卡方阈值
卡方统计量公式:
χ² = Σ Σ ( (O_ij - E_ij)² / E_ij )

其中 O_ij 为观测频数,E_ij 为期望频数
注意事项: 卡方分箱对缺失值敏感,建议在分箱前先对缺失值进行单独处理(如单独成箱或填充)。分箱数量一般控制在 5-10 箱,过少会损失信息,过多会导致过拟合。

2.4 分箱与WOE变换流程

下图展示了从原始特征到评分卡输入的完整处理流程:

特征分箱与WOE变换流程 特征分箱与WOE变换流程 原始特征 分箱方法选择 等距 / 等频 / 卡方 分箱结果 WOE计算 IV评估与筛选 逻辑回归输入 分箱后特征特点 • 单调性约束 • 缺失值单独成箱 • 每箱至少5%样本

2.5 分箱后处理与单调性约束

评分卡建模中,分箱后的 WOE 值应满足 单调性约束,即随着特征值增大,WOE 值单调递增或递减。这符合业务直觉(如年龄越大,违约风险越低)。

  • 单调递增: 特征值越大,WOE 值越大(坏客户占比相对增加)
  • 单调递减: 特征值越大,WOE 值越小(好客户占比相对增加)
  • U型/倒U型: 某些特征(如年龄)可能呈现先降后升的形态,需结合业务判断
实现技巧: 在卡方分箱后,手动检查每个特征的 WOE 趋势。若出现非单调情况,可尝试合并相邻箱或调整分箱数。Python 中可使用 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 变换,为后续的模型训练与在线推理打下坚实基础。