逻辑回归在银行贷款审批中的应用:参数选择与实践
目录
一、数据背景与预处理
1.数据前五行
2.数据预处理步骤
二、逻辑回归的正则化参数选择
1.交叉验证选择最优C
2.为什么选择召回率作为评估指标?
三、参数选择的核心结论
四、后续优化方向
在银行贷款审批场景中,准确判断贷款人是否符合贷款条件(允许贷款为 0,拒绝贷款为 1)是风险控制的核心环节。本文将以银行贷款数据为例,详解逻辑回归模型的参数选择过程,帮助提升贷款审批的准确性。
一、数据背景与预处理
本次使用的银行贷款数据包含以下关键字段:
- Time:贷款人标识(同一人可能在不同银行有记录)
- Amount:贷款人收入(单位:万元)
- V1-V28:28 个匿名特征(可能包含信用评分、负债情况等)
- Class:贷款审批结果(0 = 允许贷款,1 = 拒绝贷款)
1.数据前五行
"Time","V1","V2","V3","V4","V5","V6","V7","V8","V9","V10","V11","V12","V13","V14","V15","V16","V17","V18","V19","V20","V21","V22","V23","V24","V25","V26","V27","V28","Amount","Class"
0,-1.3598071336738,-0.0727811733098497,2.53634673796914,1.37815522427443,-0.338320769942518,0.462387777762292,0.239598554061257,0.0986979012610507,0.363786969611213,0.0907941719789316,-0.551599533260813,-0.617800855762348,-0.991389847235408,-0.311169353699879,1.46817697209427,-0.470400525259478,0.207971241929242,0.0257905801985591,0.403992960255733,0.251412098239705,-0.018306777944153,0.277837575558899,-0.110473910188767,0.0669280749146731,0.128539358273528,-0.189114843888824,0.133558376740387,-0.0210530534538215,149.62,"0"
0,1.19185711131486,0.26615071205963,0.16648011335321,0.448154078460911,0.0600176492822243,-0.0823608088155687,-0.0788029833323113,0.0851016549148104,-0.255425128109186,-0.166974414004614,1.61272666105479,1.06523531137287,0.48909501589608,-0.143772296441519,0.635558093258208,0.463917041022171,-0.114804663102346,-0.183361270123994,-0.145783041325259,-0.0690831352230203,-0.225775248033138,-0.638671952771851,0.101288021253234,-0.339846475529127,0.167170404418143,0.125894532368176,-0.00898309914322813,0.0147241691924927,2.69,"0"
1,-1.35835406159823,-1.34016307473609,1.77320934263119,0.379779593034328,-0.503198133318193,1.80049938079263,0.791460956450422,0.247675786588991,-1.51465432260583,0.207642865216696,0.624501459424895,0.066083685268831,0.717292731410831,-0.165945922763554,2.34586494901581,-2.89008319444231,1.10996937869599,-0.121359313195888,-2.26185709530414,0.524979725224404,0.247998153469754,0.771679401917229,0.909412262347719,-0.689280956490685,-0.327641833735251,-0.139096571514147,-0.0553527940384261,-0.0597518405929204,378.66,"0"
1,-0.966271711572087,-0.185226008082898,1.79299333957872,-0.863291275036453,-0.0103088796030823,1.24720316752486,0.23760893977178,0.377435874652262,-1.38702406270197,-0.0549519224713749,-0.226487263835401,0.178228225877303,0.507756869957169,-0.28792374549456,-0.631418117709045,-1.0596472454325,-0.684092786345479,1.96577500349538,-1.2326219700892,-0.208037781160366,-0.108300452035545,0.00527359678253453,-0.190320518742841,-1.17557533186321,0.647376034602038,-0.221928844458407,0.0627228487293033,0.0614576285006353,123.5,"0"
2.数据预处理步骤
首先对数据进行标准化和特征筛选(代码来自银行贷款(参数选择).py):
import numpy as np
import pandas as pd
from sklearn.preprocessing import StandardScaler# 读取数据
data = pd.read_csv('creditcard.csv')# 标准化收入特征(消除量纲影响)
scaler = StandardScaler()
data['Amount'] = scaler.fit_transform(data[['Amount']])# 移除重复标识特征(Time为贷款人在不同银行的记录,对审批结果无直接影响)
data = data.drop(['Time'], axis=1)# 划分特征与标签
X = data.iloc[:, :-1] # 所有特征(含V1-V28和标准化后的Amount)
y = data['Class'] # 审批结果(0/1)
预处理的核心目的是:
- 标准化连续特征(如收入),避免因数值范围差异影响模型权重
- 剔除无关特征(如 Time),减少噪声干扰
二、逻辑回归的正则化参数选择
逻辑回归中,正则化参数C
是控制模型复杂度的关键。C
值越小,正则化强度越高,可有效防止过拟合(过度拟合训练数据中的噪声)。
1.交叉验证选择最优C
通过 8 折交叉验证,在不同C
值下评估模型的召回率(重点关注拒绝贷款的识别能力):
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split, cross_val_score# 划分训练集(70%)和测试集(30%)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=1000 # 固定随机种子,保证结果可复现
)# 候选参数范围
c_param_range = [0.01, 0.1, 1, 10, 100]
scores = []# 遍历参数并评估
for c in c_param_range:# 初始化模型(L2正则化, solver选择lbfgs)clf = LogisticRegression(C=c, # 正则化参数penalty='l2', # L2正则化(防止系数过大)solver='lbfgs', # 优化算法max_iter=1000 # 增加迭代次数确保收敛)# 交叉验证计算召回率(关注拒绝贷款的识别能力)recall_scores = cross_val_score(clf, X_train, y_train, cv=8, scoring='recall')mean_recall = recall_scores.mean() # 平均召回率scores.append(mean_recall)print(f"C={c}时,平均召回率:{mean_recall:.4f}")# 选择最优参数(召回率最高对应的C)
best_c = c_param_range[np.argmax(scores)]
print(f"\n最优惩罚因子为:{best_c}")
2.为什么选择召回率作为评估指标?
在贷款审批中:
- 召回率(针对 Class=1)= 正确拒绝的贷款申请 / 实际应拒绝的贷款申请
- 高召回率可减少 "误批" 风险(将本应拒绝的申请误判为允许),降低银行坏账率
三、参数选择的核心结论
-
C
值与模型的关系:- 过小的
C
(如 0.01)会导致模型欠拟合(过度简化,识别能力不足) - 过大的
C
(如 100)可能导致过拟合(过度关注训练数据细节,泛化能力差)
- 过小的
-
业务导向的参数选择:
银行需在 "审批效率" 和 "风险控制" 间平衡:- 若侧重风险控制(减少坏账),应选择召回率更高的
C
值 - 若侧重用户体验(减少误拒),可适当降低对召回率的要求
- 若侧重风险控制(减少坏账),应选择召回率更高的
四、后续优化方向
-
结合采样技术:对于不平衡数据(如拒绝贷款的样本占比低),可采用上采样(SMOTE)或下采样平衡数据分布(参考银行贷款2(下采样).py和银行贷款3(过采样).py)。
-
阈值调整:逻辑回归默认以 0.5 为分类阈值,可通过调整阈值进一步优化召回率(如降低阈值使模型更倾向于拒绝高风险申请)。
-
特征工程:深入分析 V1-V28 等匿名特征与贷款审批的关联性,筛选更具预测力的特征。
通过科学的参数选择和优化,逻辑回归模型可为银行贷款审批提供可靠的决策支持,在控制风险的同时提高审批效率。