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、Predictions 和 Workbench。
3. 设置您的环境
您需要一个启用了结算功能的 Google Cloud Platform 项目才能运行此 Codelab。如需创建项目,请按照此处的说明操作。
第 1 步:启用 Compute Engine API
前往 Compute Engine,然后选择启用(如果尚未启用)。您需要用它来创建笔记本实例。
第 2 步:启用 Vertex AI API
前往 Cloud Console 的 Vertex AI 部分,然后点击启用 Vertex AI API。
第 3 步:创建 Vertex AI Workbench 实例
在 Cloud Console 的 Vertex AI 部分中,点击“Workbench”:
然后,在用户管理的笔记本中,点击新建笔记本:
然后选择最新版本的 TensorFlow 企业版(带 LTS)实例类型,不带 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
。然后选择 Continue:
导入数据集后,您应该会看到如下内容:
如果需要,您可以点击生成统计信息,查看有关此数据集的更多信息,但在执行下一步之前,您不需要这样做。此数据集包含真实的信用卡交易。大多数列名称都经过了模糊化处理,因此称为 V1
、V2
等。
5. 使用 AutoML 训练模型
上传代管式数据集后,我们就可以用这些数据训练模型了。我们将训练一个分类模型来预测特定交易是否具有欺诈性。Vertex AI 为您提供了两种训练模型选择:
- AutoML:只需极少的工作量和机器学习专业知识,即可训练出高质量模型。
- 自定义训练:使用 Google Cloud 的某个预构建容器或您自己的容器在云端运行您的自定义训练应用。
在本实验中,我们将使用 AutoML 进行训练。
第 1 步:启动训练作业
在数据集详情页面中,从您在上一步停下的位置选择右上角的训练新模型。选择分类作为目标,保留为模型训练选择 AutoML,然后点击继续:
为模型命名,也可以使用默认值。在目标列下,选择类。这是一个整数,用于指明特定交易是否具有欺诈性(0
表示非欺诈,1
表示欺诈)。
然后选择 Continue:
在此步骤中,向下滚动并点击以展开高级选项。由于此数据集严重不平衡(不到 1% 的数据包含欺诈性交易),因此请选择 AUC PRC 选项,以便针对不太常见的类别最大限度地提高精确率和召回率:
选择继续,然后继续执行最后一步(计算和价格)。在这里,输入 1 作为预算的节点时数,并使早停法保持启用状态。通常,您可以先训练 AutoML 模型 1 个计算小时,以便了解所选的特征和标签之间是否存在关系。之后,您可以修改特征并训练更长时间,以提升模型性能。接下来,选择开始训练。
训练作业完成后,您会收到一封电子邮件。考虑到启动和拆解资源所需的时间,训练需要的时间略多一个小时。
6. 探索模型评估指标
在此步骤中,我们将了解模型的表现。
模型训练作业完成后,前往 Vertex 中的模型标签页。点击您刚刚训练的模型,然后查看评估标签页。这里的评估指标有很多,我们将重点关注两个:混淆矩阵和特征重要性。
第 1 步:了解混淆矩阵
混淆矩阵告诉我们测试集中每个类别中模型正确预测的样本所占的百分比。对于像我们所处理的数据集这样的不均衡数据集,与整体准确率相比,这种方法能够更好地衡量模型的性能。
请记住,数据集中不到 1% 的样本是欺诈性交易,因此如果模型准确率为 99%,很可能 99% 的时间只是随机猜测非欺诈类别。因此,在这里查看模型在每个类别中的准确率是一种更好的指标。
如果您在评估标签页上向下滚动,应该会看到类似如下的混淆矩阵(具体百分比可能会有所不同):
混淆矩阵显示,我们的初始模型能够正确分类测试集中 85% 的欺诈性样本。这相当不错,尤其是考虑到数据集明显不平衡。接下来,我们可以尝试训练模型,增加计算时间,看看是否能从这 85% 的提升中提高。
第 2 步:了解特征重要性
在混淆矩阵下方,您应该会看到如下所示的特征重要性图表:
这显示了在进行预测时为模型提供最大信号的特征。特征重要性是 Explainable 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)
您应该会在 .67
左右看到针对类别 0 的预测结果,这表示模型认为此交易非欺诈的可能性为 67%。
🎉 恭喜!🎉
您学习了如何使用 Vertex AI 执行以下操作:
- 上传代管式数据集
- 使用 AutoML 基于表格数据训练和评估模型
- 将模型部署到端点
- 使用 SDK for Vertex 在模型端点上获取预测结果
如需详细了解 Vertex AI 的不同部分,请参阅相关文档。
9. 清理
如果您想继续使用在本实验中创建的笔记本,建议您在不使用时将其关闭。在 Cloud 控制台的 Workbench 界面中,选择相应笔记本,然后选择停止。
如果您想完全删除该笔记本,只需点击右上角的“删除”按钮即可。
如需删除已部署的端点,请前往 Vertex AI 控制台的端点部分,然后从端点中取消部署模型:
如需删除存储桶,请使用 Cloud Console 中的导航菜单,浏览到“存储空间”,选择您的存储桶,然后点击“删除”: