数据传输中的异常检测

我正在开发一个异常检测模型,需要帮助识别数据传输中的异常。例如,如果一个员工通过VPN连接,并且我们有以下数据使用情况:

 EMPID  date       Bytes_sent  Bytes recieved A123  Timestamp    222222     3333333 A123  Timestamp    444444     6666666 A123  Timestamp    99999999   88888888888

我想将第三行标记为异常,因为员工在一定范围内发送或接收数据后,突然出现了大幅跳跃。我想跟踪最近几天的发送和接收字节数,了解他的行为在最近几天的变化情况。


回答:

一种方法是为每个观测值保留额外的指标:
对于Bytes_recieved:

  • 一个指示观测值是否为异常值的标志。这将由观测到的Bytes_recieved是否超出最近观测到的平均值加上或减去最近观测到的标准差来决定,如下所述。
  • 最近N个非异常事件的运行平均值。
  • 最近N个非异常事件的标准差。

N将基于您想要考虑的观测数量。你提到最近几天,所以你可以设置N = "recent" * 平均每日事件数

例如:

 EMPID date      Bytes_sent  Bytes_recieved  br-avg-last-N  br-sd-last-N  br-Outlier A123  Timestamp 222222      3333333         3333333        2357022.368  FALSE A123  Timestamp 444444      6666666         4999999.5      2356922.368  FALSE A123  Timestamp 99999999    88888888888     N/A            N/A          TRUE

第三行的Bytes_recieved异常值是通过观测到的Bytes_recieved是否超出以下范围来计算的:

(最近Bytes_recieved平均值-最近10个) - 2*(最近Bytes_recieved标准差-最近N) 和 (最近Bytes_recieved平均值-最近10个) + 2*(最近Bytes_recieved标准差-最近N)4999999.5 + 2 * 2356922.368 = 9713844.236; 9,713,844.236 < 88,888,888,888 -> TRUE

2个标准差将给出96%的异常值,即您仅在约4%的时间内会看到的极端观测值。您可以根据需要进行调整。

您可以对Bytes_sent执行相同的操作,并为异常决定设置一个“或”条件,或者计算与多维运行平均值的距离(这里X是Bytes_sent,Y是Bytes_recieved),并基于极端距离标记异常值。(您需要为每个观测值跟踪一个运行标准差或另一个扩散指标)
这样,您还可以轻松添加维度:一天中的时间异常,Bytes_sent和Bytes_recieved之间的极端差异等。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注