在这一部分,我们对 XGBoost 模型进行训练,并使用多种指标评估其性能。
接着,我们会进行超参数优化(使用网格搜索或随机搜索),以提升模型效果,并可视化模型的表现。
5.1 模型训练
在上一部分,我们已经选择了 XGBoost 作为欺诈检测模型,现在我们正式训练它。
from xgboost import XGBClassifier
# 计算类别权重,解决类别不均衡问题
fraud_weight = (y_train == 0).sum() / (y_train == 1).sum()
# 定义 XGBoost 模型
model = XGBClassifier(
scale_pos_weight=fraud_weight, # 处理类别不均衡
n_estimators=50, # 50 棵树
max_depth=5, # 树的最大深度
learning_rate=0.15, # 学习率
subsample=0.8, # 采样比例
colsample_bytree=0.8, # 选择部分特征进行训练
random_state=42
)
# 训练模型
model.fit(X_train, y_train)
5.2 评估模型性能
为了全面评估模型,我们使用以下指标:
- 准确率(Accuracy):总体预测正确率。
- 精确率(Precision):在预测为欺诈交易的样本中,实际为欺诈的比例。
- 召回率(Recall):在所有真实的欺诈交易中,成功被检测出的比例(关键指标)。
- F1 分数(F1-Score):精确率和召回率的调和均值。
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score, classification_report, confusion_matrix
# 预测测试集
y_pred = model.predict(X_test)
# 计算评估指标
accuracy = accuracy_score(y_test, y_pred)
precision = precision_score(y_test, y_pred)
recall = recall_score(y_test, y_pred)
f1 = f1_score(y_test, y_pred)
print(f"Accuracy: {accuracy:.4f}")
print(f"Precision: {precision:.4f}")
print(f"Recall: {recall:.4f}")
print(f"F1 Score: {f1:.4f}")
# Accuracy: 0.9526
# Precision: 0.9886
# Recall: 0.9158
# F1 Score: 0.9508
# 打印分类报告
print("\nClassification Report:\n", classification_report(y_test, y_pred, target_names=['Non-Fraud', 'Fraud']))
5.3 可视化模型表现
(1)混淆矩阵
混淆矩阵能够直观展示 TP(真正例)、TN(真负例)、FP(假正例)、FN(假负例)的数量。
import seaborn as sns
import matplotlib.pyplot as plt
# 计算混淆矩阵
cm = confusion_matrix(y_test, y_pred)
# 绘制混淆矩阵热力图
plt.figure(figsize=(6, 6))
sns.heatmap(cm, annot=True, fmt="d", cmap="coolwarm", xticklabels=['Non-Fraud', 'Fraud'], yticklabels=['Non-Fraud', 'Fraud'])
plt.xlabel("Predicted Label")
plt.ylabel("True Label")
plt.title("Confusion Matrix")
plt.show()
![图片[1]-5. 模型训练与评估-大赛人网](https://www.dsrw.com/wp-content/uploads/2026/10/image-325.png)
(2)ROC 曲线
ROC 曲线用于评估分类器的性能,AUC(曲线下面积)越接近 1,说明模型性能越好。
from sklearn.metrics import roc_curve, auc
# 计算预测概率
y_scores = model.predict_proba(X_test)[:, 1]
# 计算 FPR 和 TPR
fpr, tpr, _ = roc_curve(y_test, y_scores)
roc_auc = auc(fpr, tpr)
# 绘制 ROC 曲线
plt.figure(figsize=(8, 6))
plt.plot(fpr, tpr, color='darkorange', lw=2, label=f'ROC curve (AUC = {roc_auc:.2f})')
plt.plot([0, 1], [0, 1], color='navy', 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 (ROC) Curve")
plt.legend(loc="lower right")
plt.show()
![图片[2]-5. 模型训练与评估-大赛人网](https://www.dsrw.com/wp-content/uploads/2026/10/image-326.png)
5.4 模型优化(超参数调优)
我们使用 随机搜索(RandomizedSearchCV) 来自动寻找最佳超参数,提高模型性能。
(1)超参数搜索范围
n_estimators(决策树数量)max_depth(最大树深度)learning_rate(学习率)subsample(每棵树的样本采样比例)colsample_bytree(每棵树使用的特征比例)
from sklearn.model_selection import RandomizedSearchCV
import numpy as np
# 定义超参数搜索范围
param_dist = {
'n_estimators': [50, 100, 200, 300],
'max_depth': [3, 5, 7, 9],
'learning_rate': [0.01, 0.02, 0.05, 0.08, 0.1, 0.2],
'subsample': [0.6, 0.8, 1.0],
'colsample_bytree': [0.6, 0.8, 1.0]
}
# 进行随机搜索
random_search = RandomizedSearchCV(
estimator=XGBClassifier(scale_pos_weight=fraud_weight, random_state=42),
param_distributions=param_dist,
n_iter=20, # 进行 20 轮搜索
scoring='f1', # 选择 F1-score 作为优化目标
cv=5, # 5 折交叉验证
verbose=2,
random_state=42,
n_jobs=-1 # 并行计算
)
# 训练模型
random_search.fit(X_train, y_train)
# 输出最佳参数
print("Best Parameters:", random_search.best_params_)
# 使用最优参数训练最终模型
best_model = random_search.best_estimator_
5.5 最终模型评估
使用调优后的最佳模型进行评估。
# 预测测试集
y_pred_best = best_model.predict(X_test)
# 计算评估指标
accuracy_best = accuracy_score(y_test, y_pred_best)
precision_best = precision_score(y_test, y_pred_best)
recall_best = recall_score(y_test, y_pred_best)
f1_best = f1_score(y_test, y_pred_best)
print(f"Optimized Accuracy: {accuracy_best:.4f}")
print(f"Optimized Precision: {precision_best:.4f}")
print(f"Optimized Recall: {recall_best:.4f}")
print(f"Optimized F1 Score: {f1_best:.4f}")
# Optimized Accuracy: 0.9579
# Optimized Precision: 0.9888
# Optimized Recall: 0.9263
# Optimized F1 Score: 0.9565
5.6 小结
- 模型训练:训练了XGBoost,并利用类别权重调整 处理数据不均衡问题。
- 模型评估:使用混淆矩阵、ROC 曲线 直观评估模型效果。计算准确率、精确率、召回率、F1-score,评估分类器性能。
- 超参数优化:使用随机搜索(RandomizedSearchCV) 自动寻找最佳超参数,提高召回率。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END













请登录后查看评论内容