原文:
www.kdnuggets.com/2021/10/synthetic-time-series-anomaly-signatures-python.html
comments
图片来源:作者使用 Pixabay (免费使用)制作
正如我在我的高引用文章中写的,“合成数据集是通过程序生成的数据仓库。因此,它不是通过任何现实调查或实验收集的。其主要目的是足够灵活和丰富,以帮助机器学习实践者进行各种分类、回归和聚类算法的有趣实验。”
合成时间序列也不例外——它帮助数据科学家尝试各种算法方法,并为真实部署做好准备,这些是仅靠真实数据集无法实现的。
现代工业环境中,时间序列分析有多种丰富的应用,其中一系列传感器从机器、工厂、操作员和业务流程中产生源源不断的数字数据。
压力。温度。电动组件的振动和加速度。质量检查数据。操作员行动日志。
数据不断涌入。这是工业 4.0或智能工厂时代的新常态。虽然结构化和半结构化数据在上升,但仍有大量时间序列(或类似时间序列)数据来自现代工厂中嵌入的各种测量点。
工厂 2030——智能工厂的“成年礼”——计量与质量新闻——在线…
图片来源: Pixabay (免费使用)
大多数时候,它们是“正常的”、“在范围内的”、“如预期的”。但偶尔也会出现异常。这时你需要特别关注。这些是正常数据流中的“异常”数据,需要被捕捉、分析和处理——几乎总是实时的。
在这些数据流中的异常检测是所有现代数据分析产品、服务和初创公司的核心。他们利用从经过验证的时间序列算法到最新的基于神经网络的序列模型的各种手段来检测这些异常特征,并根据业务逻辑创建警报或采取行动。
在现代工业环境中,时间序列分析有着丰富的应用,其中大量传感器不断产生数字数据流……
关于这些工业数据流,有几个点值得重复,以理解为什么合成时间序列生成可能会变得非常有用。
-
现实生活中的异常很少见,需要监控和处理大量数据才能检测到各种有趣的异常。这对希望在短时间内测试和重测多种算法的数据科学家来说并不是好消息。
-
异常的发生是如此不可预测,以至于它们的模式很少能被捕捉到任何完善的统计分布中。快速尝试多种异常类型对于生成一个稳健且可靠的异常检测系统至关重要。在缺乏常规、可信的异常数据来源的情况下,合成方法提供了实现某种受控实验的唯一希望。
-
许多工业传感器生成的数据被认为是高度保密的,不能超出本地私有云或现有边缘分析系统。为了在不妨碍数据安全的情况下重现异常特征,合成方法是一个明显的选择。
这些是正常数据流中的‘异常’,需要被捕捉、分析并采取行动——几乎总是需要实时处理。
在本文中,我们展示了一种简单而直观的方法,来在模仿工业过程的一维合成时间序列数据中创建几种常见的异常特征。我们将使用大家都喜欢的 Python 语言来实现这一点。
注意:这不是一篇关于异常检测算法的文章。我只讨论与合成异常注入时间序列数据(集中于特定应用领域)相关的想法和方法。
这里是Jupyter notebook,这里是包含主类对象的 Python 模块,供你使用。
图像来源:作者创作
上面我们展示了一个典型工业过程和一个‘单位过程时间’的示意图。假设一些原材料(图中的过程 I/P)进入一台复杂的机器,而成品(图中的过程 O/P)从另一端出来。
我们不需要知道机器内部究竟发生了什么,只需知道它在规律的时间间隔内生成一些数据,即我们可以以时间序列的方式测量过程状态(也许使用一些传感器)。我们想查看这个数据流并检测异常。
因此,为了定义我们的合成时间序列模块,我们至少需要以下内容,
-
过程开始时间
-
过程结束时间
-
单位过程时间(我们接收数据的间隔)
因此,这就是基本的SyntheticTS
类的定义开始,
为了生成异常,我们需要一个基准正常状态。我们可以字面上使用“正态分布”来实现。你可以根据具体的过程类型和情况随时更改,但绝大多数工业过程在其传感器测量方面确实遵循正态分布。
假设我们有一个工业过程/机器从 2021 年 5 月 1 日启动,并运行到 2021 年 5 月 6 日(一个典型的 6 天周期,通常在每周维护之前)。单位过程时间为 15 分钟。我们选择了过程的均值为 100,标准差为 5。
作为一种合成数据生成方法,你需要控制异常的以下特征,
-
需要异常的数据比例
-
异常的尺度(它们距离正常值的远近)
-
单侧或双侧(高于或低于正常数据的幅度)
我们不关心确切的代码,而是展示一些关键结果。
这是一个例子,
我们可以通过简单地改变anomaly_scale
参数,将异常放置在不同的距离上。
这是生成的图示。注意图示的纵轴刻度是如何随着异常的增大而变化的。
接下来,我们改变异常的比例(保持尺度为 2.0 不变)。
这是工业过程中相当常见的情况,过程中由于机器设置或其他原因的突然变化,导致出现明显的偏移。有时这是计划好的,有时则是无意的。根据情况,异常检测算法可能需要不同地分析和处理。无论如何,我们需要一种方法在合成数据中引入这种偏移。
在这种情况下,我们选择了数据的 10%偏移,即均值为pct_drift_mean=10
参数。请注意,如果我们不在方法中指定参数time_drift
,则代码会自动在整个过程的开始和结束时间的中点引入漂移。
在以下示例中,我们展示了一个情况,
-
数据在负方向上漂移
-
数据的扩展(方差)以及均值发生了变化
-
偏移从特定位置开始,用户可以选择该位置
这是一个更现实的情况。
在许多情况下,异常以块状出现并消失。我们也可以合成这种情况。请注意,这里我们创建了“左右侧异常”,但与所有其他选项类似,我们也可以创建“单侧”变异。
目前,代码创建的分块异常均匀分布在整个时间段内。但在下一次代码更新中,这可以通过单独的时间点和分块的异常特征进行自定义。
我们展示了一种简单直观的方法来创建具有各种异常签名的一维合成时间序列数据,这些异常在工业使用案例中很常见。这种合成数据生成技术对算法迭代和模型测试非常有用。
为了聚焦于工业使用案例,我们没有在基线数据生成中添加传统的时间序列模式(例如季节性、上升/下降趋势),并保持极其简单作为高斯过程。数据中也没有自回归特性。尽管像 ARIMA 这样的算法在金融和商业数据分析中非常受欢迎且有用,但工业环境中生成的独立传感器数据通常是正态分布的,我们遵循这一原则。
你可以在此基础上进行许多扩展并添加额外功能。以下是一些可能的功能:
-
将各种统计分布的选择作为基线数据生成过程
-
任意位置和特征的分块异常
-
多个合成数据类/对象的组合方法
-
更好的可视化方法
再次提示,Jupyter notebook 示例在此。请随意 fork 和实验。
您可以查看作者的 GitHub** 代码库 **,获取机器学习和数据科学中的代码、想法和资源。如果您像我一样对 AI/机器学习/数据科学充满热情,请随时 在 LinkedIn 上添加我 或 在 Twitter 上关注我。
简介: Tirthajyoti Sarkar 是 Adapdix Corp. 的数据科学/机器学习经理。他定期为 KDnuggets 和 TDS 等出版物贡献有关数据科学和机器学习的多种主题。他编著了数据科学书籍并参与开源软件的贡献。Tirthajyoti 拥有电子工程博士学位,并正在攻读计算数据分析的硕士学位。可以通过 tirthajyoti at gmail[dot]com 联系他。
相关内容:
-
使用合成数据教 AI 分类时间序列模式
-
3 种数据采集、注释和增强工具
-
使用 Gretel 和 Apache Airflow 构建合成数据管道
1. 谷歌网络安全证书 - 快速进入网络安全职业轨道。
2. 谷歌数据分析专业证书 - 提升您的数据分析能力
3. 谷歌 IT 支持专业证书 - 支持您的组织的 IT