亚马逊AWS官方博客
使用 Amazon Redshift ML 构建多分类模型
Amazon Redshift ML 通过使用简单的 SQL 语句使用 Amazon Redshift 中的数据创建和训练机器学习(ML)模型,简化了机器学习 (ML) 的操作。您可以使用 Amazon Redshift ML 来解决二进制分类、多分类和回归问题,并可以直接使用 AutoML 或 XGBoost 等技术。
这篇文章是 Amazon Redshift ML 系列的一部分。有关使用 Amazon Redshift ML 构建回归的更多信息,请参阅使用 Amazon Redshift ML 构建回归模型。
您可以使用 Amazon Redshift ML 自动执行数据准备、预处理和问题类型的选择,如这篇博客文章中所述。我们假设您非常了解自己的数据以及最适用于您使用案例的问题类型。本文将专注于使用多分类问题类型在 Amazon Redshift 中创建模型,该类型包括至少三个类别。例如,您可以预测交易是欺诈性的、失败的还是成功的,客户是否会将活跃状态保持 3 个月、6 个月、9 个月、12 个月,还是要将新闻标记为体育、世界新闻或是商业内容。
先决条件
作为实施此解决方案的先决条件,您需要设置启用机器学习(ML)功能的 Amazon Redshift 集群。有关这些准备步骤,请参阅使用 SQL 和 Amazon Redshift ML 在 Amazon Redshift 中创建、训练和部署机器学习模型。
使用案例
在我们的使用案例中,我们希望为一个特殊客户忠诚度计划找出最活跃的客户。我们使用 Amazon Redshift ML 和多分类模型来预测客户在 13 个月内将有多少个月内处于活动状态。这将转化为多达 13 个可能的分类,因此更适合采取多分类。预计活动状态将保持 7 个月或更长时间的客户将成为特殊客户忠诚度计划的目标群体。
输入原始数据
为了准备该模型的原始数据,我们使用公用数据集电子商务销售预测(其中包括英国在线零售商的销售数据)填充 Amazon Redshift 中的 ecommerce_sales 表。
输入以下语句以将数据加载到 Amazon Redshift:
要在您的环境中重现此脚本,请将 <<your-amazon-redshift-sagemaker-iam-role-arn>> 替换为适用于您的 Amazon Redshift 集群的 AWS Identity and Access Management (IAM) ARN。
机器学习(ML)模型的数据准备
现在我们的数据集已加载完毕,我们可以选择将数据拆分为三组分别进行训练 (80%)、验证 (10%) 和预测 (10%)。请注意,Amazon Redshift ML Autopilot 会自动将数据拆分为训练和验证,但是如果在此处就进行拆分,您将能够很好地验证模型的准确性。此外,我们将计算客户保持活跃的月数,因为我们希望模型能够根据新数据预测该值。我们在 SQL 语句中使用随机函数来拆分数据。请参阅以下代码:
训练集
验证集
预测集
在 Amazon Redshift 中创建模型
现在我们创建了训练和验证数据集,我们可以使用 Amazon Redshift 中的 create model 语句使用 Multiclass_Classification 创建我们的机器学习模型。我们指定问题类型,然后让 AutoML 处理其他的一切事务。在这个模型中,我们想要预测的目标是 nbr_months_active。Amazon SageMaker 创建了一个函数predict_customer_activity,我们将用它在 Amazon Redshift 中进行推断。请参阅以下代码:
要在环境中重现此脚本,请将 <<your-amazon-redshift-sagemaker-iam-role-arn>> 替换为集群的 IAM 角色 ARN。
验证预测
在此步骤中,我们将对照验证数据评估机器学习(ML)模型的准确性。
在创建模型时,Amazon SageMaker Autopilot 会自动将输入数据拆分为训练和验证集,并选择具有最佳客观指标的模型,该指标部署在 Amazon Redshift 集群中。您可以使用集群中的 show model 语句查看各种指标,包括准确性分数。如果没有明确指定,SageMaker 会自动使用目标类型的准确性。请参阅以下代码:
Show model ecommerce_customer_activity;
如以下输出所示,我们的模型的准确率为 0.996580。
键 | 值 |
模型名称 | ecommerce_customer_activity |
架构名称 | Public |
所有者 | Demo |
创建时间 | Mon, 22.03.2021 19:48:30 |
模型状态 | READY |
训练工作状态 | MaxAutoMLJobRuntimeReached |
validation:accuracy | 0.996580 |
预估成本 | 4.260437 |
训练数据: |
|
查询 | SELECT CUSTOMERID, COUNTRY, STOCKCODE, DESCRIPTION, INVOICEDATE, SALES_AMT, NBR_MONTHS_ACTIVE |
FROM ECOMMERCE_SALES_CLN_TRAINING | |
目标列 | NBR_MONTHS_ACTIVE |
参数: |
|
模型类型 | Auto |
问题类型 | MulticlassClassification |
问题类型 | Accuracy |
AutoML 任务名称 | 2021-03-07-19-48-30-960148-auto |
函数名称 | predict_customer_activity |
函数参数 | customerid country stockcode description invoicedate sales_amt |
函数参数类型 | int8 varchar varchar varchar varchar float8 |
让我们对验证数据使用以下 SQL 代码以对验证数据运行推理查询:
可以看到,在我们的数据集上预测的准确率位 99.74%,这与 show model 中的准确率相符。
predicted_matches | predicted_non_matches | total_predictions | pct_accuracy |
43489.00 | 132.00 | 43621.00 | 0.99697393 |
现在让我们运行一个查询,以至少活跃 7 个月为标准来查看哪些客户有资格参加我们的客户忠诚度计划:
下表显示了我们的输出结果。
customerid | predicted_months_active |
16895 | 8 |
18283 | 10 |
15044 | 11 |
16746 | 11 |
14702 | 11 |
16607 | 10 |
12901 | 10 |
15078 | 13 |
16393 | 10 |
15005 | 12 |
问题排查
尽管 Amazon Redshift 中的 Create Model 语句自动负责启动 SageMaker Autopilot 流程以构建、训练和调整最佳机器学习模型并在 Amazon Redshift 中部署该模型,但您可以查看在此过程中执行的中间步骤,如果出现问题,这还可以帮助您进行故障排除。您还可以从 show model 命令的输出中检索 AutoML Job Name。
创建模型时,您需要设置一个 Amazon Simple Storage Service (Amazon S3) 存储桶名称作为参数 s3_bucket 的值。您可以使用此存储桶在 Amazon Redshift 和 SageMaker 之间共享训练数据和构件。Amazon Redshift 会在此存储桶中创建一个子文件夹保存训练数据。训练完成后,除非将参数 s3_garbage_collect 设置为 off(可用于故障排除),否则它会删除子文件夹及其内容。有关更多信息,请参阅 CREATE MODEL。
有关使用 SageMaker 控制台和 Amazon SageMaker Studio 的信息,请参阅使用 Amazon Redshift ML 构建回归模型。
结论
Amazon Redshift ML 为数据库用户提供了使用 SQL 界面创建、训练和调整模型的合适平台。在这篇文章中,我们将向您介绍如何创建多类分类模型。我们希望您可以利用 Amazon Redshift ML 来帮助获得宝贵的见解。
有关使用 Amazon Redshift ML 构建不同模型的更多信息,请参阅使用 Amazon Redshift ML 构建回归模型并阅读 Amazon Redshift ML 文档。
鸣谢
根据 UCI 机器学习(ML)存储库的资讯,这些数据由公共分析组主任 Chen Daqing 博士提供。邮箱:chend@lsbu.ac.uk,地址:School of Engineering, London South Bank University, London SE1 0AA, UK.
Dua, D. and Graff, C.(2019)。UCI 机器学习(ML)存储库 [http://archive.ics.uci.edu/ml]。加利福尼亚州尔湾:加利福尼亚大学信息与计算机科学学院。