这是与MongoDB的Babu Srinivasan共同撰写的客座文章。
在今天快节奏的商业环境中,随着各行各业的发展,无法进行实时预测会给依赖准确和及时洞察力的行业带来重大挑战。各行业在没有实时预测的情况下面临紧迫的业务挑战,这可能会对决策和运营效率产生显著影响。缺乏实时洞察力使企业难以适应动态市场条件,准确预测客户需求,优化库存水平和做出积极的战略决策。金融、零售、供应链管理和物流等行业面临错失机会、增加成本、资源配置低效和无法满足客户期望的风险。通过探索这些挑战,组织可以认识到实时预测的重要性,并探索创新解决方案来克服这些障碍,使其能在今天快节奏的商业环境中保持竞争力、做出明智的决策并取得成功。
通过利用MongoDB本机时间序列数据功能,并将其与Amazon SageMaker Canvas的强大功能结合起来,企业可以克服这些挑战并释放新的灵活性。MongoDB强大的时间序列数据管理功能可以在实时中存储和检索大量时间序列数据,而先进的机器学习算法和预测能力则为SageMaker Canvas提供准确和动态的预测模型。
在本文中,我们将探索使用MongoDB的时间序列数据和SageMaker Canvas作为综合解决方案的潜力。
MongoDB Atlas
MongoDB Atlas是一个完全托管的开发者数据平台,简化了在云中部署和扩展MongoDB数据库。它是一个基于文档的存储,提供了一个完全托管的数据库,内置全文和向量搜索,支持地理空间查询,图表,以及对高效的时间序列存储和查询能力的本机支持。MongoDB Atlas提供自动分片、横向扩展和灵活的索引,以应对高容量数据摄入。其中,本机时间序列功能是一项突出的功能,使其非常适合处理大量的时间序列数据,如关键业务应用数据、遥测、服务器日志等。通过高效的查询、聚合和分析,企业可以从时间戳数据中提取有价值的见解。通过利用这些能力,企业可以高效地存储、管理和分析时间序列数据,实现数据驱动的决策并取得竞争优势。
Amazon SageMaker Canvas
Amazon SageMaker Canvas是一个视觉机器学习(ML)服务,使业务分析师和数据科学家能够构建和部署自定义的ML模型,而不需要任何ML经验或编写一行代码。SageMaker Canvas支持多个用例,包括时间序列预测,使企业能够准确预测未来需求、销售、资源需求和其他时间序列数据。该服务使用深度学习技术处理复杂的数据模式,使企业能够在最少历史数据的情况下生成准确的预测。通过使用Amazon SageMaker Canvas的能力,企业可以做出明智的决策,优化库存水平,提高运营效率并提升客户满意度。
SageMaker Canvas用户界面允许您无缝地整合云端或本地的数据源,轻松合并数据集,训练精确的模型,并在新兴数据上进行预测,所有这些都无需编码。如果您需要自动化工作流程或将ML模型直接集成到应用程序中,可以通过APIs访问Canvas的预测功能。
解决方案概述
用户将其交易时间序列数据存储在MongoDB Atlas中。通过Atlas Data Federation,数据被提取到Amazon S3存储桶中。Amazon SageMaker Canvas访问数据以构建模型和创建预测。预测结果存储在一个S3存储桶中。使用MongoDB Data Federation服务,预测结果通过MongoDB Charts以可视化的方式呈现。
下图给出了所提出的解决方案架构。
前提条件
对于这个解决方案,我们使用MongoDB Atlas存储时间序列数据,使用Amazon SageMaker Canvas训练模型并生成预测,以及使用Amazon S3存储从MongoDB Atlas提取的数据。
确保你具备以下前提条件:
配置MongoDB Atlas集群
按照创建集群中的说明创建一个免费的MongoDB Atlas集群。设置数据库访问和网络访问。
在MongoDB Atlas中填充时间序列集合
为了演示的目的,您可以使用来自Kaggle的样本数据集,使用MongoDB 工具,最好使用MongoDB Compass将其上传到MongoDB Atlas。
以下代码展示了一个时间序列集合的样本数据集:
{"store": "1 1","timestamp": { "2010-02-05T00:00:00.000Z"},"temperature": "42.31","target_value": 2.572,"IsHoliday": false}
以下截图展示了MongoDB Atlas中的样本时间序列数据:
创建一个S3存储桶
在AWS中创建一个S3存储桶,用于存储和分析时间序列数据。请注意我们有两个文件夹。sales-train-data
用于存储从MongoDB Atlas提取的数据,而sales-forecast-output
包含Canvas的预测结果。
创建数据联邦
在Atlas中设置数据联邦,并将之前创建的S3存储桶注册为数据源的一部分。请注意,在数据联邦中为Atlas集群、MongoDB Atlas数据的S3存储桶以及用于存储Canvas结果的S3存储桶中创建了三个不同的数据库/集合。
以下截图显示了数据联合的设置。
设置Atlas应用服务
创建MongoDB应用服务,使用$out聚合将数据从MongoDB Atlas集群传输到S3存储桶。
验证数据源配置
应用服务创建一个新的Atlas服务名称,需要在后续的函数中引用。验证Atlas服务名称是否已创建,并为以后的参考进行记录。
创建函数
设置Atlas应用服务以创建触发和函数。触发器需要按照业务需求设定定期将数据写入S3的时间频率。
以下脚本显示了向S3存储桶写入数据的函数:
exports = function () { const service = context.services.get(""); const db = service.db("") const events = db.collection(""); const pipeline = [ { "$out": { "s3": { "bucket": "<S3_bucket_name>", "region": "<AWS_Region>", "filename": {$concat: ["<S3path>/<filename>_",{"$toString": new Date(Date.now())}]}, "format": { "name": "json", "maxFileSize": "10GB" } } } } ]; return events.aggregate(pipeline);};
示例函数
可以通过“运行”选项卡运行函数,并使用应用服务中的日志功能进行调试。此外,还可以使用左侧窗格中的日志菜单进行调试。
以下截图显示了函数的执行情况及输出:
在亚马逊SageMaker Canvas中创建数据集
以下步骤假定您已创建了SageMaker域和用户配置文件。如果您尚未这样做,请确保配置SageMaker域和用户配置文件。在用户配置文件中,将S3存储桶配置为自定义,并提供存储桶名称。
完成后,导航至SageMaker Canvas,选择您的领域和个人资料,并选择Canvas。
创建一个提供数据源的数据集。
选择S3作为数据集来源
从S3存储桶中选择数据位置并选择创建数据集。
审查模式并点击创建数据集
导入成功后,数据集将显示在列表中,如以下屏幕截图所示。
训练模型
接下来,我们将使用Canvas设置模型训练。选择数据集并点击创建。
创建一个模型名称,选择预测分析,并选择创建。
选择目标列
接下来,点击配置时间序列模型,选择item_id作为项目编号列。
选择tm
作为时间戳列
为了指定您要预测的时间长度,选择8周。
现在你可以准备预览模型或启动构建过程。
预览模型或启动构建后,你的模型将被创建并需要最多四个小时。你可以离开屏幕,然后返回查看模型训练状态。
当模型准备好后,选择该模型并单击最新版本
查看模型指标和字段影响,如果对模型性能满意,请单击“预测”。
接下来,选择批量预测,并单击选择数据集。
选择你的数据集,并单击选择数据集。
接下来,单击“开始预测”。
在SageMaker的推断和批量转换作业下观察到一个作业创建或监视作业进度。
作业完成后,选择该作业,并记录Canvas存储预测的S3路径。
在Atlas Charts中可视化预测数据
要可视化预测数据,请基于联邦数据(amazon-forecast-data)创建MongoDB Atlas图表,其中包含P10、P50和P90的预测数据,如下图所示。
清理
- 删除MongoDB Atlas集群
- 删除Atlas数据联邦配置
- 删除Atlas应用服务App
- 删除S3存储桶
- 删除Amazon SageMaker Canvas数据集和模型
- 删除Atlas图表
- 从Amazon SageMaker Canvas登出
结论
在本文章中,我们从MongoDB时间序列集合中提取了时间序列数据。这是一个专门优化用于存储和查询时间序列数据的特殊集合。我们使用Amazon SageMaker Canvas训练模型并生成预测,并在Atlas图表中可视化了这些预测结果。
更多信息,请参考以下资源。
- 尝试使用MongoDB Atlas
- 尝试使用MongoDB Atlas时间序列
- 尝试使用Amazon SageMaker Canvas
- 尝试使用MongoDB Charts