65.9K
CodeProject 正在变化。 阅读更多。
Home

Azure Synapse Analytics 面向 SQL Server 大师 - 第三部分: 分析和使用结果

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.67/5 (3投票s)

2021年7月16日

CPOL

7分钟阅读

viewsIcon

4560

在本文中,我们将探讨如何查看和访问模型数据。

在本系列的第一篇文章中,我们概述了问题:我们虚构的 CEO 希望预测出租车使用情况,以确保在客户需要时和需要的地点提供出租车。在第二篇文章中,我们将 SQL 数据导入 Azure 并构建了模型来解决问题。在本文中,我们将深入探讨如何使用模型的输出来为 CEO 提供运营业务所需的信息。

我们通过 Azure Machine Learning Studio 访问我们的实验,类似于 Azure Synapse Analytics 的 Studio 界面。我们可以通过此界面观察正在运行和已完成的作业,包括有关作业、错误和机器学习引擎本身的信息。我们还可以从模型中获取统计输出。

我们的模型是一个程序化模型,我们通过向其输入变量来测试它。根据输入,模型确定输出应该是什么。

查看模型详细信息

当我们打开 Azure Machine Learning Studio 时,它会向我们显示最近运行的列表。我们可以使用此屏幕确定运行的状态。

我们可以通过单击菜单中的“自动化 ML”选项来选择仅查看自动化 ML 运行,如下图所示。

模型”菜单项显示由机器学习引擎标记的最佳模型。

每次运行的最终统计数据(指标)都可用。

Azure SDK for Python 中的可解释性包可以通过解释模型行为来告诉我们更多关于模型的信息。

一旦完成操作,引擎会生成特定文件作为其输出的一部分。这些文件有助于部署消费模型。

获取输入和输出

有两种方法可以消费模型:实时端点或 Web 服务。为了我们的目的,我们使用 Web 服务。

我们需要上传一些文件来创建 Web 服务。我们需要一个 Python 文件来初始化 Web 服务并添加所需的依赖项。

当部署模型以执行模型时,我们创建一个计算实例。其他文件包含所需的依赖项,我们可以从计算实例的配置列表中进行选择。

我们需要一个名为入口脚本的 Python 脚本文件来定义 Web 服务的接口。当我们部署 Web 服务时,Azure Machine Learning Studio 会上传此文件和其他文件。Python 脚本包含一个 init 函数和一个 run 函数。

我们可以在 init 函数中定义我们的输入和输出数据结构。例如

import joblib
import json
import numpy as np
import os
 
from inference_schema.schema_decorators import input_schema, output_schema
from inference_schema.parameter_types.numpy_parameter_type import NumpyParameterType
 
def init():
    global model
    model_path = 'azureml-models/dnmay25demows-hourlyzonedemand-20210616103935-Best/2/dnmay25demows-hourlyzonedemand-20210616045820_artifact/model.pkl')
    # Deserialize the model file back into a sklearn model.
    model = joblib.load(model_path)
 
input_sample = np.array([[1068143, 2017, 10, 14, 11, 7]])
output_sample = np.array([4])
 
@input_schema('data', NumpyParameterType(input_sample))
@output_schema(NumpyParameterType(output_sample))
def run(data):
    try:
        result = model.predict(data)
        # You can return any JSON-serializable object.
        return result.tolist()
    except Exception as e:
        error = str(e)
        return error

当我们在 JSON 结构中传递输入参数调用 Web 服务时,我们可以从响应中的 JSON 结构中读取结果。

现在,我们需要编写一个例程来查询 Web 服务,使用一个简单的 Python 脚本,如下所示:

import requests
import json
 
ws_uri = '<web service URI>'
key = '<security key or token>'
 
data = {"data":
        [
            [
                2017,
                1,
                1,
                17,
                1
            ]
        ]
        }
# Convert to JSON
input_data = json.dumps(data)
 
headers = {'Content-Type': 'application/json'}
headers['Authorization'] = f'Bearer {key}'
 
ws_response = requests.post(ws_uri, input_data, headers=headers)
print(ws_response.text)

我们的模型返回一个 JSON 结构,其中包含给定输入最可能的解决方案。在我们的模型中,只是一个整数。

我们可以提供数据结构中堆叠的多个输入数组,并获得一个包含单个结果的数组。

由于 Web 服务是标准调用,我们可以使用我们选择的语言。Microsoft 提供了几个关于如何使用模型的示例。

将结果重新导入 SQL

使用 Azure Synapse Analytics 的便利之一是其集成能力。我们可以在 SQL Server 中创建表并在 Azure Spark 中查询它。反之亦然。

我们的模型由两个独立的部分组成,因此我们最终得到两个 Web 服务终结点。我们现在必须首先调用“获取路线”Web 服务。我们将数据传递给 Web 服务,它返回客户在该日期最有可能进行的行程列表。

我们现在拆分返回的列表,然后使用相同的信息加上行程索引构建数据结构。然后,我们将此结构传递给“获取需求”Web 服务。

Web 服务返回该行程的预期呼叫次数。我们将此数据写入 Python DataFrame,然后将 DataFrame 写入专用 SQL Server 中的表。一个 Python 笔记本示例展示了如何将 DataFrame 导入专用服务器,尽管我们必须根据我们的具体需求调整确切的代码。

在我们的例子中,我们使用 PySpark 笔记本调用 Web 服务。该笔记本将结果保存在专用 SQL Server 实例上名为 FcstZoneDemand 的表中。表结构如下:

一旦我们的表填充完毕,我们就可以执行存储的部署过程。此过程将预期需求与预期供应进行比较,并确定存在供应不足的地方。然后它确定平衡这种短缺的最佳来源。最后,它将这些结果写入部署表作为建议的部署计划。

分析我们的结果

我们的数据存储在 Parquet 表中,并使用 SQL 查询在我们的 Azure 无服务器数据库上进行查询。我们的专用实例保存区域距离数据以加快部署。我们没有高效地编写过程,但它确实有效。

预测模型的输出存储在专用 SQL 数据库中的名为“FcstZoneDemand”的表中。两个辅助表增加了部署过程:预测期内的供过于求和供不应求详情。

当我们通过预测期和区域连接这些表时,结果使我们能够查看未来时期。我们可以看到部署如何平衡供需。使用 Power BI,我们可以为 CEO 提供他们做出决策所需的信息。

下方的图表来自 Synapse Studio SQL 脚本编辑器,我们可以在其中将数据视为图表并将其下载为图像。此图表显示了我们的模型生成的预期需求。我们可以可视化 24 小时内单个区域的需求如何变化。从这个需求中,我们可以看到在何时何地车辆过多或过少。

在这种情况下,建议的部署与供不应求情况一致,因此来自附近区域的供应足以满足需求。如果这种供不应求大于可用供应,则该区域将需要等待出租车。

此图表显示建议的供应总量。部署模型从最近的区域获取供应,直至可用供应。之后,它查看下一个最近的区域,持续直到需求达到平衡。

查看输出,我们很高兴预测代表了现实。工作日开始时的供应过剩表明这可能是一个商业区。人们可能会从其他区域乘坐出租车到这里下车。一天结束时,随着人们叫出租车回家,需求增加。

CEO 应该对这种经济高效的隔夜解决方案感到满意。

后续步骤

在本系列的第一篇文章中,我们讨论了如何使用 Azure Synapse Analytics 将 SQL 数据转换为模型,以确保我们公司的出租车在客户需要时和需要的地点可用。在第二篇文章中,我们从现有 SQL Server 导入了数据。我们采用了机器学习模型来预测出租车需求并将我们的车辆发送到需要它们的地点。然后,在当前文章中,我们探讨了如何检索机器学习结果并查看该数据。

尽管本文探讨了如何使用 Azure Synapse Analytics 和 SQL 数据来预测和响应出租车需求,但您可以将相同的技术用于类似供需情况,从服务到产品。这些工具使用您现有数据来发现您需要的高效业务决策所需的见解。

要了解有关 Azure Synapse Analytics 如何帮助您的组织充分利用数据的更多信息,请注册观看Azure Synapse Analytics 动手培训系列。本系列的每个会话都由 Azure Synapse 工程师主讲,它将教您:

  • 启动您的第一个 Synapse 工作区
  • 构建无代码 ETL 管道
  • 本地连接到 Power BI
  • 连接和处理流数据
  • 使用无服务器和专用查询选项
© . All rights reserved.