1. 概览
在本实验中,您将使用 Vertex AI,用表格数据训练和部署一个模型。这是 Google Cloud 中提供的最新 AI 产品,目前处于预览版阶段。
学习内容
您将了解如何:
- 将托管式数据集上传到 Vertex AI
- 通过 AutoML 训练模型
- 将训练好的 AutoML 模型部署到端点,并使用该端点获取预测结果
在 Google Cloud 上运行此实验的总费用约为 22 美元 。
2. Vertex AI 简介
本实验使用的是 Google Cloud 上提供的最新 AI 产品。Vertex AI 将整个 Google Cloud 的机器学习产品集成到无缝的开发体验中。以前,使用 AutoML 训练的模型和自定义模型是通过不同的服务访问的。现在,该新产品与其他新产品一起将这两种模型合并到一个 API 中。您还可以将现有项目迁移到 Vertex AI。如果您有任何反馈,请参阅支持页面。
Vertex AI 包含许多不同的产品,可支持端到端机器学习工作流。本实验将重点介绍下面突出显示的产品:用于表格数据的 AutoML、Prediction 和 Workbench。

3. 设置环境
您需要一个启用了结算功能的 Google Cloud Platform 项目才能运行此 Codelab。如需创建项目,请按照此处的说明操作。
第 1 步:启用 Compute Engine API
前往 Compute Engine,如果尚未启用,请选择 启用。您需要启用此 API 才能创建笔记本实例。
第 2 步:启用 Vertex AI API
前往 Cloud 控制台的 Vertex AI 部分,然后点击 启用 Vertex AI API。

第 3 步:创建 Vertex AI Workbench 实例
在 Cloud 控制台的 Vertex AI 部分 中,点击“Workbench”:

然后,在用户管理的笔记本 中,点击新建笔记本:

然后,选择最新版本的 TensorFlow 企业版(提供长期支持) 实例类型 不带 GPU:

使用默认选项,然后点击创建 。
第 5 步:打开笔记本
创建实例后,选择打开 JupyterLab:

我们将使用此信用卡欺诈检测数据集中的数据来训练模型。我们将使用 BigQuery 中公开提供的此数据集的版本。
4. 创建托管式数据集
在 Vertex AI 中,您可以为各种数据类型创建托管式数据集。然后,您可以生成有关这些数据集的统计信息,并使用这些信息通过 AutoML 或您自己的自定义模型代码来训练模型。
第 1 步:创建数据集
在控制台的 Vertex 菜单中,选择 数据集:

在本实验中,我们将构建一个欺诈检测模型,以确定特定信用卡交易是否应归类为欺诈交易。
在“数据集”页面中,为数据集命名,然后依次选择表格 和回归/分类。然后创建 数据集:

您可以通过以下几种方式将数据导入到 Vertex 中的托管式数据集:
- 从计算机上传本地文件
- 从 Cloud Storage 中选择文件
- 从 BigQuery 中选择数据
在这里,我们将从公共 BigQuery 表上传数据。
第 2 步:从 BigQuery 导入数据
选择“从 BigQuery 中选择表或视图”作为导入方法,然后将以下内容复制到 BigQuery 表 框中:bigquery-public-data.ml_datasets.ulb_fraud_detection。然后选择继续:

导入数据集后,您应该会看到类似以下内容:

如果您愿意,可以点击生成统计信息 以查看有关此数据集的其他信息,但这不是继续执行下一步的必要条件。此数据集包含真实的信用卡交易。大多数列名称都已被遮盖,因此它们被称为 V1、V2 等。
5. 通过 AutoML 训练模型
上传托管式数据集后,我们就可以使用此数据训练模型了。我们将训练一个分类模型,以预测特定交易是否属于欺诈交易。 Vertex AI 为您提供了两种训练模型的选项:
- AutoML:只需极少的工作量和机器学习专业知识,即可训练出高质量模型。
- 自定义训练:使用 Google Cloud 的预构建容器或使用您自己的容器,在云端运行自定义训练应用。
在本实验中,我们将使用 AutoML 进行训练。
第 1 步:启动训练作业
在您在上一步中离开的数据集详情页面中,选择右上角的训练新模型 。选择分类 作为目标,保留为模型训练选择的 AutoML ,然后点击继续:

为模型命名,也可以使用默认名称。在目标列 下,选择类别 。这是一个整数,表示特定交易是否属于欺诈交易(0 表示非欺诈交易,1 表示欺诈交易)。
然后选择继续:

在此步骤中,向下滚动并点击以展开高级选项 。由于此数据集严重不平衡(不到 1% 的数据包含欺诈性交易),因此请选择 AUC PRC 选项,该选项将 最大限度地提高不太常见类别的精确率-召回率:

选择继续 ,然后继续执行最后一步(计算和定价)。在这里,输入 1 作为预算的节点时数,并保持启用早停法。通常,先对 AutoML 模型进行 1 个计算时的训练是个好主意,可以让您了解所选的特征和标签之间是否存在关系。然后,您可以修改特征并训练更长时间,以改进模型性能。接下来,选择开始训练 。
训练作业完成后,您将收到一封电子邮件。训练时间将略长于一小时,因为需要时间来启动和关闭资源。
6. 探索模型评估指标
在此步骤中,我们将了解模型的表现。
模型训练作业完成后,前往 Vertex 中的模型 标签页。点击您刚刚训练的模型,然后查看评估 标签页。这里有很多评估指标,我们将重点介绍两个:混淆矩阵 和特征重要性 。
第 1 步:了解混淆矩阵
混淆矩阵可以告诉我们测试集中每个类别下模型正确预测的样本百分比。对于像我们正在处理的这种不平衡数据集,与总体准确率相比,这是一个更好的模型性能衡量指标。
请注意,我们数据集中的欺诈交易示例不到 1%,因此,如果模型的准确率为 99%,则很可能只是随机猜测非欺诈类别,猜测正确的概率为 99%。这就是为什么查看模型在每个类别中的准确率是更好的指标。
如果您在评估 标签页中向下滚动,您应该会看到一个类似于以下内容的混淆矩阵(确切百分比可能会有所不同):

混淆矩阵显示,我们的初始模型能够正确分类测试集中 85% 的欺诈示例。这非常不错,尤其是考虑到我们数据集严重不平衡的情况。接下来,我们可以尝试训练模型更长时间,看看能否将准确率从 85% 提高。
第 2 步:查看特征重要性
在混淆矩阵下方,您应该会看到一个类似于以下内容的特征重要性图表:

这向我们展示了模型在进行预测时提供了最大信号的特征。特征重要性是可解释 AI 的一种类型,可解释 AI 是一个领域,其中包含各种方法,用于更深入地了解机器学习模型进行预测的方式。此处看到的特征重要性图表是通过查看模型对测试集的所有预测结果来计算的汇总结果。它向我们展示了一批示例中最重要的一些特征。
如果数据集中的大多数特征没有被遮盖,此图表会更有趣。例如,我们可能会了解到,交易类型(转账、存款等)是欺诈的最大指标。
在实际应用场景中,这些特征重要性值可用于帮助我们改进模型,并提高对模型预测结果的置信度。在下次训练模型时,我们可以尝试删除最不重要的特征,或者将两个更重要的特征结合为一个特征组合,看看是否能够提升模型性能。
我们在这里查看的是一批示例的特征重要性,但我们也可以在 Vertex AI 中获取单个预测的特征重要性。部署模型后,我们将了解如何执行此操作。
7. 将模型部署到端点
至此模型已经训练完成,下一步是在 Vertex 中创建端点。Vertex 中的一个模型资源可以关联多个端点,并且您可以在这些端点之间分摊流量。
第 1 步:创建端点
在模型页面上,前往部署和测试 标签页,然后点击部署到端点:

为端点命名,例如 fraud_v1,将“访问权限”设置为标准 ,然后点击继续 。
将流量拆分和机器类型保留为默认设置,点击完成 ,然后点击继续 。
我们将不会为此端点使用模型监控,因此您可以取消选择该选项,然后点击部署 。端点需要几分钟才能完成部署。完成后,您会在其旁边看到一个绿色对勾标记:

快完成了!现在,您就可以用部署的模型获取预测结果了。
8. 获取已部署模型的预测结果
您可以通过以下几种方式获取模型预测结果:
- Vertex AI 界面
- Vertex AI API
我们将在此处展示这两种方式。
第 1 步:在界面中获取模型预测结果
在显示端点的模型页面上(我们在上一步中离开的位置),向下滚动到测试模型 部分:

在这里,Vertex AI 为我们模型的每个特征选择了随机值,我们可以使用这些值来获取测试预测结果。如果您愿意,可以更改这些值。向下滚动到页面底部,然后选择预测 。
在页面的预测结果 部分中,您应该会看到模型预测的每个类别的百分比。例如,类别 0 的置信度分数为 0.99,这意味着您的模型认为此示例有 99% 的可能性是非欺诈交易。
第 2 步:使用 Vertex AI API 获取模型预测结果
界面是确保已部署的端点按预期运行的绝佳方式,但您很可能希望通过 REST API 调用动态获取预测结果。为了向您展示如何在此处获取模型预测结果,我们将使用您在本实验开始时创建的 Vertex Workbench 实例。
接下来,打开您创建的笔记本实例,然后从启动器打开 Python 3 笔记本:

在笔记本中,在单元格中运行以下命令以安装 Vertex SDK:
!pip3 install google-cloud-aiplatform --upgrade --user
然后,在笔记本中添加一个单元格,以导入 SDK 并创建对刚刚部署的端点的引用:
from google.cloud import aiplatform
endpoint = aiplatform.Endpoint(
endpoint_name="projects/YOUR-PROJECT-NUMBER/locations/us-central1/endpoints/YOUR-ENDPOINT-ID"
)
您需要将上述 endpoint_name 字符串中的两个值替换为您的项目编号和端点。您可以前往项目信息中心,然后获取“项目编号”值,以找到项目编号。
您可以在控制台的端点部分中找到端点 ID,如下所示:

最后,通过在新单元格中复制并运行以下代码,对端点进行预测:
test_instance={
'Time': 80422,
'Amount': 17.99,
'V1': -0.24,
'V2': -0.027,
'V3': 0.064,
'V4': -0.16,
'V5': -0.152,
'V6': -0.3,
'V7': -0.03,
'V8': -0.01,
'V9': -0.13,
'V10': -0.18,
'V11': -0.16,
'V12': 0.06,
'V13': -0.11,
'V14': 2.1,
'V15': -0.07,
'V16': -0.033,
'V17': -0.14,
'V18': -0.08,
'V19': -0.062,
'V20': -0.08,
'V21': -0.06,
'V22': -0.088,
'V23': -0.03,
'V24': 0.01,
'V25': -0.04,
'V26': -0.99,
'V27': -0.13,
'V28': 0.003
}
response = endpoint.predict([test_instance])
print('API response: ', response)
您应该会看到类别 0 的预测结果约为 .67,这意味着模型认为此交易有 67% 的可能性是非欺诈交易。
🎉 恭喜!🎉
您学习了如何使用 Vertex AI 执行以下操作:
- 上传托管式数据集
- 使用 AutoML 根据表格数据训练和评估模型
- 将模型部署到端点
- 使用 Vertex SDK 获取模型端点的预测结果
如需详细了解 Vertex AI 的不同部分,请参阅相关文档。
9. 清理
如果您想继续使用在本实验中创建的笔记本,建议您在不使用时将其关闭。在 Cloud 控制台的 Workbench 界面中,选择笔记本,然后选择停止 。
如果您想完全删除该笔记本,只需点击右上角的“删除”按钮即可。
如需删除已部署的端点,请前往 Vertex AI 控制台的端点 部分,然后从端点取消部署模型:

如需删除存储分区,请使用 Cloud 控制台中的导航菜单,浏览到“存储空间”,选择您的存储分区,然后点击“删除”:
