共计 5597 个字符,预计需要花费 14 分钟才能阅读完成。
全文链接:http://tecdat.cn/?p=26184
最近咱们被客户要求撰写对于信贷风控模型的钻研报告,包含一些图形和统计输入。
在此数据集中,咱们必须预测信贷的守约领取,并找出哪些变量是守约领取的最强预测因子?以及不同人口统计学变量的类别,拖欠还款的概率如何变动?
有 25 个变量:
- ID:每个客户的 ID
- LIMIT\_BAL:金额
- SEX:性别(1 = 男,2 = 女)\
4. 教育水平:(1 = 研究生,2 = 本科,3 = 高中,4 = 其余,5 = 未知)\
5. 婚姻:婚姻状况(1 = 已婚,2 = 独身,3 = 其余)\
6. 年龄:\
7. PAY\_0:2005 年 9 月的还款状态(-1 = 失常付款,1 = 提早一个月的付款,2 = 提早两个月的付款,8 = 提早八个月的付款,9 = 提早 9 个月以上的付款) - PAY\_2:2005 年 8 月的还款状态(与上述雷同)
- PAY\_3:2005 年 7 月的还款状态(与上述雷同)
- PAY\_4:2005 年 6 月的还款状态(与上述雷同)
- PAY\_5:2005 年 5 月的还款状态(与上述雷同)
- PAY\_6:还款状态 2005 年 4 月 的账单(与上述雷同)
- BILL\_AMT1:2005 年 9 月的账单金额
- BILL\_AMT2:2005 年 8 月的账单金额
- BILL\_AMT3:账单金额 2005 年 7 月 的账单金额
- BILL\_AMT4:2005 年 6 月的账单金额
- BILL\_AMT5:2005 年 5 月的账单金额
- BILL\_AMT6:2005 年 4 月
- PAY\_AMT1 2005 年 9 月,先前领取金额
- PAY\_AMT2 2005 年 8 月,以前领取的金额
- PAY\_AMT3:2005 年 7 月的先前付款
- PAY\_AMT4:2005 年 6 月的先前付款
- PAY\_AMT5:2005 年 5 月的先前付款
- PAY\_AMT6:先前的付款额在 2005 年 4 月
- default.payment.next.month:默认付款(1 = 是,0 = 否)
当初,咱们晓得了数据集的整体构造。因而,让咱们利用在利用机器学习模型时通常应该执行的一些步骤。
第 1 步:导入
import numpy as np
import matplotlib.pyplot as plt
所有写入当前目录的后果都保留为输入。
dataset = pd.read_csv('Card.csv')
当初让咱们看看数据是什么样的
第 2 步:数据预处理和清理
dataset.shape
<!—->
(30000, 25)
意味着有 30,000 条目蕴含 25 列
从下面的输入中能够显著看出,任何列中都没有对象类型不匹配。
# 检查数据中 Null 项的数量,按列计算。dataset.isnull().sum()
步骤 3. 数据可视化和探索性数据分析
# 按性别查看守约者和非守约者的计数数量
sns.countplot
从下面的输入中能够显著看出,与男性相比,女性的整体拖欠付款更少
能够显著看出,那些领有婚姻状况的人的已婚状态人的默认拖欠付款较少。
sns.pairplot
sns.jointplot
男女按年龄散布
g.map(plt.hist,'AGE')
dataset['LIMIT_BAL'].plot.density
步骤 4. 找到相关性
X.corrwith
从上图能够看出,最负相关的特色是 LIMIT\_BAL,但咱们不能自觉地删除此特色,因为依据我的认识,这对预测十分重要。ID 无关紧要,并且在预测中没有任何作用,因而咱们稍后将其删除。
# 绘制热图
sns.heatmap(corr)
点击题目查阅往期内容
PYTHON 用户散失数据挖掘:建设逻辑回归、XGBOOST、随机森林、决策树、反对向量机、奢侈贝叶斯和 KMEANS 聚类用户画像
左右滑动查看更多
01
02
03
04
步骤 5:将数据宰割为训练和测试集
训练数据集和测试数据集必须类似,通常具备雷同的预测变量或变量。它们在变量的察看值和特定值上有所不同。如果将模型拟合到训练数据集上,则将隐式地最小化误差。拟合模型为训练数据集提供了良好的预测。而后,您能够在测试数据集上测试模型。如果模型在测试数据集上也预测良好,则您将更有信念。因为测试数据集与训练数据集类似,但模型既不雷同也不雷同。这意味着该模型在实在意义上转移了预测或学习。
因而,通过将数据集划分为训练和测试子集,咱们能够无效地测量训练后的模型,因为它以前从未看到过测试数据,因而能够避免适度拟合。
我只是将数据集拆分为 20%的测试数据,其余 80%将用于训练模型。
train_test_split(X, y, test_size = 0.2, random_state = 0)
步骤 6:规范化数据:特色标准化
对于许多机器学习算法而言,通过标准化(或 Z 分数标准化)进行特色标准化可能是重要的预处理步骤。
许多算法(例如 SVM,K 近邻算法和逻辑回归)都须要对特色进行规范化,
min_test = X_test.min()
range_test = (X_test - min_test).max()
X_test_scaled = (X_test - min_test)/range_test
步骤 7:利用机器学习模型
from sklearn.ensemble import AdaBoostClassifier
adaboost =AdaBoostClassifier()
xgb_classifier.fit(X_train_scaled, y_train,verbose=True)
end=time()
train_time_xgb=end-start
利用具备 100 棵树和规范熵的随机森林
classifier = RandomForestClassifier(random_state = 47,
criterion = 'entropy',n_estimators=100)
svc_model = SVC(kernel='rbf', gamma=0.1,C=100)
knn = KNeighborsClassifier(n_neighbors = 7)
步骤 8:剖析和比拟机器学习模型的训练工夫
Train_Time = [
train_time_ada,
train_time_xgb,
train_time_sgd,
train_time_svc,
train_time_g,
train_time_r100,
train_time_knn
]
从上图能够显著看出,与其余模型相比,Adaboost 和 XGboost 破费的工夫少得多,而其余模型因为 SVC 破费了最多的工夫,起因可能是咱们曾经将一些要害参数传递给了 SVC。
步骤 9. 模型优化
在每个迭代次数上,随机搜寻的性能均优于网格搜寻。同样,随机搜寻仿佛比网格搜寻更快地收敛到最佳状态,这意味着迭代次数更少的随机搜寻与迭代次数更多的网格搜寻相当。
在高维参数空间中,因为点变得更稠密,因而在雷同的迭代中,网格搜寻的性能会降落。同样常见的是,超参数之一对于找到最佳超参数并不重要,在这种状况下,网格搜寻节约了很多迭代,而随机搜寻却没有节约任何迭代。
当初,咱们将应用 Randomsearch cv 优化模型准确性。如上表所示,Adaboost 在该数据集中体现最佳。因而,咱们将尝试通过微调 adaboost 和 SVC 的超参数来进一步优化它们。
参数调整
当初,让咱们看看 adaboost 的最佳参数是什么
random_search.best_params_
<!—->
{'random_state': 47, 'n_estimators': 50, 'learning_rate': 0.01}
random_search.best_params_
<!—->
{'n_estimators': 50, 'min_child_weight': 4, 'max_depth': 3}
random_search.best_params_
<!—->
{'penalty': 'l2', 'n_jobs': -1, 'n_iter': 1000, 'loss': 'log', 'alpha': 0.0001}
杰出的所有指标参数准确性,F1 分数精度,ROC,三个模型 adaboost,XGBoost 和 SGD 的召回率现已优化。此外,咱们还能够尝试应用其余参数组合来查看是否会有进一步的改良。
ROC 曲线图
auc = metrics.roc_auc_score(y_test,model.predict(X_test_scaled))
plt.plot([0, 1], [0, 1],'r--')
# 计算测试集分数的平均值和标准差
test_mean = np.mean
# 绘制训练集和测试集的均匀准确度得分
plt.plot
# 绘制训练集和测试集的准确度。plt.fill_between
验证曲线的解释
如果树的数量在 10 左右,则该模型存在高偏差。两个分数十分靠近,然而两个分数都离可承受的程度太远,因而我认为这是一个高度偏见的问题。换句话说,该模型不适宜。
在最大树数为 250 的状况下,因为训练得分为 0.82 但验证得分约为 0.81,因而模型存在高方差。换句话说,模型适度拟合。同样,数据点显示出一种柔美的曲线。然而,咱们的模型应用非常复杂的曲线来尽可能靠近每个数据点。因而,具备高方差的模型具备非常低的偏差,因为它简直没有假如数据。实际上,它对数据的适应性太大。
从曲线中能够看出,大概 30 到 40 的最大树能够最好地概括看不见的数据。随着最大树的减少,偏差变小,方差变大。咱们应该放弃两者之间的均衡。在 30 到 40 棵树的数量之后,训练得分就开始回升,而验证得分开始降落,因而我开始蒙受适度拟合的困扰。因而,这是为什么 30 至 40 之间的任何数量的树都是一个不错的抉择的起因。
论断
因而,咱们曾经看到,调整后的 Adaboost 的准确性约为 82.95%,并且在所有其余性能指标(例如 F1 分数,Precision,ROC 和 Recall)中也获得了不错的问题。
此外,咱们还能够通过应用 Randomsearch 或 Gridsearch 进行模型优化,以找到适合的参数以进步模型的准确性。
我认为,如果对这三个模型进行了适当的调整,它们的性能都会更好。
本文摘选 《 Python 信贷风控模型:Adaboost,XGBoost,SGD, GBOOST, SVC, 随机森林, KNN 预测信贷守约领取 》,点击“ 浏览原文”获取全文残缺材料。
点击题目查阅往期内容
Python 进行多输入(多因变量)回归:集成学习梯度晋升决策树 GRADIENT BOOSTING,GBR 回归训练和预测可视化 \
Python 对商店数据进行 lstm 和 xgboost 销售量工夫序列建模预测剖析 \
PYTHON 集成机器学习:用 ADABOOST、决策树、逻辑回归集成模型分类和回归和网格搜寻超参数优化 \
R 语言集成模型:晋升树 boosting、随机森林、束缚最小二乘法加权均匀模型交融剖析工夫序列数据 \
Python 对商店数据进行 lstm 和 xgboost 销售量工夫序列建模预测剖析 \
R 语言用主成分 PCA、逻辑回归、决策树、随机森林剖析心脏病数据并高维可视化 \
R 语言基于树的办法:决策树,随机森林,Bagging,加强树 \
R 语言用逻辑回归、决策树和随机森林对信贷数据集进行分类预测 \
spss modeler 用决策树神经网络预测 ST 的股票 \
R 语言中应用线性模型、回归决策树主动组合特色因子程度 \
R 语言中自编基尼系数的 CART 回归决策树的实现 \
R 语言用 rle,svm 和 rpart 决策树进行工夫序列预测 \
python 在 Scikit-learn 中用决策树和随机森林预测 NBA 获胜者 \
python 中应用 scikit-learn 和 pandas 决策树进行 iris 鸢尾花数据分类建模和穿插验证 \
R 语言里的非线性模型:多项式回归、部分样条、平滑样条、狭义相加模型 GAM 剖析 \
R 语言用规范最小二乘 OLS,狭义相加模型 GAM,样条函数进行逻辑回归 LOGISTIC 分类 \
R 语言 ISLR 工资数据进行多项式回归和样条回归剖析 \
R 语言中的多项式回归、部分回归、核平滑和平滑样条回归模型 \
R 语言用泊松 Poisson 回归、GAM 样条曲线模型预测骑自行车者的数量 \
R 语言分位数回归、GAM 样条曲线、指数平滑和 SARIMA 对电力负荷工夫序列预测 R 语言样条曲线、决策树、Adaboost、梯度晋升 (GBM) 算法进行回归、分类和动静可视化 \
如何用 R 语言在机器学习中建设集成模型?\
R 语言 ARMA-EGARCH 模型、集成预测算法对 SPX 理论稳定率进行预测在 python 深度学习 Keras 中计算神经网络集成模型 R 语言 ARIMA 集成模型预测工夫序列剖析 R 语言基于 Bagging 分类的逻辑回归 (Logistic Regression)、决策树、森林剖析心脏病患者 \
R 语言基于树的办法:决策树,随机森林,Bagging,加强树 \
R 语言基于 Bootstrap 的线性回归预测置信区间预计办法 \
R 语言应用 bootstrap 和增量法计算狭义线性模型(GLM)预测置信区间 \
R 语言样条曲线、决策树、Adaboost、梯度晋升(GBM) 算法进行回归、分类和动静可视化 \
Python 对商店数据进行 lstm 和 xgboost 销售量工夫序列建模预测剖析 \
R 语言随机森林 RandomForest、逻辑回归 Logisitc 预测心脏病数据和可视化剖析 \
R 语言用主成分 PCA、逻辑回归、决策树、随机森林剖析心脏病数据并高维可视化 \
Matlab 建设 SVM,KNN 和奢侈贝叶斯模型分类绘制 ROC 曲线 \
matlab 应用分位数随机森林(QRF)回归树检测异样值