异常检测中的ROC曲线与AUC得分

在异常检测任务中:

  • 正常样本:数量 很多,通常占绝大多数(> 95%)

  • 异常样本:数量 很少,稀缺且重要(高风险)

因此是一个极度不均衡的二分类问题

在这种情况下,常规的准确率(accuracy)往往不再适用,而 ROC 和 AUC 是更合适的评估方式。

 计算步骤

1. 将异常分数按从高到低排序

(因为高分被认为是“更异常”)

2. 选一系列阈值(threshold)

从最大分数 → 最小分数,依次尝试作为判决线。

3. 每个阈值下做一次“二分类预测”

然后统计四个基本量:

  • TP:预测为异常,且真的异常

  • FP:预测为异常,结果其实是正常

  • FN:预测为正常,结果其实是异常

  • TN:预测为正常,且真的正常

4. 计算:

5. 把所有 (FPR, TPR) 点连接成曲线

就得到了 ROC 曲线

这是一个ROC曲线的示例,不同的线是不同的网络攻击方式

AUC 是 ROC 曲线下的面积,其定义是:“从随机抽取的一个正样本和一个负样本中,模型判定正样本得分更高的概率”。
 

示例:你现在模型输出的是 MSE

无监督异常检测模型(如自编码器、LSTM、Transformer)会输出每个样本的 重建误差(MSE),你可以这样处理:
 

from sklearn.metrics import roc_curve, roc_auc_score

# y_true: 0/1 标签, mse_scores: 每个样本的 MSE 值
fpr, tpr, thresholds = roc_curve(y_true, mse_scores)
auc = roc_auc_score(y_true, mse_scores)

# 画 ROC 曲线
import matplotlib.pyplot as plt

plt.plot(fpr, tpr, label=f"AUC = {auc:.4f}")
plt.xlabel("False Positive Rate")
plt.ylabel("True Positive Rate")
plt.title("ROC Curve for Anomaly Detection")
plt.grid()
plt.legend()
plt.show()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值