银行信贷案例之梯度下降法
1 课程概览
本课通过银行信贷案例讲解梯度下降法的实际应用。介绍银行风控系统考虑的因素(姓名、薪资、存款余额、房产面积),讲解如何用梯度下降法计算每个样本产生的梯度,求解线性回归模型。详细梳理梯度下降的思路和步骤。
2 核心概念与定义
- 银行信贷:银行根据个人信息决定贷款额度。
- 风控系统:每家银行自己的额度控制系统。
- 梯度下降法:计算每个样本产生的梯度,求解线性回归模型。
- 梯度方向:负导数方向。
3 算法与模型详解
3.1 银行信贷考虑因素
| 因素 | 说明 |
|---|---|
| 姓名 | 是否在银行黑户(如张三在A银行黑户,B银行也贷不出) |
| 薪资 | 月薪决定还款能力 |
| 存款余额 | 存款越多,额度越高 |
| 房产面积 | 面积越大、地段越值钱,额度越高 |
3.2 小平台风控策略
问题:小平台雇不起架构师,如何搭建风控系统?
策略:
- 拿用户数据去四大行爬数据
- 看用户在四大行的额度
- 给比四大行最高额度再高一点的额度
- 吸引用户来办理
3.3 案例目标
目标:计算数据样本产生的梯度,求解线性回归模型
数据:8位贷款人的数据
特征:
- 月薪
- 存款余额
- 房产面积
3.4 梯度下降公式回顾
$$\theta_{i+1} = \theta_i - \alpha \cdot \frac{\partial L}{\partial \theta}$$
说明:
- $\theta_{i+1}$:下个点(更新后的参数)
- $\theta_i$:当前点(当前参数)
- $\alpha$:学习率
- $\frac{\partial L}{\partial \theta}$:损失函数的梯度
3.5 损失函数分类回顾
| 损失函数 | 公式 | 说明 |
|---|---|---|
| 最小二乘 | $\sum (\hat{y}_i - y_i)^2$ | 误差平方和 |
| MSE | $\frac{1}{n}\sum (\hat{y}_i - y_i)^2$ | 均方误差 |
| MAE | $\frac{1}{n}\sum | \hat{y}_i - y_i |
3.6 梯度下降步骤
步骤:
- 确定损失函数
- 确定学习率α
- 确定当前点(初始参数)
- 计算梯度(损失函数的偏导数)
- 更新参数:$\theta_{i+1} = \theta_i - \alpha \cdot \text{梯度}$
- 重复步骤4-5,直到收敛
3.7 关键问题
核心:如何表示损失函数?
说明:
- 学习率:可以自己假设一个值
- 当前点:每个样本都是一个当前点
- 损失函数:需要根据实际问题确定
4 数学原理与推导
4.1 线性回归模型
$$h_\theta(X) = \theta_0 + \theta_1 X_1 + \theta_2 X_2 + \theta_3 X_3$$
其中:
- $X_1$:月薪
- $X_2$:存款余额
- $X_3$:房产面积
4.2 损失函数
$$J(\theta) = \frac{1}{2m}\sum_{i=1}^{m} (h_\theta(X_i) - Y_i)^2$$
4.3 梯度
$$\frac{\partial J}{\partial \theta_j} = \frac{1}{m}\sum_{i=1}^{m} (h_\theta(X_i) - Y_i) \cdot X_{ij}$$
4.4 参数更新
$$\theta_j = \theta_j - \alpha \cdot \frac{1}{m}\sum_{i=1}^{m} (h_\theta(X_i) - Y_i) \cdot X_{ij}$$
5 代码示例
import numpy as np
# 银行信贷数据(8个样本,3个特征)
# 特征:月薪、存款余额、房产面积
X = np.array([
[8000, 50000, 120],
[6000, 30000, 90],
[10000, 100000, 150],
[5000, 20000, 80],
[12000, 200000, 200],
[7000, 40000, 100],
[9000, 80000, 130],
[8500, 60000, 110]
])
# 真实值(贷款额度,单位:万元)
Y = np.array([50, 30, 80, 20, 120, 40, 70, 55])
# 特征标准化
X_mean = np.mean(X, axis=0)
X_std = np.std(X, axis=0)
X_normalized = (X - X_mean) / X_std
# 添加偏置列(X0=1)
X_b = np.c_[np.ones((len(X), 1)), X_normalized]
# 初始化参数
theta = np.zeros(X_b.shape[1]) # 初始为0
alpha = 0.01 # 学习率
iterations = 1000 # 迭代次数
m = len(Y) # 样本数
# 梯度下降
for i in range(iterations):
# 计算预测值
predictions = X_b.dot(theta)
# 计算误差
errors = predictions - Y
# 计算梯度
gradient = (1/m) * X_b.T.dot(errors)
# 更新参数
theta = theta - alpha * gradient
# 计算损失
loss = (1/(2*m)) * np.sum(errors**2)
if i % 100 == 0:
print(f"迭代 {i}: 损失 = {loss:.4f}, theta = {theta}")
print(f"\n最终参数: theta = {theta}")
# 预测
X_test = np.array([[9000, 70000, 120]])
X_test_normalized = (X_test - X_mean) / X_std
X_test_b = np.c_[np.ones((1, 1)), X_test_normalized]
y_predict = X_test_b.dot(theta)
print(f"预测贷款额度: {y_predict[0]:.2f} 万元")
6 重难点与易错提醒
- ❗重点:梯度下降公式:$\theta_{i+1} = \theta_i - \alpha \cdot \text{梯度}$
- ❗重点:损失函数的选择(最小二乘、MSE、MAE)。
- ❗重点:特征标准化(避免量纲影响)。
- ❗重点:添加偏置列X0=1。
- ⚠️易错:忘记特征标准化导致梯度下降不收敛。
- ⚠️易错:学习率设置不当。
- 💡深入理解:梯度下降是迭代优化,需要多次更新参数。
7 课堂问答精选
Q: 小平台如何搭建风控系统?
A: 小平台可以拿用户数据去四大行爬数据,看用户在四大行的额度,然后给比四大行最高额度再高一点的额度,吸引用户来办理。
Q: 梯度下降法的核心是什么?
A: 核心是确定损失函数。只要能表示出损失函数,就可以计算梯度,然后更新参数。学习率可以自己假设,当前点是每个样本的值,损失函数需要根据实际问题确定。
8 本课小结
- 银行信贷考虑因素:姓名、薪资、存款余额、房产面积。
- 梯度下降公式:$\theta_{i+1} = \theta_i - \alpha \cdot \text{梯度}$
- 损失函数:最小二乘、MSE、MAE。
- 步骤:确定损失函数 → 确定学习率 → 确定当前点 → 计算梯度 → 更新参数。
- 核心:表示损失函数。
9 延伸思考与实践
- 实践:用Python实现银行信贷梯度下降。
- 预习:梯度下降算法分类。
- 思考:为什么需要特征标准化?