异常检测中的评价指标——TPR/FPR/P/A/F/R

1、异常检测

相对于一般的分类问题(例如sklearn.datasets的load_iris数据集,是针对蝴蝶类型进行分类,对每一种类别同等关心),这里的“异常检测”主要指在多分类中,更关心或只关心其中的“某一类”(异常类)。

异常检测中最常见的是二分类异常检测,即只分“正常”和“异常”两类(一般在标签中“正常”标记为“0”,“异常”标记为“1”)。例如:在一系列信号中找异常信号、在一系列行为特征中找异常行为。


2、评价指标

对于一般分类问题,因为对每一种类别都很关心,所以在评价时一般直接计算其正确率:

            正确率 = 所有匹配的样本数目 / 所有的样本数目

(额...匹配要解释吗...就是预测和实际的属于同一类....)至于其他算法上的指标,譬如复杂度啊、效率啊就不在本文讨论范围了哈。


对于异常检测问题,评价指标更为复杂。主要原因一是一般异常检测的数据集都是不平衡数据集,即正常数据多异常数据少,如果只看正确率的话,可以想象一种场景:如果测试集中70%都是“正常”,当预测结果全是“正常”时,其正确率也能达到70%,但事实上这对于更关心异常的我们来说,emmmm,是并没有什么鬼用的。。。

可能大家会说,那你把数据弄平衡不就好了?....话说这么说没错啦,但是讲真哦...身不由己哦...本身异常数据就很少啊(例如内部威胁检测),处理不平衡数据集,无非就是抽样啊减少正常样本啊之类的,那总数据还是太少...(例如异常样本70+正常的1000+)...或者干脆比如用生成对抗网络GAN,自己生成新的异常样本、或者利用特征相似性自己造新的异常数据,但是这造出来的数据对不对又是个问题了....

额,跑题了...那是之后不平衡数据的处理问题...咳咳,反正总知就是异常检测只看正确率是万万不行滴!那主要有哪些指标呢?这里有四个关键字母:T F P N

True真    False假    Positive正     Negative

在异常检测中,P和N一般定义里是针对预测来说的,划重点:针对预测!针对预测!针对预测!而Positive正类指的是你更关心的那一类!即“异常”!千万别弄反!默念三遍:P指异常!P指异常!P指异常!(也就是标签中的“1”),顾名思义Negative负类就是指正常了。总结来说就是:P指预测为正类!即预测为异常!

T和F是针对预测与实际的比较结果,True真是指正确匹配!具体来说就是:你预测它是正它实际也是正,你预测它是负他实际也是负...好废话...那False假就是不匹配的呗。总结就是下表:

T/F代表预测与实际之间是否“匹配”,P/N 代表预测的为“正/负”

 

实际正例

实际负例

 

预测正例

P

预正实正

TP

预正实负

FP

所有预测为正的个数

TP+FP

预测负例

N

预负实正

FN

预负实负

TN

所有预测为负的个数

FN+TN

 

所有实际正例的个数

TP+FN

所有实际负例的个数

FP+TN

 



-------------------------------- 知道TP FP FN TN的概念了,就可以计算各种指标了:常用指标如下:

 异常检测中的评价指标——TPR/FPR/P/A/F/R

TPR:真正类率,又叫真阳率,代表预测是异常实际也是异常的样本数,占实际总异常数的比例——值越大 性能越好

FPR:假正类率,又叫假阳率,代表预测是异常但实际是正常的样本数,占实际正常总数的比例——值越小 性能越好

R:召回率,意义同TPR——值越大 性能越好

P:精确率,代表预测是异常实际也是异常的样本数,占预测是异常的总数的比例——值越大 性能越好

F:P和R的加权调和平均,常用的是F1值——值越大 性能越好

A:正确率,与精确率的区别是,不仅考虑异常类也考虑正常类,即所有匹配样本数,占所有样本的比例——值越大 性能越好



----------------  还是直接举个栗子

假设!现有的测试集样本的标签为3个异常7个正常,以标签“1”代表异常,全部标签可以表示为:[1, 1, 1, 0, 0, 0, 0, 0, 0, 0];假设预测的标签为[1, 0, 1, 0, 0, 0, 1, 0, 0, 1]

实:[1, 1, 1, 0, 0, 0, 0, 0, 0, 0]

预:[1, 0, 1, 0, 0, 0, 1, 0, 0, 1]

先画个表:

 

实际正例

实际负例

预测正例

P

预正实正 = 预测是1实际也是1

TP=2

预正实负=预测是1实际是0

FP=2

预测负例

N

预负实正 = 预测是0实际是1

FN=1

预负实负 = 预测是0实际也是0

TN=5

TPR = TP/(TP+FN) = 2/(2+1)

FPR = FP/(FP+TN) = 2/(2+5)

R = TPR = 2/(2+1)

P = TP/(TP+FP) = 2/(2+2)

A = (TP+TN)/总样本数 = 7/10


--------------------------------------------- 其他

1.在异常检测中,有的更注重召回率甚至需要保证是100%,有的更注重假阳率或者说FP值,即要求误判为异常实际正常的数目不能太多。具体看什么问题,

2. 在一次预测中,如果预测结果是异常分数值,那么一般会选定某分数作为阈值,然后高于此阈值的分数为异常,低于此阈值的分数判定为正常。此时,根据阈值的取值不同,我们可以得到不同的FPR和TPR值,将所有的值以FPR为横轴,TPR为纵轴画图,即为ROC曲线图;曲线的向下覆盖的面积即为AUC值。