我正在处理时间序列的异常分数(背景是计算机网络中的异常检测)。每分钟,我都会得到一个异常分数,它告诉我网络的当前状态有多么“意外”或异常。分数越高,当前状态越异常。理论上接近5分是可能的,但几乎不会发生。
现在,我想提出一种算法或公式,该算法或公式可以自动确定此异常时间序列的阈值。一旦异常分数超过此阈值,就会触发警报。
下面的频率分布是一个超过1天的异常时间序列的示例。然而,这是不是安全的假设,每一个异常的时间序列是要像她那样。在此特殊示例中,异常阈值(例如.99分位数)将是有意义的,因为最右边的分数可被视为异常。
并且具有与时间序列相同的频率分布(由于时间序列中没有更高的异常分数,因此它的范围从0到1):
不幸的是,频率分布可能具有一定的形状,其中.99分位数无效。下面是一个示例。右尾非常低,因此,如果将.99分位数用作阈值,则可能会导致许多误报。该频率分布似乎不包含异常,因此阈值应位于0.25左右的分布范围之外。
总结起来,这两个示例之间的区别在于第一个示例似乎表现出异常,而第二个则没有。
从我幼稚的角度来看,该算法应考虑以下两种情况:
- 如果频率分布具有较大的右尾(即几个异常分数),则.99分位数可能是一个很好的阈值。
- 如果频率分布的右尾非常短(即没有异常分数),则阈值应位于分布之外。
/ edit:也没有基本事实,即可以使用带标签的数据集。因此,该算法针对异常得分的性质是“盲目的”。
现在,我不确定如何用算法或公式来表达这些观察结果。有人建议如何解决这个问题吗?我希望我的解释足够充分,因为我的统计背景非常有限。
谢谢你的帮助!