ADTK 评估指标(metrics)方法汇总

ADTK 评估指标(metrics)方法汇总

一、模块metrics介绍

模块metrics包含四种类型的评分函数,用于根据真实异常测量检测结果的质量。所有的评分函数都支持两种模式:

  1. 如果输入是二进制标签的形式,每个正时间点都被认为是一个独立的异常事件。这等效于时间无关二元分类的评分函数的定义。
  2. 如果输入是事件列表的形式,则每个异常时间段都被视为一个事件。评分函数的计算将基于检测到的列表和真实列表中出现的段长度。
二、recall,又名灵敏度、命中率或真阳性率 (TPR),是成功检测到的真异常的百分比。

输入类型:

  1. 当输入为异常标签时,度量计算将每个带有正标签的时间点视为一个独立事件。被检测为异常的异常时间点被认为是成功检测。
  2. 当输入是异常时间窗口列表时,度量计算将每个异常时间窗口视为一个独立事件。如果检测到的列表覆盖的此时间窗口的百分比大于或等于thresh ,则认为已成功检测到真实事件。请注意,如果列表中存在重叠的时间窗口,则将首先合并输入时间窗口。

在以下示例中,有 13 个数据点是已知异常。检测结果中,13个中有9个检测成功。因此,召回分数等于 9/13。

在这里插入图片描述
在以下示例中,有 6 个异常事件(包括 3 个瞬时事件)。默认情况下,如果检测结果中包含不少于 50% 的段,则认为事件检测成功。在本例中,根据此设置检测前 4 个事件,未检测到后 2 个事件。因此,召回分数等于 4/6。

在这里插入图片描述
如果我们限制成功检测的标准,使得一个事件必须覆盖超过 90% 的时间段才能被视为成功检测,那么第三个事件就不是成功检测,因为只有一半的时间段被检测到,因此召回分数等于 3/6。

在这里插入图片描述

方法调用
adtk.metrics.recall(y_true, y_pred, thresh=0.5)
参数介绍
y_true(pandas Series or DataFrame, list, or dict) -- 真正异常的标签或列表。
y_pred(pandas Series or DataFrame, list, or dict) -- 预测异常的标签或列表。
thresh(float, optional) -- 命中的阈值。仅在输入为列表或字典时使用。默认值:0.5。
y_true和y_pred的输入格式:
	(1) 如果是 pandas Series,则将其视为沿时间索引的二进制标签。
	(2) 如果是 pandas DataFrame,每一列都是一个二进制序列,被视为一个独立的异常类型。
	(3) 如果是列表,则为事件列表,如果事件是瞬时的,则为 pandas Timestamp;
		如果是封闭时间间隔,则为 pandas Timestamp 的 2 元组。
	(4) 如果是dict,则每个键值对都是一个事件列表,并被视为一种独立的异常类型。
三、precision类似于recall,不同之处在于它计算预测异常为真实异常的百分比。在某些情况下,它也称为阳性预测值 (PPV)。如果检测器过于宽容,recall分数会很高,而分数会precision很低。如果检测器太严格,recall分数会很低,而分数会precision很高。

输入类型:

  1. 当输入为异常标签时,度量计算将每个带有正标签的时间点视为一个独立事件。被检测为异常的异常时间点被认为是成功检测。
  2. 当输入是异常时间窗口列表时,度量计算将每个异常时间窗口视为一个独立事件。如果检测到的列表覆盖的此时间窗口的百分比大于或等于thresh ,则认为已成功检测到真实事件。请注意,如果列表中存在重叠的时间窗口,则将首先合并输入时间窗口。

在这里插入图片描述

方法调用
adtk.metrics.precision(y_true, y_pred, thresh=0.5)
参数介绍
y_true(pandas Series or DataFrame, list, or dict) -- 真正异常的标签或列表。
y_pred(pandas Series or DataFrame, list, or dict) -- 预测异常的标签或列表。
thresh(float, optional) -- 命中的阈值。仅在输入为列表或字典时使用。默认值:0.5。
y_true和y_pred的输入格式:
	(1) 如果是 pandas Series,则将其视为沿时间索引的二进制标签。
	(2) 如果是 pandas DataFrame,每一列都是一个二进制序列,被视为一个独立的异常类型。
	(3) 如果是列表,则为事件列表,如果事件是瞬时的,则为 pandas Timestamp;
		如果是封闭时间间隔,则为 pandas Timestamp 的 2 元组。
	(4) 如果是dict,则每个键值对都是一个事件列表,并被视为一种独立的异常类型。
四、f1_scoreprecisionrecall的调和平均值。

输入类型:

  1. 当输入为异常标签时,度量计算将每个带有正标签的时间点视为一个独立事件。被检测为异常的异常时间点被认为是成功检测。
  2. 当输入是异常时间窗口列表时,度量计算将每个异常时间窗口视为一个独立事件。如果检测到的列表覆盖的此时间窗口的百分比大于或等于thresh ,则认为已成功检测到真实事件。请注意,如果列表中存在重叠的时间窗口,则将首先合并输入时间窗口。

在这里插入图片描述

方法调用
adtk.metrics.f1_score(y_true, y_pred, recall_thresh=0.5, precision_thresh=0.5)
参数介绍
y_true(pandas Series or DataFrame, list, or dict) -- 真正异常的标签或列表。
y_pred(pandas Series or DataFrame, list, or dict) -- 预测异常的标签或列表。
recall_thresh(float, optional) -- 召回计算的阈值。仅在输入为列表或字典时使用。默认值:0.5。
precision_thresh(float, optional) -- 精度计算的阈值。仅在输入为列表或字典时使用。默认值:0.5。
y_true和y_pred的输入格式:
	(1) 如果是 pandas Series,则将其视为沿时间索引的二进制标签。
	(2) 如果是 pandas DataFrame,每一列都是一个二进制序列,被视为一个独立的异常类型。
	(3) 如果是列表,则为事件列表,如果事件是瞬时的,则为 pandas Timestamp;
		如果是封闭时间间隔,则为 pandas Timestamp 的 2 元组。
	(4) 如果是dict,则每个键值对都是一个事件列表,并被视为一种独立的异常类型。
五、Intersect over union (IoU) 得分iou计算了两个列表中都被识别为异常的时间段与两个列表中至少一个列表中识别为异常的时间段之间的长度比。

输入类型:

  1. 当输入为异常标签时,度量计算计算异常时间点的数量。
  2. 当输入是异常时间窗口列表时,度量计算测量时间段的长度。

在前面的示例中,真正异常段与检测到的段之间的并集为 13 天,而相交为 3 天。因此 IoU 得分为 3/13。
在这里插入图片描述

方法调用
adtk.metrics.f1_score(y_true, y_pred, recall_thresh=0.5, precision_thresh=0.5)
参数介绍
y_true(pandas Series or DataFrame, list, or dict) -- 真正异常的标签或列表。
y_pred(pandas Series or DataFrame, list, or dict) -- 预测异常的标签或列表。
y_true和y_pred的输入格式:
	(1) 如果是 pandas Series,则将其视为沿时间索引的二进制标签。
	(2) 如果是 pandas DataFrame,每一列都是一个二进制序列,被视为一个独立的异常类型。
	(3) 如果是列表,则为事件列表,如果事件是瞬时的,则为 pandas Timestamp;
		如果是封闭时间间隔,则为 pandas Timestamp 的 2 元组。
	(4) 如果是dict,则每个键值对都是一个事件列表,并被视为一种独立的异常类型。
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夏秃然

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值