今天,空气污染是一个熟悉的环境问题,它会造成严重的呼吸和心脏疾病,对健康构成严重威胁。 酸雨、臭氧层消耗和全球变暖也是空气污染的不利后果。 需要智能监控和自动化,以防止严重的健康问题以及在极端情况下危及生命的情况。 空气质量是通过空气中污染物的浓度来衡量的。 及早发现症状并在危险之前控制污染物水平至关重要。 识别空气质量和污染物重量异常并快速诊断根本原因的过程是困难、昂贵且容易出错的。
应用 AI 和基于机器学习 (ML) 的解决方案来查找数据异常的过程涉及以正确的格式摄取、管理和准备数据,然后在很长一段时间内优化和维护这些 ML 模型的有效性。时间。 这一直是快速实施和扩展 ML 功能采用的障碍之一。
这篇文章向您展示了如何使用集成解决方案 亚马逊监视指标 和 亚马逊 Kinesis 数据流水线 通过快速轻松地摄取流数据并随后检测您感兴趣的关键性能指标中的异常来打破这些障碍。
Lookout for Metrics 自动检测和诊断业务和运营数据中的异常(异常值)。 这是一项完全托管的 ML 服务,它使用专门的 ML 模型根据数据的特征检测异常情况。 例如,趋势和季节性是时间序列指标的两个特征,其中基于阈值的异常检测不起作用。 趋势是指标值的连续变化(增加或减少)。 另一方面,季节性是系统中出现的周期性模式,通常上升到基线以上,然后再次下降。 您无需 ML 经验即可使用 Lookout for Metrics。
我们展示了一个常见的空气质量监测场景,在该场景中我们检测到空气中污染物浓度的异常。 在本文结束时,您将了解如何使用这些来自 AWS 的托管服务来帮助预防健康问题和全球变暖。 您可以将此解决方案应用于其他用例,以实现更好的环境管理,例如检测水质、土地质量和电力消耗模式等异常情况。
解决方案概述
该架构由三个功能块组成:
- 放置在战略位置的无线传感器可感知空气中一氧化碳 (CO)、二氧化硫 (SO2) 和二氧化氮 (NO2) 的浓度水平
- 流式数据摄取和存储
- 异常检测和通知
该解决方案提供了从传感器一直到向用户发出通知的全自动数据路径。 您还可以使用 Lookout for Metrics UI 与解决方案进行交互,以分析识别的异常。
下图说明了我们的解决方案体系结构。
先决条件
在继续解决方案之前,您需要满足以下先决条件。 对于这篇文章,我们使用 us-east-1 区域。
- 下载 Python 脚本 (发布.py) 和数据文件从 GitHub回购.
- 打开
live_data.csv
在您喜欢的编辑器中归档并将日期替换为今天和明天的日期。 例如,如果今天的日期是 8 年 2022 月 XNUMX 日,则替换2022-03-25
2022-07-08
. 保持格式不变。 这是使用 IoT 模拟器脚本模拟当前日期的传感器数据所必需的。 - 创建 亚马逊简单存储服务 (Amazon S3) 存储桶和一个名为
air-quality
. 在里面创建一个子文件夹air-quality
命名historical
。 有关说明,请参见 建立资料夹. - 上载
live_data.csv
根 S3 存储桶中的文件和historical_data.json
在历史文件夹中。 - 创建 AWS 云9 开发环境,我们使用它来运行 Python 模拟器程序来为此解决方案创建传感器数据。
使用 AWS IoT Core 和 Kinesis Data Firehose 摄取和转换数据
我们使用 Kinesis Data Firehose 传输流从 AWS IoT核心 并将其交付给 Amazon S3。 完成以下步骤:
- 在Kinesis Data Firehose控制台上,选择 创建传递流.
- 针对 来源,选择 直接PUT.
- 针对 目的地,选择 Amazon S3.
- 针对 传输流名称,输入您的传输流的名称。
- 针对 S3斗,输入您创建的存储桶作为先决条件。
- 输入值 S3 存储桶前缀 和 S3 存储桶错误输出前缀. 需要注意的关键点之一是为 Amazon S3 目标配置的自定义前缀的配置。 此前缀模式确保根据 Lookout for Metrics 预期的前缀层次结构在 S3 存储桶中创建数据。 (本文稍后会详细介绍。)有关自定义前缀的更多信息,请参阅 Amazon S3 对象的自定义前缀.
- 针对 缓冲间隔,输入
60
. - 创建或更新 IAM 角色.
- 创建传递流.
现在我们配置 AWS IoT Core 并运行空气质量模拟器程序。 - 在 AWS IoT Core 控制台上, 创建 AWS IoT 策略 称为管理员。
- 在导航窗格下 消息路由,选择 规则.
- 建立规则.
- 使用 Kinesis Data Firehose(firehose) 操作.
这会将数据从 MQTT 消息发送到 Kinesis Data Firehose 传输流。 - 创建.
- 使用名称创建 AWS IoT 事物
Test-Thing
并附加您创建的策略。 - 下载 AWS IoT Core 的证书、公钥、私钥、设备证书和根 CA。
- 将每个下载的文件保存到
certificates
您之前创建的子目录。 - 上传 publish.py 到
iot-test-publish
文件夹中。 - 在 AWS IoT Core 控制台的导航窗格中,选择 个人设置.
- 下 自定义端点,复制端点。
此 AWS IoT Core 自定义终端节点 URL 对于您的 AWS 账户和区域而言是个人的。 - 更换
customEndpointUrl
使用您的 AWS IoT Core 自定义终端节点 URL、带有证书名称的证书,以及Your_S3_Bucket_Name
使用您的 S3 存储桶名称。
接下来,您安装 pip 和适用于 Python 的 AWS IoT 开发工具包。 - 登录 AWS Cloud9 并在您的开发环境中创建一个工作目录。 例如:
aq-iot-publish
. - 在新工作目录中为证书创建一个子目录。 例如:
certificates
. - 通过从命令行运行以下命令来安装适用于 Python v2 的 AWS IoT 开发工具包。
- 要测试数据管道,请运行以下命令:
您可以在以下屏幕截图中看到有效负载。
最后,将数据传递到前缀结构中的指定 S3 存储桶。
文件数据如下:
{"TIMESTAMP":"2022-03-20 00:00","LOCATION_ID":"B-101","CO":2.6,"SO2":62,"NO2":57}
{"TIMESTAMP":"2022-03-20 00:05","LOCATION_ID":"B-101","CO":3.9,"SO2":60,"NO2":73}
时间戳显示每个文件包含 5 分钟间隔的数据。
使用最少的代码,我们现在已经摄取了传感器数据,从摄取的数据创建了一个输入流,并根据 Lookout for Metrics 的要求将数据存储在 S3 存储桶中。
在以下部分中,我们将更深入地了解 Lookout for Metrics 中的构造,以及使用 Lookout for Metrics 控制台配置这些概念是多么容易。
创建检测器
检测器是监视数据集并以预定义频率识别异常的 Lookout for Metrics 资源。 检测器使用 ML 来查找数据中的模式,并区分数据的预期变化和合法异常。 为了提高其性能,检测器会随着时间的推移更多地了解您的数据。
在我们的用例中,检测器每 5 分钟分析一次来自传感器的数据。
要创建检测器,请导航到 Lookout for Metrics 控制台并选择 创建检测器. 提供检测器的名称和描述(可选),以及 5 分钟的间隔。
默认情况下,您的数据使用 AWS 为您拥有和管理的密钥加密。 您还可以配置是否要使用与默认使用的加密密钥不同的加密密钥。
现在让我们将此检测器指向您希望它运行异常检测的数据。
创建数据集
数据集告诉检测器在哪里可以找到您的数据以及要分析哪些指标以发现异常。 要创建数据集,请完成以下步骤:
- 在 Amazon Lookout for Metrics 控制台上,导航到您的检测器。
- 添加数据集.
- 针对 名字,输入名称(例如,
air-quality-dataset
). - 针对 数据源,选择您的数据源(对于这篇文章,Amazon S3)。
- 针对 探测器模式,选择您的模式(对于这篇文章, 持续).
使用 Amazon S3,您可以在两种模式下创建检测器:
-
- 回溯测试 – 该模式用于发现历史数据中的异常。 它需要将所有记录合并到一个文件中。
- 持续 – 此模式用于检测实时数据中的异常情况。 我们在用例中使用此模式,因为我们希望在从空气监测传感器接收空气污染物数据时检测异常。
- 输入实时 S3 文件夹和路径模式的 S3 路径。
- 针对 数据源间隔,选择 5分钟间隔.如果您有检测器可以从中学习模式的历史数据,您可以在此配置期间提供它。 数据的格式应与您用于执行回测的格式相同。 提供历史数据可加快 ML 模型训练过程。 如果这不可用,则连续检测器会在进行推断之前等待足够的数据可用。
- 对于这篇文章,我们已经有了历史数据,所以选择 使用历史数据.
- 输入S3路径
historical_data.json
. - 针对 文件格式, 选择 JSON行.
此时,Lookout for Metrics 访问数据源并验证它是否可以解析数据。 如果解析成功,它会给您一条“验证成功”消息并带您进入下一页,您可以在其中配置度量、维度和时间戳。
配置度量、维度和时间戳
措施 定义要跟踪异常的 KPI。 每个检测器最多可以添加五个度量。 用于从源数据创建 KPI 的字段必须是数字格式。 目前可以通过执行 SUM 或 AVERAGE 来聚合时间间隔内的记录来定义 KPI。
尺寸 使您能够通过定义类别或细分来对数据进行切片和切块。 这允许您跟踪特定度量适用的整个数据集的子集的异常情况。
在我们的用例中,我们添加了三个度量,它们计算在 5 分钟间隔内看到的对象的 AVG,并且只有一个维度,用于测量污染物浓度。
数据集中的每条记录都必须有时间戳。 以下配置允许您选择表示时间戳值的字段以及时间戳的格式。
下一页允许您查看您添加的所有详细信息,然后保存并激活检测器。
然后检测器开始学习流入数据源的数据。 在这个阶段,检测器的状态变为 Initializing
.
请务必注意 Lookout for Metrics 开始检测异常之前所需的最低数据量。 有关要求和限制的更多信息,请参阅 寻找指标配额.
通过最少的配置,您创建了检测器,将其指向数据集,并定义了您希望 Lookout for Metrics 发现异常的指标。
可视化异常
Lookout for Metrics 为想要使用 AWS管理控制台 分析检测到的异常。 它还提供通过 API 查询异常的能力。
让我们看一个从我们的空气质量数据用例中检测到的异常示例。 以下屏幕截图显示了在指定时间和日期检测到的空气中 CO 浓度异常,严重性评分为 93。它还显示了维度对异常的贡献百分比。 在这种情况下,100% 的贡献来自位置 ID B-101 维度。
创建警报
Lookout for Metrics 允许您使用各种渠道发送警报。 您可以配置必须触发警报的异常严重性评分阈值。
在我们的用例中,我们将警报配置为发送到 亚马逊简单通知服务 (Amazon SNS) 通道,该通道反过来发送 SMS。 以下屏幕截图显示了配置详细信息。
您还可以使用警报来触发自动化 AWS Lambda 功能以在 AWS IoT Core 上驱动 API 驱动的操作。
结论
在这篇博文中,我们向您展示了如何轻松使用 Lookout for Metrics 和 Kinesis Data Firehose 来消除管理构建 ML 支持的异常检测应用程序的端到端生命周期所涉及的无差别繁重工作。 该解决方案可以帮助您加快发现关键业务指标异常的能力,并让您将精力集中在发展和改进业务上。
我们鼓励您通过访问 Amazon Lookout for Metrics开发人员指南 并使用与您的业务 KPI 相关的数据集试用这些服务支持的端到端解决方案。
关于作者
德拉伊·塔库尔(Dhiraj Thakur) 是Amazon Web Services的解决方案架构师。 他与AWS客户和合作伙伴合作,提供有关企业云采用,迁移和策略的指南。 他对技术充满热情,并喜欢在分析和AI / ML领域中进行构建和试验。