全文链接: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 npimport 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 AdaBoostClassifieradaboost =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)回归树检测异样值