5. 模型训练与评估

在这一部分,我们对 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. 模型训练与评估-大赛人网

(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. 模型训练与评估-大赛人网

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
喜欢就支持一下吧
点赞11 分享
评论 抢沙发
头像-大赛人网
欢迎您留下宝贵的见解!
提交
头像-大赛人网

昵称

取消
昵称

    请登录后查看评论内容