📉 模块4:"重要的指标:超越准确性"

目标:

理解准确性并不是一切。学会根据问题选择、计算和解释适当的指标——特别是在欺诈检测等不平衡场景中。


4.1 准确性的陷阱

想象一个欺诈数据集:

  • 99% 合法交易
  • 1% 欺诈交易

一个总是预测"无欺诈"的模型将有99%的准确性……但它是无用的!它检测到零欺诈。


4.2 混淆矩阵:你最好的朋友

混淆矩阵显示:

  • 真正例(TP):正确检测到的欺诈。
  • 假负例(FN):模型标记为合法的欺诈(严重错误!)。
  • 假正例(FP):被标记为欺诈的合法交易(客户困扰)。
  • 真负例(TN):正确识别的合法交易。
from sklearn.metrics import confusion_matrix
import seaborn as sns

y_pred = 模型.predict(X_test)
cm = confusion_matrix(y_test, y_pred)

sns.heatmap(cm, annot=True, fmt='d', cmap='Blues',
            xticklabels=['合法', '欺诈'],
            yticklabels=['合法', '欺诈'])
plt.title("混淆矩阵")
plt.ylabel("实际")
plt.xlabel("预测")
plt.show()

4.3 精确率、召回率和F1分数

➤ 精确率

在我标记为欺诈的所有交易中,有多少实际上是欺诈?

精确率 = TP / (TP + FP)

✅ 当假正例成本高时很重要(例如,阻止合法卡片)。


➤ 召回率(敏感性,真正例率)

在所有实际欺诈中,我检测到了多少?

召回率 = TP / (TP + FN)

在欺诈检测中至关重要。 您希望最小化FN(未检测到的欺诈)。


➤ F1分数

精确率和召回率的调和平均数。在寻求平衡时有用。

F1 = 2 * (精确率 * 召回率) / (精确率 + 召回率)
from sklearn.metrics import precision_score, recall_score, f1_score

print("精确率:", precision_score(y_test, y_pred))
print("召回率:   ", recall_score(y_test, y_pred))
print("F1分数: ", f1_score(y_test, y_pred))

4.4 AUC-ROC:二分类的黄金标准

ROC曲线显示了在各种决策阈值下真正例率(召回率)和假正例率之间的权衡。

AUC(曲线下面积) 是0到1之间的数字:

  • 0.5 = 随机模型
  • 1.0 = 完美模型
from sklearn.metrics import roc_auc_score, roc_curve

y_proba = 模型.predict_proba(X_test)[:, 1]  # 正类概率
auc = roc_auc_score(y_test, y_proba)
print("AUC-ROC:", auc)

# 绘制曲线
fpr, tpr, thresholds = roc_curve(y_test, y_proba)
plt.plot(fpr, tpr, label=f'ROC曲线 (AUC = {auc:.2f})')
plt.plot([0,1], [0,1], 'k--', label='随机分类器')
plt.xlabel('假正例率')
plt.ylabel('真正例率')
plt.title('ROC曲线')
plt.legend()
plt.grid()
plt.show()

AUC优势: 对类别不平衡不变。非常适合欺诈检测。


4.5 完整分类报告

Scikit-learn提供专业摘要:

from sklearn.metrics import classification_report

print(classification_report(y_test, y_pred,
      target_names=['合法', '欺诈']))

典型输出:

              precision    recall  f1-score   support

        合法       0.99      1.00      0.99     19800
        欺诈       0.85      0.50      0.63       200

    accuracy                           0.99     20000
   macro avg       0.92      0.75      0.81     20000
weighted avg       0.99      0.99      0.99     20000

📝 练习4.1:不平衡数据集的深度评估

数据集: 欺诈_预处理.csv(来自上一模块的预处理数据)

任务:

  1. 训练逻辑回归模型。
  2. 计算并显示混淆矩阵。
  3. 计算精确率、召回率、F1分数和AUC-ROC。
  4. 解释结果:模型好吗?这里哪个指标最重要,为什么?
  5. 调整决策阈值(默认0.5)以提高召回率(即使精确率恶化)。使用predict_proba和0.3阈值。
  6. 比较阈值调整前后的指标。

💡 附加说明:

  • 在欺诈检测中,召回率 > 精确率。 您宁愿手动审查一些合法案例(FP)也不愿让欺诈溜走(FN)。
  • AUC-ROC是您在不平衡数据集上比较模型的最佳盟友。
  • 在不平衡问题中永远不要使用准确性作为主要指标。
  • Scikit-learn有precision_recall_curve 来绘制精确率-召回率权衡图(当负例占多数时有用)。

Course Info

Course: AI-course1

Language: ZH

Lesson: Module4