Kaggle信贷预测随笔二

本文探讨了信贷模型构建过程中特征处理的重要性,包括特征分箱、交叉变量挖掘、变量筛选及归一化等步骤,并介绍了如何通过逻辑回归模型进行调参以优化预测效果。

继续特征处理环节

特征转化有分箱和挖掘交叉变量。有些特征变量和目标变量不是典型线性关系,经过分箱,这些特征变量可以提供更高的信息值。比如月收入额和授信额度等金额特征变量在分箱后与目标变量的互信息得到显著提升;为了提升预测的稳定性,当有些变量值覆盖样本数很少(不足总样本数的5%),也常常将这些变量值与信息增量相邻的变量值一起分箱;

图中的工作职位清单中,可以看到HR等职位在样本中的占比很低,如果直接放入模型训练,会导致预测效果的过度拟合。

除了考虑样本预测能力,分箱也需提供合理的可解释性,金融业有比较稳定的分类标准。对于行业,分为稳定型,资质型,工业型和临时型。稳定型指就业稳定且低风险的行业,包括政府,金融机构和教育机构;资质型指低风险行业,需要一定资质或高技术水平,包括IT,法律,医药和工程类;工业型指中等风险,技术水平不高,就业比较稳定,包括大部分工业,自然资源和进出口行业;临时型指高风险,就业无保障,包括体育娱乐,餐饮酒店,销售和安保建筑。这里的分类参考来自安德森的《信用评分工具》,在本案例中,应用这些标签上一定程度上降低了模型的预测能力,但真实的信贷产品需要在现实可解释性和预测能力间找到平衡。

交叉变量需要深入到场景中分析尝试,比如案例提供了多项和收入相关的特征,学历,职位,就职单位。一般来说学历高申请者有较高履约能力,稳定的就职单位可以支撑更高的履约能力,笔者尝试将学历与就职单位组合,衍生出交叉变量"单位_学历",对预测违约有更显著效果。交叉变量需要经过分析,设想,验证三个阶段,要发掘到有效的交叉变量就需要一遍遍的实验尝试。

在进入模型计算调参环节前,还需要对变量进一步处理,包括生成哑语元变量,筛除共线性变量,筛除常量变量(方差特别低的变量)以及变量归一化。

生成哑元变量在将枚举变量值或分箱后的变量值映射为独立的二元变量后,要记得手动去除一个二元变量,以避免共线性;筛除共线性变量实际是将线性相关度较高的变量去除掉,比如房产信息中,存在大量的相关信息,筛除相关性较高的变量可以有效提高预测能力。可以设置删除相关性高于0.7的相似特征变量。

变量的归一化在应用L2范式来约束参数的模型中很重要,笔者采用了行业内主流的逻辑回归信贷建模方案,高斯归一化处理相比0~1归一等其他方法有更好的预测效果。

模型选择和调参,千锤百炼

笔者选用适合信贷产品的主流逻辑回归模型,整个调参过程要针对不同的阈值和超参,反复多次的试验,观察测试集的预测结果变动。试验时按照不同特征处理阈值和超参的排列组合有序进行,同时结合人工分析,逐步探索合理结果。为避免采样导致的过拟合,可以采用交叉验证的方法。整个调参就是不停的重复,一次次的满怀期待的等训练结果。

特征自动分箱数

互信息阈值

线性相关阈值

规则化参数

训练样本占比

训练特征变量数

训练集auc

测试集auc

10

0.001

0.6

0.01

10%

35

0.7452

0.7391

 

后继将写些 历史记录处理(申请和还款)和分析系统的构建。

### 大数据信贷违约预测的方法与模型 大数据技术在信贷违约预测中的应用主要依赖于机器学习和深度学习模型,结合特征工程、模型调优以及大规模数据处理框架。以下详细介绍相关方法与模型: #### 1. 数据预处理 在进行信贷违约预测时,数据预处理是一个关键步骤。对于高维类别特征,可以使用 `LabelEncoder` 进行编码[^5]。例如: ```python from sklearn.preprocessing import LabelEncoder for col in ['employmentTitle', 'postCode', 'title', 'subGrade']: le = LabelEncoder() le.fit(list(train[col].astype(str).values) + list(testA[col].astype(str).values)) train[col] = le.transform(list(train[col].astype(str).values)) testA[col] = le.transform(list(testA[col].astype(str).values)) ``` 此外,对数值型特征进行归一化处理可以提高模型的收敛速度和性能[^5]。示例如下: ```python import numpy as np for fea in ['feature1', 'feature2', 'feature3']: train[fea] = (train[fea] - np.min(train[fea])) / (np.max(train[fea]) - np.min(train[fea])) testA[fea] = (testA[fea] - np.min(testA[fea])) / (np.max(testA[fea]) - np.min(testA[fea])) ``` #### 2. 特征选择 为了降低模型复杂度并提升预测准确性,需要进行特征选择。常见的特征选择方法包括: - **Filter 方法**:基于统计指标(如方差、相关系数、卡方检验等)筛选特征。 - **Wrapper 方法**:递归特征消除法(RFE),通过递归地移除最不重要的特征来优化模型性能[^5]。 - **Embedded 方法**:结合模型训练过程中的惩罚项(如 L1 正则化)或树模型的重要性评分进行特征选择。 #### 3. 模型选择 传统的统计方法(如线性回归)在捕捉非线性关系和复杂特征交互方面存在局限性[^2]。因此,现代信贷违约预测通常采用以下几种模型: - **逻辑回归(Logistic Regression)**:适用于线性可分问题,但需要对特征进行归一化处理以提高模型性能[^5]。 - **梯度提升决策树(Gradient Boosting Decision Tree, GBDT)**:能够有效捕捉非线性关系和特征交互,是目前广泛使用的模型之一[^3]。 - **LightGBM/XGBoost/CatBoost**:这些基于树的模型在处理大规模数据集时表现出色,并且支持内置的特征重要性评估功能。 - **深度学习模型**:对于非常复杂的非线性关系,可以尝试使用神经网络(如 MLP 或 LSTM)进行建模[^4]。 #### 4. 模型评估 模型的性能可以通过绘制 ROC 曲线和计算 AUC 值来评估。例如: ```python from sklearn.metrics import roc_curve, auc fpr, tpr, thresholds = roc_curve(y_true, y_pred_prob) roc_auc = auc(fpr, tpr) import matplotlib.pyplot as plt plt.figure() plt.plot(fpr, tpr, color='darkorange', lw=2, label='ROC curve (area = %0.4f)' % roc_auc) plt.plot([0, 1], [0, 1], color='navy', lw=2, linestyle='--') plt.xlim([0.0, 1.0]) plt.ylim([0.0, 1.05]) plt.xlabel('False Positive Rate') plt.ylabel('True Positive Rate') plt.title('Receiver Operating Characteristic') plt.legend(loc="lower right") plt.show() ``` 一个接近左上角的 ROC 曲线表明模型具有较强的排序能力[^1]。 #### 5. 模型保存与部署 完成模型训练后,可以使用 `pickle` 将模型保存到本地文件中以便后续部署[^3]: ```python import pickle pickle.dump(final_model_lgb, open('dataset/model_lgb_best.pkl', 'wb')) ``` ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值