4、逻辑回归与分类:Sigmoid函数、逻辑回归原理、多分类问题、实战:信用评分卡
逻辑回归,这个名字其实有点误导人。它名字里带“回归”,干的却是分类的活。说白了,它就是用来回答“是或否”、“属于A类还是B类”这类问题的。
我刚开始接触时也纳闷:为什么不用线性回归直接分类?后来踩了坑才明白——线性回归的输出是负无穷到正无穷,而分类问题需要的是0到1之间的概率。嗯,这里就需要一个“翻译官”出场了。
Sigmoid函数:把实数“挤”成概率
Sigmoid函数就是那个翻译官。它的数学形式很简单:
σ(z) = 1 / (1 + e^(-z))
不管输入z是多大或多小的数,输出永远落在(0, 1)之间。z=0时输出0.5,z越大越接近1,z越小越接近0。这个特性太适合做概率了。
我在项目中遇到过一个问题:直接用线性回归预测客户违约概率,结果出现负值。这显然不合理。换成逻辑回归后,输出自动落在0~1之间,解释起来也顺理成章。
逻辑回归原理:从线性到非线性
逻辑回归的本质其实还是线性模型。它先算出一个线性组合:
z = w₁x₁ + w₂x₂ + ... + wₙxₙ + b
然后把这个z塞进Sigmoid函数,得到概率p。如果p ≥ 0.5,判为正类;否则判为负类。
你想想看,这个决策边界在原始特征空间里其实是一条直线(或超平面)。所以逻辑回归本质上是个线性分类器。那为什么叫“回归”?因为它拟合的是对数几率(log-odds),而不是直接拟合类别标签。
训练时用的损失函数是交叉熵损失,而不是均方误差。为什么?因为均方误差在逻辑回归上会导致梯度消失,模型学不动。我刚开始自己写代码时就用MSE试过,结果训练半天准确率纹丝不动……后来换成交叉熵,几轮迭代就收敛了。
多分类问题:一对多 vs 多项逻辑回归
逻辑回归天生是二分类的。那遇到三分类、五分类怎么办?有两种主流做法。
一对多(One-vs-Rest, OvR):训练K个二分类器,每个分类器负责区分“属于第i类”和“不属于第i类”。预测时,哪个分类器输出的概率最高,就选哪个类别。
多项逻辑回归(Softmax回归):直接用一个模型输出K个概率,这些概率之和为1。Softmax函数就是Sigmoid在多分类上的推广。
| 方法 | 优点 | 缺点 |
|---|---|---|
| 一对多(OvR) | 实现简单,每个二分类器可独立调优 | 类别不平衡时效果差,训练K个模型较慢 |
| Softmax回归 | 概率解释性好,训练一个模型即可 | 类别数太多时计算量大 |
我记得有一次做手写数字识别(10分类),一开始用OvR,结果类别0和类别1的样本数差了好几倍,模型老是偏向多数类。换成Softmax后,问题就解决了。所以我的建议是:类别数不多(比如小于20)且数据相对均衡时,优先用Softmax。
实战:信用评分卡
信用评分卡是逻辑回归在金融领域的经典应用。它的目标是根据用户的个人信息(年龄、收入、负债、历史违约记录等),预测用户未来违约的概率,然后映射成一个分数。
流程大致如下:
- 数据清洗:处理缺失值、异常值。我见过有人直接把缺失值填0,结果模型学出来全是错的。缺失值处理要结合业务含义,比如收入缺失可能意味着无固定工作。
- 特征分箱:把连续变量(如年龄)分成几个区间,每个区间赋予一个WOE(Weight of Evidence)值。这一步能增强模型的稳定性。
- 训练逻辑回归模型:用分箱后的WOE值作为特征,训练二分类模型。
- 生成评分卡:把模型系数转换成整数分数。比如“年龄在30-40岁之间”加20分,“负债率超过50%”减30分。
下面是一个简化的评分卡生成代码示例:
import pandas as pd
import numpy as np
from sklearn.linear_model import LogisticRegression
# 假设已经完成分箱和WOE转换
# X_woe: WOE特征矩阵, y: 是否违约(0/1)
model = LogisticRegression(C=0.1, penalty='l2')
model.fit(X_woe, y)
# 将系数转换为分数
# 基准分: 600, 每增加一个单位的对数几率对应20分
base_score = 600
factor = 20 / np.log(2) # 每翻一倍odds对应20分
# 每个特征的每个分箱对应的分数
for i, col in enumerate(feature_names):
coef = model.coef_[0][i]
for bin_idx, bin_range in enumerate(bins[col]):
score = base_score - factor * (coef * woe_values[col][bin_idx])
print(f"{col} 在区间 {bin_range} 的得分为: {score:.0f}")
实际生产中的评分卡比这复杂得多,还要考虑评分校准、拒绝推断、模型监控等环节。但核心逻辑就是:用逻辑回归把特征映射成概率,再转成可解释的分数。
这份知识体系图把整个流程串起来了:从输入特征开始,经过线性组合、Sigmoid映射得到概率,再到多分类扩展,最后落地到信用评分卡实战。每一步都有对应的数学原理和工程实践。