最近我们被客户要求撰写关于信贷风控模型的研究报告,包括一些图形和统计输出。
在此数据集中,我们必须预测信贷的违约支付,并找出哪些变量是违约支付的最强预测因子?以及不同人口统计学变量的类别,拖欠还款的概率如何变化?
有25个变量:
现在,我们知道了数据集的整体结构。因此,让我们应用在应用机器学习模型时通常应该执行的一些步骤。
import numpy as np
import matplotlib.pyplot as plt
所有写入当前目录的结果都保存为输出。
dataset = pd.read_csv('Card.csv')
现在让我们看看数据是什么样的
dataset.shape
(30000, 25)
意味着有30,000条目包含25列
从上面的输出中可以明显看出,任何列中都没有对象类型不匹配。
#检查数据中Null项的数量,按列计算。
dataset.isnull().sum()
# 按性别检查违约者和非违约者的计数数量
sns.countplot
从上面的输出中可以明显看出,与男性相比,女性的整体拖欠付款更少
可以明显看出,那些拥有婚姻状况的人的已婚状态人的默认拖欠付款较少。
sns.pairplot
sns.jointplot
g.map(plt.hist,'AGE')
dataset['LIMIT_BAL'].plot.density
X.corrwith
从上图可以看出,最负相关的特征是LIMIT_BAL,但我们不能盲目地删除此特征,因为根据我的看法,这对预测非常重要。ID无关紧要,并且在预测中没有任何作用,因此我们稍后将其删除。
# 绘制热图
sns.heatmap(corr)
PYTHON用户流失数据挖掘:建立逻辑回归、XGBOOST、随机森林、决策树、支持向量机、朴素贝叶斯和KMEANS聚类用户画像
01
02
03
04
训练数据集和测试数据集必须相似,通常具有相同的预测变量或变量。它们在变量的观察值和特定值上有所不同。如果将模型拟合到训练数据集上,则将隐式地最小化误差。拟合模型为训练数据集提供了良好的预测。然后,您可以在测试数据集上测试模型。如果模型在测试数据集上也预测良好,则您将更有信心。因为测试数据集与训练数据集相似,但模型既不相同也不相同。这意味着该模型在真实意义上转移了预测或学习。
因此,通过将数据集划分为训练和测试子集,我们可以有效地测量训练后的模型,因为它以前从未看到过测试数据,因此可以防止过度拟合。
我只是将数据集拆分为20%的测试数据,其余80%将用于训练模型。
train_test_split(X, y, test_size = 0.2, random_state = 0)
对于许多机器学习算法而言,通过标准化(或Z分数标准化)进行特征标准化可能是重要的预处理步骤。
许多算法(例如SVM,K近邻算法和逻辑回归)都需要对特征进行规范化,
min_test = X_test.min()
range_test = (X_test - min_test).max()
X_test_scaled = (X_test - min_test)/range_test
from sklearn.ensemble import AdaBoostClassifier
adaboost =AdaBoostClassifier()
xgb_classifier.fit(X_train_scaled, y_train,verbose=True)
end=time()
train_time_xgb=end-start
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)
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。
在每个迭代次数上,随机搜索的性能均优于网格搜索。同样,随机搜索似乎比网格搜索更快地收敛到最佳状态,这意味着迭代次数更少的随机搜索与迭代次数更多的网格搜索相当。
在高维参数空间中,由于点变得更稀疏,因此在相同的迭代中,网格搜索的性能会下降。同样常见的是,超参数之一对于找到最佳超参数并不重要,在这种情况下,网格搜索浪费了很多迭代,而随机搜索却没有浪费任何迭代。
现在,我们将使用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预测信贷违约支付 》 。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。