导读 异常检测是一项非常重要的任务。在Imperva,我们将其用于威胁追踪、风险分析、风险缓解、趋势检测等。在上一篇文章中,我们展示了如何通过S
异常检测是一项非常重要的任务。在Imperva,我们将其用于威胁追踪、风险分析、风险缓解、趋势检测等。在上一篇文章中,我们展示了如何通过SQL以简单的方法完成它。这次我们想使用Prophet,这是Facebook预测时间序列数据的算法。
Prophet与其他简单方法相比具有优势,例如,它是可配置的并且支持季节性检测。但是,它需要使用Python并且消耗更多的资源。
通过将预测结果与过去的实际值进行比较,并通过查看预测的未来值来完成异常检测。
为了进行预测,Prophet使用时间序列——计算起来可能很复杂。计算可能需要分组、排序、聚合函数和更多功能——这项工作很多时候最适合SQL。让数据库做它最擅长的事情。
在上一篇文章中,我们展示了如何通过SQL检测异常。这次数据库无法完成这项工作,我们将其与Python代码集成以运行Propet。
查询引擎计算多组时间序列,然后将其发送给Prophet以检测异常。检测是按组进行的,内存占用少,并且主要受CPU限制——这使得它可以在多个CPU上并行运行并加快处理速度。
SQL异常检测图1
继续阅读以了解如何从两个世界中受益:用于时间序列计算的数据库和用于预测的检测算法,并获得大规模的有效异常检测。
时间序列计算
时间序列计算有两个步骤。首先,随着时间的推移,数据库会计算值并将其作为记录保存在内存中。后来的数据被聚合,因此数据库返回的每条记录都代表一个时间序列。每条记录有两个数组,一个用于间隔,一个用于值。
您可以在以下示例中看到WITH子句的第一步将随着时间的推移将值处理为记录。使用ARRAY_AGG聚合函数,将值聚合到记录中。我们还需要至少10个值和至少100个平均值。