使用PyFBAD进行端到端异常检测的指南

1,326 阅读7分钟

从本质上讲,在异常检测中,我们正在寻找偏离常规的观察结果,这些观察结果要么优于我们所发现的或定义为正常的观察结果,要么跟不上。因此,异常检测从商业和技术的角度都提供了好处。为了执行异常,人们必须依靠诸如SciKit Learn这样的工具。然而,当涉及到执行端到端的任务时,只有几个选择,如PyFBAD,一个基于Python的软件包。从一开始,我们就可以从各种分布式服务器加载数据,运行SOTA算法进行异常检测。我们将在本文中谈论这些工具,但首先,我们将了解下面列出的一些重要内容。

目录

  1. 什么是异常检测?
  2. 异常检测的技术
  3. 异常检测的算法
  4. PyFBAD是如何处理异常现象的?

让我们从了解异常检测开始讨论。

什么是异常检测?

异常是数据集中的数据点,它们从其他数据中脱颖而出,与数据的预期行为相矛盾。这些数据点或观察结果与数据集的典型行为模式不同。异常检测是一种在数据集中检测异常的技术,它是基于无监督的数据处理。异常现象可以分为几类,包括离群、离群、离群、离群、离群、离群、离群和离群 异常模式,以临时或非系统的方式出现在数据收集中。漂移,长期的数据变化是缓慢和不对称的。

异常检测对于检测欺诈性交易、检测疾病和处理具有高等级不平衡的案例研究非常有用。可以建立具有更强大的异常检测技术的数据科学模型。

离群点分析(也被称为异常检测)是一个数据挖掘步骤,它可以检测出偏离数据集常规行为的数据点、事件和/或观察结果。不寻常的数据量可以披露基本事件,如技术故障,或前瞻性的可能性,如消费者行为的变化。异常现象越来越多地被使用机器学习来检测。

异常情况检测的技术

无监督、半监督和有监督的异常检测技术是三种类型。最佳的异常检测方法基本上是由数据集中的标签决定的。有监督的异常检测技术需要一个具有完整的 "正常 "和 "异常 "标签集的数据集,以便分类算法能够发挥作用。分类器也必须作为该方法的一部分进行训练。

异常点检测与传统的模式识别相似,不同的是,异常点检测在类别之间产生了自然的强烈不平衡。因为异常点检测本质上是不平衡的,所以它不太适合所有的统计分类算法。

半监督的异常检测技术使用正常的、标记的训练数据集建立一个代表正常行为的模型。然后,他们使用该模型,通过确定该模型产生任何给定实例的可能性,来发现异常。

无监督的异常检测方法仅根据数据的内在属性来检测未标记的测试数据集中的异常情况。其工作假设是,数据集中的绝大多数实例都是正常的,就像大多数情况下一样。然后,异常检测算法将寻找那些似乎与数据集的其他部分不相符合的实例。

异常检测的算法

隔离森林

隔离森林算法使用基于树的方法检测异常情况。它基于对正常数据的建模,以隔离在特征空间中数量较少且不同的异常现象。该算法基本上是这样完成的:它生成一个随机森林,其中的决策树是随机生长的:在每个节点上,随机选择特征,并选择一个随机阈值,将数据集分成两半。

它不断地砍伐数据集,直到所有的实例都相互隔离。由于异常现象通常远离其他实例,它被隔离的步骤平均比正常实例少(在所有决策树中)。

基于密度的算法

常见的基于密度的技术包括K-近邻(KNN)、局部离群因子(LOF)和其他。回归和分类系统都可以从这些技术中受益。

遵循最高数据点密度线,这些算法中的每一个都会产生预期的行为。任何落在这些密集区之外的点,如果在统计学上有显著的数量,就会被标记为异常点。因为这些技术中的大多数都依赖于点之间的距离,所以关键是缩放数据集和规范化单位以确保准确的结果。

基于SVM的方法

一个能产生稳健预测模型的监督学习模型是支持向量机(单类SVM)技术。它主要用于分类。该技术采用了一系列的训练实例,每个实例都被标记为属于两组中的一组。

然后,该系统产生对其他案例进行分类的标准。为了使两个类别之间的差异最大化,该算法将例子转化为空间中的点。

如果一个值在两个类别的范围之外太远,系统就会将其识别为离群值。如果你没有标记的数据,你可以使用无监督学习策略,通过寻找案例之间的分组来建立类别。

PyFBAD是如何处理异常情况的?

PyFBAD库是一个无监督的异常检测包,从头到尾都在工作。所有ml-flow阶段在这个包里都有源代码。通过众多的PyFBAD包,数据可以从CSV等文件、MongoDB等数据库或MySQL中读取。预处理程序可以用来为模型准备读取的数据。

不同的机器学习模型,如Prophet或Isolation Forest,可以用来训练模型。异常检测的结果可以通过电子邮件或slack发送。换句话说,整个项目周期可以只利用PyFBAD提供的源代码而不利用其他库来完成。

让我们从这个包开始,首先我们用pip安装这个包,并导入所有的依赖项,同时在这个实现中,Plotly dash被用来进行交互式绘图。

import plotly.express as px
import plotly.graph_objects as go
from pyfbad.data import database as db
from pyfbad.models import models as md
from pyfbad.features import create_feature as cf

由于我们提到这个工具是一个端到端的平台,我们可以从高级数据库中利用我们的数据;这可以通过数据库对象完成。在这里,我们正在加载一个标准的CSV文件,该文件持有微软的股票信息,它可以被加载为。

# initialize the connection
connection = db.File()
data = connection.read_from_csv('/content/Microsoft_Stock.csv')
data.head()

对于时间序列的异常预测,我们需要创建一个特征集,其中包含一个日期_时间和我们想要检测异常的数据。在我们的案例中,它是股票的数量。

features = cf.Features()
features_set = features.get_model_data(df=data, time_column_name = 'Date', value_column_name = 'Volume')
features_set

接下来,通过使用上面生成的这个特征集,PyFBAD提供了一个模型对象,我们可以通过它来检测异常情况。这时,它有先知和隔离森林作为算法来工作。

# initialize the algorithm
models = md.Model_Prophet()
# train algorithm on the features
trained_features = models.train_model(features_set)
# get the anomalies
forecast_anomaly = models.train_forecast(trained_features)

现在我们已经在我们的数据集中检测到了一组异常点,让我们用Plotly dash将它们可视化,如下图所示,第一张图显示了主系列,然后是显示模型检测到的异常点。

最后的话

通过这篇文章,我们讨论了异常点,以及如何检测和适当处理异常点以获得适当的业务解决方案的重要性。我们简要地讨论了用于处理它的基本技术和算法。最后,为了检测数据集中存在的异常情况,我们使用了基于Python的工具箱PyFBAD。

参考文献