Vertex AI:使用 AutoML 构建欺诈检测模型

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。

Vertex 产品概览

3. 设置环境

您需要一个启用了结算功能的 Google Cloud Platform 项目才能运行此 Codelab。如需创建项目,请按照此处的说明操作。

第 1 步:启用 Compute Engine API

前往 Compute Engine,然后选择启用(如果尚未启用)。您需要用它来创建笔记本实例。

第 2 步:启用 Vertex AI API

前往 Cloud Console 的 Vertex AI 部分,然后点击启用 Vertex AI API

Vertex 信息中心

第 3 步:创建 Vertex AI Workbench 实例

在 Cloud Console 的 Vertex AI 部分中,点击“Workbench”:

Vertex AI 菜单

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

新建笔记本

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

TFE 实例

使用默认选项,然后点击创建

第 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。然后选择继续

导入 BQ 数据

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

导入的数据

您可以根据需要点击生成统计信息,查看此数据集的更多信息,但在继续执行下一步之前,您无需执行此操作。此数据集包含真实的信用卡交易。大多数列名称都经过了模糊化处理,因此称为 V1V2 等。

5. 使用 AutoML 训练模型

上传代管式数据集后,我们就可以用这些数据训练模型了。我们将训练一个分类模型,以预测特定交易是否存在欺诈行为。Vertex AI 为您提供了两种训练模型选择:

  • AutoML:只需极少的工作量和机器学习专业知识,即可训练出高质量模型。
  • 自定义训练:使用 Google Cloud 的某个预构建容器或您自己的容器在云端运行您的自定义训练应用。

在本实验中,我们将使用 AutoML 进行训练。

第 1 步:启动训练作业

在您在上一步中停下的数据集详情页面中,选择右上角的训练新模型。选择分类作为目标,为模型训练保留 AutoML 的选择,然后点击继续

模型训练第 1 步

为模型命名,或使用默认名称。在目标列下,选择课程。这是一个整数,表示特定交易是否存在欺诈行为(0 表示非欺诈,1 表示欺诈)。

然后选择 Continue

模型训练第 2 步

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

高级训练选项

选择继续,然后继续执行最后一步(计算和价格)。在这里,输入 1 作为预算的节点时数,并让早停法保持启用状态。通常,您可以先训练 AutoML 模型 1 个计算时,了解所选的特征和标签之间是否存在关系。之后,您可以修改特征并训练更长时间,以提升模型性能。接下来,选择开始训练

训练作业完成后,您会收到一封电子邮件。训练时间会略长于 1 小时,因为需要考虑启动和拆解资源的时间。

6. 探索模型评估指标

在此步骤中,我们将了解模型的效果。

模型训练作业完成后,前往 Vertex 中的模型标签页。点击您刚才训练的模型,然后查看评估标签页。这里有许多评估指标,我们将重点介绍其中的两个:混淆矩阵特征重要性

第 1 步:了解混淆矩阵

混淆矩阵会告诉我们测试集中“每个类别”下模型正确预测的样本比例。对于我们所处理的这种不平衡数据集,与整体准确性相比,这是一种更能衡量模型性能的指标。

请记住,数据集中不到 1% 的样本是欺诈性交易,因此,如果模型准确率为 99%,很可能 99% 的时间只是随机猜测非欺诈类别。因此,在这种情况下,查看模型对每个类别的准确性是一个更好的指标。

如果您在评估标签页上向下滚动,应该会看到类似如下的混淆矩阵(具体百分比可能会有所不同):

混淆矩阵

混淆矩阵显示,我们的初始模型能够正确分类测试集中 85% 的欺诈样本。这已经相当不错了,尤其是考虑到我们的数据集存在明显的不平衡性。接下来,我们可以尝试增加模型的训练计算时长,看看能否将准确率从 85% 提高。

第 2 步:查看特征重要性

在混淆矩阵下方,您应该会看到一个特征重要性图,如下所示:

特征重要性

这会显示在模型进行预测时哪些特征为模型提供了最强的信号。特征重要性是一种可解释 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,具体位置如下:

查找端点 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 Console 中的导航菜单,浏览到“存储空间”,选择您的存储桶,然后点击“删除”:

删除存储空间