(10-2-05)贷款预测模型

10.2.5  制作模型

(1)Logistic Regression (逻辑回归)模型

训练 Logistic Regression (逻辑回归)模型,并评估其性能。在模型的性能报告中包括准确率以及其他分类指标,以帮助我们了解模型在测试数据上的表现。具体实现代码如下所示。

LRclassifier = LogisticRegression(solver='saga', max_iter=500, random_state=1)
LRclassifier.fit(X_train, y_train)

y_pred = LRclassifier.predict(X_test)

print(classification_report(y_test, y_pred))
print(confusion_matrix(y_test, y_pred))

from sklearn.metrics import accuracy_score
LRAcc = accuracy_score(y_pred,y_test)
print('LR accuracy: {:.2f}%'.format(LRAcc*100))

对上述代码的具体说明如下:

  1. 创建分类器 LRclassifier,使用 LogisticRegression 函数创建一个 Logistic Regression 分类器。solver 参数设置为 'saga',这是 Logistic Regression 的优化算法之一。max_iter 参数设置为 500,表示算法运行的最大迭代次数。将random_state 参数设置为 1,以确保结果的可重现性。
  2. 使用训练集 (X_train 和 y_train) 对 LRclassifier 进行训练:fit 方法用于训练模型,其中 X_train 是训练集的特征矩阵,y_train 是训练集的目标变量。
  3. 使用训练好的模型 LRclassifier 对测试集 (X_test) 进行预测:predict 方法用于生成对测试集的分类预测,结果存储在 y_pred 中。
  4. 使用classification_report 函数生成分类报告,其中包括精确度、召回率、F1 分数等指标。这个报告基于测试集的真实标签 (y_test) 和模型的预测 (y_pred)。
  5. 使用confusion_matrix 生成混淆矩阵,展示模型的真正例、假正例、真反例和假反例数量。
  6. 使用 accuracy_score 函数计算模型的准确率,即正确分类的样本数量占总样本数量的比例。
  7. 最后,以百分比形式打印输出这个模型的准确率。

执行会输出:

              precision    recall  f1-score   support

           0       0.83      0.87      0.85        23
           1       0.86      0.82      0.84        22

    accuracy                           0.84        45
   macro avg       0.85      0.84      0.84        45
weighted avg       0.84      0.84      0.84        45

[[20  3]
 [ 4 18]]
LR accuracy: 84.44%

(2)K-Nearest Neighbour (KNN)模型

通过 K-Nearest Neighbors (KNN) 分类器,针对不同的 k 值,评估模型的准确率。具体实现代码如下所示。

scoreListknn = []
for i in range(1,21):
    KNclassifier = KNeighborsClassifier(n_neighbors = i)
    KNclassifier.fit(X_train, y_train)
    scoreListknn.append(KNclassifier.score(X_test, y_test))
    
plt.plot(range(1,21), scoreListknn)
plt.xticks(np.arange(1,21,1))
plt.xlabel("K value")
plt.ylabel("Score")
plt.show()
KNAcc = max(scoreListknn)
print("KNN best accuracy: {:.2f}%".format(KNAcc*100))

执行后输出:

KNN best accuracy: 91.11%

(3)Support Vector Machine (SVM)模型

使用支持向量机 (Support Vector Machine, SVM) 分类器,采用径向基核函数(RBF kernel)来训练模型,并对测试数据进行预测。具体实现代码如下所示。

SVCclassifier = SVC(kernel='rbf', max_iter=500)
SVCclassifier.fit(X_train, y_train)

y_pred = SVCclassifier.predict(X_test)

print(classification_report(y_test, y_pred))
print(confusion_matrix(y_test, y_pred))

from sklearn.metrics import accuracy_score
SVCAcc = accuracy_score(y_pred,y_test)
print('SVC accuracy: {:.2f}%'.format(SVCAcc*100))

执行后输出:

              precision    recall  f1-score   support

           0       0.87      0.87      0.87        23
           1       0.86      0.86      0.86        22

    accuracy                           0.87        45
   macro avg       0.87      0.87      0.87        45
weighted avg       0.87      0.87      0.87        45

[[20  3]
 [ 3 19]]
SVC accuracy: 86.67%

(4)贝叶斯模型

首先,创建一个名为 NBclassifier1 的分类朴素贝叶斯分类器 (CategoricalNB),使用分类朴素贝叶斯分类器 (Categorical Naive Bayes) 来训练模型,并对测试数据进行预测。具体实现代码如下所示。

              precision    recall  f1-score   support

           0       0.81      0.74      0.77        23
           1       0.75      0.82      0.78        22

    accuracy                           0.78        45
   macro avg       0.78      0.78      0.78        45
weighted avg       0.78      0.78      0.78        45

[[17  6]
 [ 4 18]]
Categorical Naive Bayes accuracy: 77.78%

执行后输出:

              precision    recall  f1-score   support

           0       0.81      0.74      0.77        23
           1       0.75      0.82      0.78        22

    accuracy                           0.78        45
   macro avg       0.78      0.78      0.78        45
weighted avg       0.78      0.78      0.78        45

[[17  6]
 [ 4 18]]
Categorical Naive Bayes accuracy: 77.78%

然后,创建一个名为 NBclassifier2 的高斯朴素贝叶斯分类器 (GaussianNB),使用高斯朴素贝叶斯分类器 (Gaussian Naive Bayes) 来训练模型,并对测试数据进行预测。具体实现代码如下所示。

NBclassifier2 = GaussianNB()
NBclassifier2.fit(X_train, y_train)

y_pred = NBclassifier2.predict(X_test)

print(classification_report(y_test, y_pred))
print(confusion_matrix(y_test, y_pred))

from sklearn.metrics import accuracy_score
NBAcc2 = accuracy_score(y_pred,y_test)
print('Gaussian Naive Bayes accuracy: {:.2f}%'.format(NBAcc2*100))

这段代码用于构建和评估使用高斯朴素贝叶斯分类器的模型,并提供了模型的性能指标。与之前的分类朴素贝叶斯不同,高斯朴素贝叶斯假设特征变量是连续分布的,而不是离散的。执行后输出:

              precision    recall  f1-score   support

           0       0.77      0.87      0.82        23
           1       0.84      0.73      0.78        22

    accuracy                           0.80        45
   macro avg       0.81      0.80      0.80        45
weighted avg       0.80      0.80      0.80        45

[[20  3]
 [ 6 16]]
Gaussian Naive Bayes accuracy: 80.00%

(5) Decision Tree模型

使用决策树分类器 (Decision Tree Classifier) 进行模型训练和评估,通过调整决策树的叶子节点数量来寻找最佳模型配置,并显示不同配置下的模型准确率,这有助于确定决策树模型的最佳超参数设置。具体实现代码如下所示。

scoreListDT = []
for i in range(2,21):
    DTclassifier = DecisionTreeClassifier(max_leaf_nodes=i)
    DTclassifier.fit(X_train, y_train)
    scoreListDT.append(DTclassifier.score(X_test, y_test))
    
plt.plot(range(2,21), scoreListDT)
plt.xticks(np.arange(2,21,1))
plt.xlabel("Leaf")
plt.ylabel("Score")
plt.show()
DTAcc = max(scoreListDT)
print("Decision Tree Accuracy: {:.2f}%".format(DTAcc*100))

执行后输出:

Decision Tree Accuracy: 86.67%

(6)Random Forest模型

使用随机森林分类器 (Random Forest Classifier) 进行模型训练和评估,同时尝试不同的最大叶子节点数量来寻找最佳模型配置。具体实现代码如下所示。

scoreListRF = []
for i in range(2,25):
    RFclassifier = RandomForestClassifier(n_estimators = 1000, random_state = 1, max_leaf_nodes=i)
    RFclassifier.fit(X_train, y_train)
    scoreListRF.append(RFclassifier.score(X_test, y_test))
    
plt.plot(range(2,25), scoreListRF)
plt.xticks(np.arange(2,25,1))
plt.xlabel("RF Value")
plt.ylabel("Score")
plt.show()
RFAcc = max(scoreListRF)
print("Random Forest Accuracy:  {:.2f}%".format(RFAcc*100))

执行后输出:

Random Forest Accuracy:  93.33%

7)Gradient Boosting模型

首先使用随机搜索方法,在给定的超参数空间中搜索最佳的梯度提升分类器的超参数组合,以达到模型性能的最优化。具体实现代码如下所示。

paramsGB={'n_estimators':[100,200,300,400,500],
      'max_depth':[1,2,3,4,5],
      'subsample':[0.5,1],
      'max_leaf_nodes':[2,5,10,20,30,40,50]}

GB = RandomizedSearchCV(GradientBoostingClassifier(), paramsGB, cv=20)
GB.fit(X_train, y_train)

执行后输出:

RandomizedSearchCV(cv=20, estimator=GradientBoostingClassifier(),
                   param_distributions={'max_depth': [1, 2, 3, 4, 5],
                                        'max_leaf_nodes': [2, 5, 10, 20, 30, 40,
                                                           50],
                                        'n_estimators': [100, 200, 300, 400,
                                                         500],
                                        'subsample': [0.5, 1]})

然后取随机搜索 (RandomizedSearchCV) 过程中找到的最佳模型和超参数的相关信息,通过查看这些信息,您可以了解到在随机搜索过程中找到的性能最佳的模型、最佳分数以及与该模型相关的超参数的值。这些信息对于进一步优化和调整模型非常有用。具体实现代码如下所示。

print(GB.best_estimator_)
print(GB.best_score_)
print(GB.best_params_)
print(GB.best_index_)

执行后输出:

GradientBoostingClassifier(max_depth=4, max_leaf_nodes=50, n_estimators=400,
                           subsample=1)
0.8270833333333332
{'subsample': 1, 'n_estimators': 400, 'max_leaf_nodes': 50, 'max_depth': 4}

9

 最后训练一个梯度提升分类器 (GradientBoostingClassifier) 并对测试数据进行了预测。接下来,您打印了分类报告 (classification_report) 和混淆矩阵 (confusion_matrix),以评估模型的性能,并计算了模型的准确性。具体实现代码如下所示。

              precision    recall  f1-score   support

           0       0.77      0.87      0.82        23
           1       0.84      0.73      0.78        22

    accuracy                           0.80        45
   macro avg       0.81      0.80      0.80        45
weighted avg       0.80      0.80      0.80        45

[[20  3]
 [ 6 16]]
Gradient Boosting accuracy: 80.00%

执行后输出:

              precision    recall  f1-score   support

           0       0.77      0.87      0.82        23
           1       0.84      0.73      0.78        22

    accuracy                           0.80        45
   macro avg       0.81      0.80      0.80        45
weighted avg       0.80      0.80      0.80        45

[[20  3]
 [ 6 16]]
Gradient Boosting accuracy: 80.00%

10.2.6  比较模型

创建一个比较不同机器学习模型准确性的 DataFrame,并按准确性降序排列了这些模型。具体实现代码如下所示。

compare = pd.DataFrame({'Model': ['Logistic Regression', 'K Neighbors', 
                                  'SVM', 'Categorical NB', 
                                  'Gaussian NB', 'Decision Tree', 
                                  'Random Forest', 'Gradient Boost'], 
                        'Accuracy': [LRAcc*100, KNAcc*100, SVCAcc*100, 
                                     NBAcc1*100, NBAcc2*100, DTAcc*100, 
                                     RFAcc*100, GBAcc*100]})
compare.sort_values(by='Accuracy', ascending=False)

执行后输出:

	Model	Accuracy
6	Random Forest	93.333333
1	K Neighbors	91.111111
2	SVM	86.666667
5	Decision Tree	86.666667
0	Logistic Regression	84.444444
4	Gaussian NB	80.000000
7	Gradient Boost	80.000000
3	Categorical NB	77.777778

从上述结果可以看出,Gradient Boost 模型在这个问题上表现最佳,具有最高的准确性。这些结果可以帮助银行选择最适合他们的任务的机器学习模型。

本篇已完结

(10-2-01)贷款预测模型-CSDN博客

(10-2-02)贷款预测模型-CSDN博客

(10-2-03)贷款预测模型-CSDN博客

(10-2-04)贷款预测模型-CSDN博客

你可能感兴趣的:(金融大模型,机器学习,深度学习,人工智能,python,金融)