使用SQL和Facebook的Prophet预测算法进行大规模异常检测

2022-07-12 17:02:44洪伯伯
导读 异常检测是一项非常重要的任务。在Imperva,我们将其用于威胁追踪、风险分析、风险缓解、趋势检测等。在上一篇文章中,我们展示了如何通过S

异常检测是一项非常重要的任务。在Imperva,我们将其用于威胁追踪、风险分析、风险缓解、趋势检测等。在上一篇文章中,我们展示了如何通过SQL以简单的方法完成它。这次我们想使用Prophet,这是Facebook预测时间序列数据的算法。

Prophet与其他简单方法相比具有优势,例如,它是可配置的并且支持季节性检测。但是,它需要使用Python并且消耗更多的资源。

通过将预测结果与过去的实际值进行比较,并通过查看预测的未来值来完成异常检测。

为了进行预测,Prophet使用时间序列——计算起来可能很复杂。计算可能需要分组、排序、聚合函数和更多功能——这项工作很多时候最适合SQL。让数据库做它最擅长的事情。

在上一篇文章中,我们展示了如何通过SQL检测异常。这次数据库无法完成这项工作,我们将其与Python代码集成以运行Propet。

查询引擎计算多组时间序列,然后将其发送给Prophet以检测异常。检测是按组进行的,内存占用少,并且主要受CPU限制——这使得它可以在多个CPU上并行运行并加快处理速度。

SQL异常检测图1

继续阅读以了解如何从两个世界中受益:用于时间序列计算的数据库和用于预测的检测算法,并获得大规模的有效异常检测。

时间序列计算

时间序列计算有两个步骤。首先,随着时间的推移,数据库会计算值并将其作为记录保存在内存中。后来的数据被聚合,因此数据库返回的每条记录都代表一个时间序列。每条记录有两个数组,一个用于间隔,一个用于值。

您可以在以下示例中看到WITH子句的第一步将随着时间的推移将值处理为记录。使用ARRAY_AGG聚合函数,将值聚合到记录中。我们还需要至少10个值和至少100个平均值。

免责声明:本文由用户上传,如有侵权请联系删除!