机器学习与人工智能早已从科幻概念走入日常:无论是在你的手机上,还是在企业里,它们都在赋能业务、颠覆并增强各类决策流程。
据 GlobalNewsWire 调研,AI/ML 市场预计在 2029 年增长至 1.4 万亿美元。PwC 2022 年 AI 商业调查显示,86% 的受访者称 AI 技术已成为其公司的主流组成部分,52% 的受访者正在加速采用 AI/ML。
下面是一个使用 Redshift AI/ML 能力改善业务的案例。Jobcase 是领先的在线求职平台,需要为全美超过 1.1 亿注册会员进行职位匹配,为他们推荐高质量岗位,同时也帮助雇主招聘合格人才。其推荐系统会生成职位推荐、搜索建议与公司推荐。借助 AI/ML,Jobcase 将会员参与度指标提升了 5% ,带来更好的会员体验、更高留存与相应的收入增长;同时把测试时间从 1–2 个月缩短到不到一周,无需将数据迁移到单独的 ML 环境,提升了可扩展性,并将数十亿次预测的耗时从 4–5 小时降至约 15 分钟。详见案例《Jobcase Scales ML Workflows to Support Billions of Daily Predictions Using Amazon Redshift ML》。
再看一个例子:Magellan Rx Management(Magellan Health 旗下)基于 Amazon Redshift ML 构建 MRx Predict 解决方案,用来开发并交付预测分析:预测未来药品成本、识别将驱动未来趋势的药物,以及主动识别有用药不依从风险的患者。在此之前,数据分析师与临床人员需要手工将新药归类到正确的治疗领域。借助 Redshift ML,他们现在用标准 SQL来预测药物治疗领域,在保持高度临床准确性的同时,显著提升了运营效率。详见博客《How Magellan Rx Management Used Amazon Redshift ML to Predict Drug Therapeutic Conditions》。
本章将覆盖端到端的机器学习生命周期(Machine Learning Cycle) ,并介绍 Amazon Redshift ML 如何为组织内的多种角色提供工具,以利用机器学习技术驱动创新。我们还将深入不同的机器学习算法,并通过示例演示如何使用与 Amazon SageMaker Autopilot 的集成来预测一个“人机街头竞速”的虚构赛果。随后我们会延续学生信息系统数据集,讲解使用 Amazon Redshift ML 预测学生结果。我们也会说明某些 ML 问题无法通过 SageMaker Autopilot 解决,这时可用Amazon SageMaker 与 Amazon Redshift 的集成,通过 SageMaker Canvas 访问 Redshift 数据来构建模型;模型就绪后,可借助SageMaker 集成——自带模型(BYOM)在 Redshift 中执行推理。最后,我们将介绍Amazon Redshift ML 的成本。
机器学习生命周期(Machine Learning Cycle)
典型 ML 步骤(见图 6-1)包括:数据采集、数据准备与清洗、模型与算法选择、训练环境搭建、模型训练、模型评估与调优、生产部署与扩缩容,以及最终用预测驱动业务决策。
模型质量直接受数据质量影响。错误或过期的数据会产生错误或不相关的预测。因此,建模前需清洗数据:移除无用数据、补全缺失值、去除重复值,并在必要时转换数据类型;有时还需重构数据集、转置行列或调整索引。另外要将数据集划分为训练集与测试集,以在训练后评估模型准确度。一个好的训练集应相关、缺失与重复最少,且对各类子类别/类别有良好代表性。使用 Amazon Redshift ML 时,可直接利用数据仓库中已清洗与校验的数据作为建模来源。
图 6-1. 典型 ML 全流程
当数据集准备好后,需要选择模型类型。模型决定了在所收集数据上运行某个 ML 算法后会得到的输出。应选择与当前任务相关的模型。科学家与工程师已开发出多种模型,如线性回归、决策树、最近邻、随机森林等,分别适用于语音识别、图像识别、预测等多种场景。除模型类型外,还应根据数据是数值型还是分类型选择合适的算法。
确定模型类型后,需要搭建训练环境:配置训练所需的基础设施,并决定数据/代码/模型的存储位置;为目标模型选择合适的计算资源;安装必要的软件、IDE、框架与算法,正式开启你的 ML 之旅。
在训练环境中对模型进行训练、调试与调优是一个迭代过程;准备就绪后,需要部署到生产环境,验证预测并监控性能。该步骤通常需要扩缩基础设施以满足模型执行的性能期望与业务 SLA。
以上仅是高层回顾,但足以说明:直到找到与你用例最佳匹配的模型之前,ML 通常是一个高强度且反复迭代的过程。
Amazon Redshift ML
为解决业务问题,组织会使用监督学习、无监督学习、强化学习等技术(详见后文“Machine Learning Techniques”)。这些技术的实施通常需要理解快速演进的工具与技术栈。Amazon Redshift ML 让数据分析师、数据科学家、业务决策者可以用熟悉的 SQL 来创建、训练与部署模型。只需编写 CREATE MODEL 命令,并传入 Redshift 中的必要数据。
当 Redshift ML 执行 CREATE MODEL 命令时,会安全地将数据从 Redshift 导出到 Amazon S3,调用 Amazon SageMaker Autopilot 进行数据准备与训练,并最终通过 Amazon SageMaker Neo 将训练好的模型优化并以 SQL 函数的形式提供给 Redshift(见图 6-2)。
换句话说,Redshift ML 在底层与 S3、SageMaker、Redshift 等云服务协同,使你能用SQL 查询简化建模流程。
图 6-2. Amazon Redshift ML 架构
Redshift ML 使用 Amazon SageMaker 来构建与训练模型。SageMaker 是一项全托管服务,提供准备数据、构建/训练/部署模型与运行预测的基础设施、工具与工作流。
SageMaker Autopilot 会预处理训练数据(例如用替代值填补缺失),以尽可能保留数据信息;它能识别分类型列的特征(如国家/州/邮编),并正确格式化用于训练;之后选择最佳预处理器、识别最契合的算法与超参数,以获得最准确的预测模型。
模型训练完成后,SageMaker Neo 对模型进行部署优化,并将其作为SQL 函数提供给 Redshift。你可以在查询、报表与仪表盘中直接调用该函数对数据进行推理。这一切都由 CREATE MODEL 命令自动完成(详见“Create Model”)。
Redshift ML 的灵活性(Amazon Redshift ML Flexibility)
CREATE MODEL 默认选项为 AUTO ON。在 AUTO ON 下,Redshift ML 会将指定数据导出到 S3,并调用 SageMaker Autopilot 来自动完成数据准备、选择合适的预置算法并进行训练;Redshift ML 负责 Redshift、S3 与 SageMaker 之间的交互,屏蔽训练与编译的细节。模型训练完成后,Redshift ML 会在你的数据仓库中注册一个 SQL 函数。
AUTO OFF 适用于高级用户:当你已知应使用的模型类型与超参数时,可关闭自动发现,从而缩短建模时间,并对模型训练进行更细粒度控制。
图 6-3. Redshift ML 的多层次灵活通道
如图所示,Redshift ML 覆盖不同层次的 ML 知识背景:
- 数据分析师只需会 SQL,即可用 AUTO 选项快速上手,无需了解算法细节或 Python/R;
- 数据科学家可基于自身算法经验定向调参;
- 同时支持 BYOM(自带模型) (详见“Integration with Amazon SageMaker—Bring Your Own Model (BYOM)”):在 SageMaker 环境中自选运行时与计算类型来构建/训练/调优,然后将模型导入 Redshift 执行推理,或用 Redshift 数据远程调用 SageMaker 推理。
Redshift ML 入门(Getting Started with Amazon Redshift ML)
要让 Redshift 具有 ML 能力,需要显式授予其访问 SageMaker 的权限——通过配置与绑定 IAM 角色来完成。
最佳实践是分离建模与推理权限。示例 6-1 展示了两类组:
model_create_grp:有创建模型权限;model_user_grp:有执行模型推理权限。
示例 6-1. Redshift ML 权限授予
GRANT CREATE MODEL TO GROUP model_create_grp;
GRANT EXECUTE ON MODEL demo_ml.ml_model TO GROUP model_user_grp;
Redshift 支持多种“语言”,除默认的 SQL 外,还可在表 SVV_LANGUAGE_PRIVILEGES 中查询所有语言及授予给用户/角色/组的权限。Redshift ML 也作为一种语言出现(名称 mlfunc)。
当你执行授权语句以允许创建模型时,Redshift 会为 ML 语言授予相应权限(见示例 6-2)。
示例 6-2. 语言权限
SELECT
language_name,
privilege_type,
identity_type,
identity_name,
identity_id,
admin_option
FROM
svv_language_privileges;
示例结果(节选):
language_name privilege identity_type identity_name identity_id admin_option
c USAGE public public 0 false
internal USAGE public public 0 false
mlfunc USAGE group model_create_grp 834679 false
plpgsql USAGE public public 0 false
sql USAGE public public 0 false
plpythonu USAGE public public 0 false
机器学习技术(Machine Learning Techniques)
机器学习模型会在你的数据中寻找模式,并将这些模式应用到新数据上以生成预测。ML 技术有很多种,这里概括为三大类:
监督学习(Supervised machine learning)
算法分析带标签的数据,学习如何将输入映射到输出标签。常用于分类与预测。
无监督学习(Unsupervised machine learning)
与监督学习不同,它不以预测某个既定结果为目的,因此被视为无标签。算法通过聚类数据、识别簇内相似性来发现模式。典型用途包括推荐系统与定向广告。
强化学习(Reinforcement learning)
这种技术让模型以类似人类试错的方式学习。它面向处于特定环境中的数字智能体:在类似游戏的场景中,智能体通过一系列决策来追求正确结果。凭借反复试错,智能体学习“该做什么/不该做什么”,并据奖励/惩罚信号强化或抑制相应行为。通过这种训练,ML 模型可被用于遵循指令、进行测试、操作设备等。
支持范围:Amazon Redshift ML 支持监督与无监督学习;由于强化学习较复杂,虽可在 Amazon SageMaker 中使用,但 Redshift ML 不支持强化学习。
监督学习技术(Supervised Learning Techniques)
监督学习是最常见的 ML 方法:你从包含输入列与输出列的训练集开始。输入属性称为特征(features) ,输出属性称为标签(labels) 。训练集用于让算法学会准确分类或预测标签。
Redshift ML 支持两类监督学习问题:分类与回归(你的用例只会落在其中一种)。
-
分类(Classification) :把数据分到特定类别。
- 二分类(Binary) :预测两种结果之一,如识别垃圾邮件、预测客户是否流失。
- 多分类(Multiclass) :在多种结果中选其一,如预测某用户最可能感兴趣的哪一张信用卡。
-
回归(Regression) :学习从输入变量到连续输出的映射函数;建模自变量(特征)与因变量(标签)的关系,用于预测实数(整数/浮点),如销售收入、客户总支出等。
- 若输入按时间顺序,这是时间序列预测(forecasting)问题,由预测模型求解。
Amazon Forecast 是全托管的时间序列预测服务,结合统计与 ML 算法生成预测。Redshift ML 支持借助 Amazon Forecast 构建预测模型,用历史数据预测未来事件。常见用例:用零售历史定价/库存与订单预测需求;结合制造与销售历史预测订货量;根据网站历史流量预测负载等。
注:Redshift 里的 Forecast 模型受 Forecast 的配额限制(如最多 100 个预测,可通过工单调整)。删除 Redshift 中的某个预测模型并不会自动删除 Amazon Forecast 中的相关资源。
无监督学习技术(Unsupervised Learning Techniques)
无监督学习用算法在无需人工标注的情况下分析数据集、发现隐藏模式,常用于识别异常/离群点。Redshift ML 通过 SageMaker 支持三类无监督问题:聚类、关联、降维(一个用例可同时涉及多类问题)。
- 聚类(Clustering) :按相似性/差异性把无标签数据分组,并识别离群点。如 k-means 将相似数据点划入 k 个簇(k 控制组数与粒度),目标是簇内相似、簇间差异。常用于客群细分:例如信用卡公司按消费行为将会员分群以投放差异化活动。
- 关联(Association) :用关联规则发现变量间关系,典型如“买了此商品的用户也购买了……”的推荐问题。
- 降维(Dimensionality reduction) :当特征(输入列)过多时,减少输入维度至可管理规模且尽量保真,如编码器去除图像噪声以改善画质。
机器学习算法(Machine Learning Algorithms)
上面介绍了问题类型,这里列出可用于求解的算法。更深入的映射关系与细节,可参阅 Amazon SageMaker 内置算法文档。
监督学习(Redshift ML 支持):
- XGBoost(极端梯度提升) :对梯度提升树的高效开源实现,具备效率/灵活/可移植/高精度等特点。适用于回归、二分类、多分类与排序(Ranking) 。排序问题会为每个候选打分并据此选出 Top-N。参见博客 Introducing the Open-Source Amazon SageMaker XGBoost Algorithm Container。
- 多层感知机(MLP) :监督式深度学习方法,训练多层前馈神经网络,可学习线性+非线性关系。常用于图像分类、语音识别、机器翻译等。
- 线性模型(Linear Learner) :用于分类/回归。提供带标签数据,算法学习线性函数或(分类时)线性阈值函数。用例:预测商品销量、评估营销效果、预测客户购买意愿等。SageMaker 的 Linear Learner 会自动探索不同训练目标/度量,并从验证集选择最优解。
无监督学习(通过 SageMaker 构建后 BYOM 导入 Redshift 使用):
- RCF(Random Cut Forest) :基于聚类思想的异常检测算法,为每个数据点输出异常分数;分数低通常代表“正常”,高代表“异常”。常以均值±3σ之外视作异常(具体阈值依业务而定)。
- k-means:需先定义相似性所用属性,算法把数据划成 k 个离散组,使组内尽可能相似、组间尽可能不同。适合从随机分布的集合中自动分组相似对象。
提示:RCF 与 k-means 需在 SageMaker 中训练,再以 BYOM(Bring Your Own Model) 的方式导入 Redshift;相关流程在“Integration with Amazon SageMaker—Bring Your Own Model (BYOM)”中说明。
与 Amazon SageMaker Autopilot 的集成(Integration with Amazon SageMaker Autopilot)
Amazon SageMaker 是面向数据科学家与开发者的全托管机器学习服务,用于构建、训练并直接部署模型到可投产的托管环境。
Amazon Redshift ML 利用 Amazon SageMaker Autopilot:它会基于你的数据训练并调优多个机器学习模型,并保留准确率最高的模型。Autopilot 提供自动数据清洗、自动数据预处理、以及针对线性回归、二分类、多分类的自动算法选择;同时支持自动超参数调优(HPO) 、分布式训练、自动选择实例与集群规模。
借助 Amazon SageMaker Autopilot,你可以在 Amazon Redshift 中轻松构建模型,而无需深入掌握机器学习理论。
创建模型(Create Model)
接下来做一个实践:假设你要预测一次未来感十足的街头赛跑(人类 vs. 机器)的结果。你拥有以往比赛的历史数据:比赛所在城市、比赛时的天气、路况、需跑的距离、人类与机器的速度,以及实际结果——人类是否获胜(是/否)。当然,我们为人类应援!
你需要用于训练的表,以及一个用于存放训练产物的 Amazon S3 存储桶。示例 6-3 的代码会为你准备好表:一个训练表(用于训练 ML 模型),一个推理表(用于做预测)。稍后(示例 6-4)会看到 CREATE MODEL 语法。
示例 6-3. 准备 race 模式与数据表
CREATE SCHEMA race;
CREATE TABLE race.speed_training(
city varchar(10),
machine_distance decimal,
human_distance decimal,
weather varchar(5),
road_condition varchar(5),
machine_speed decimal,
human_speed decimal,
human_win_y_n boolean);
COPY race.speed_training
FROM 's3://redshift-demos/ANT402/training.csv'
region 'us-east-1'
iam_role default
csv delimiter ',';
CREATE TABLE race.speed_inference(
city varchar(10),
machine_distance decimal,
human_distance decimal,
weather varchar(5),
road_condition varchar(5),
machine_speed decimal,
human_speed decimal,
human_win_y_n boolean);
COPY race.speed_inference
FROM 's3://redshift-demos/ANT402/inference.csv'
region 'us-east-1'
iam_role default
csv delimiter ',';
在示例 6-4中,Amazon SageMaker Autopilot 会为你完成大部分工作,自动找出最合适的模型来预测人类是否会赢。我们声明标签列为 human_win_y_n(True/False)。由于目标是二值,Autopilot 会判断这是二分类问题,并选择准确率最高的算法。
示例 6-4. 创建模型
CREATE MODEL race.human_vs_machine
FROM race.speed_training
TARGET human_win_y_n
FUNCTION fnc_will_human_win
IAM_ROLE default
SETTINGS (
S3_BUCKET 'my_ml_bucket',
MAX_RUNTIME 10800);
此处将 MAX_RUNTIME 设得高于默认 5400 秒(1.5 小时),以确保能成功生成模型可解释性报告(见表 6-3)。
使用 示例 6-5 的 SHOW MODEL 查看模型状态。留意 Model State 是否已就绪。首次创建时状态通常为 TRAINING。
示例 6-5. 查看模型
SHOW MODEL race.human_vs_machine;
表 6-1. SHOW MODEL——TRAINING(训练中)
Key Value
Model Name human_vs_machine
Schema Name race
Owner model_create_user
Creation Time Tue, 12.12.2023 05:10:15
Model State TRAINING
…
当状态为 READY 时,流程完成,可开始使用模型。你可以查看objective 与对应的验证分数来判断准确率。如下表 6-2 所示,目标为 f1,分数 0.93432(即 93.43% )。Estimated Cost 为得到该模型所需的 SageMaker 处理小时估算。更高准确率通常意味着更高成本;相关成本见“Amazon Redshift ML Costs”。
表 6-2. SHOW MODEL——READY(就绪)
Key Value
Model Name human_vs_machine
Schema Name race
Owner model_create_user
Creation Time Tue, 12.12.2023 05:10:15
Model State READY
Training Job Status MaxAutoMLJobRuntimeReached
validation:f1_binary 0.93432
Estimated Cost 20.805736
TRAINING DATA:
Table race.speed_training
Target Column HUMAN_WIN_Y_N
PARAMETERS:
Model Type xgboost
Problem Type BinaryClassification
Objective F1
AutoML Job Name redshiftml-20230114201510598817
Function Name fnc_will_human_win
fnc_will_human_win_prob
Function Parameters city machine_distance human_distance
weather road_condition machine_speed
human_speed
Function Parameter Types varchar numeric numeric
varchar varchar numeric
numeric
IAM Role default-aws-iam-role
S3 Bucket my_ml_bucket
Max Runtime 3800
一般**>80%** 的准确率可视为“不错”;可按用例重要性继续调优以追求更高。
要做推理,只需在 SQL 中调用函数 fnc_will_human_win。别忘了为需要推理的身份授予EXECUTE 权限(示例 6-6)。
示例 6-6. 使用模型做推理
SELECT
city,
machine_distance,
human_distance,
weather,
road_condition,
machine_speed,
race.fnc_will_human_win
(city,
machine_distance,
human_distance,
weather,
road_condition,
machine_speed,
human_speed) AS predicted
FROM
race.speed_inference;
最佳实践:准备一份未参与训练的数据来验证 F1——对比推理结果与真实标签。
上例展示了仅需提供训练表与目标列,即可借助 Autopilot 训练模型。Redshift ML 也支持在 CREATE MODEL 中通过用户引导参数指定模型类型、问题类型、目标度量、预处理器等(示例 6-7)。若你已知这些信息,显式指定可减少建模时间与成本。某些场合需要自定义算法或预处理器,也可在此指定。完整参数详见 CREATE MODEL 文档。
示例 6-7. 完整的 CREATE MODEL 语法
CREATE MODEL model_name
FROM { table_name | ( select_statement ) }
TARGET column_name
FUNCTION function_name
IAM_ROLE { default }
[ MODEL_TYPE { XGBOOST | MLP | LINEAR_LEARNER} ]
[ PROBLEM_TYPE (
REGRESSION | BINARY_CLASSIFICATION |
MULTICLASS_CLASSIFICATION ) ]
[ OBJECTIVE ( 'MSE' | 'Accuracy' | 'F1' | 'F1Macro' | 'AUC') ]
[ PREPROCESSORS ( TRANSFORMERS ) ]
SETTINGS (
S3_BUCKET 'bucket',
S3_GARBAGE_COLLECT { ON | OFF },
KMS_KEY_ID 'kms_key_id',
MAX_CELLS integer,
MAX_RUNTIME integer (, ...)
);
其中 S3_GARBAGE_COLLECT 用于在模型就绪后自动清理用于存放训练产物的 S3 存储桶。如果关闭该选项,你可以按 BYOM(自带模型)策略再利用这些文件(见“Integration with Amazon SageMaker—Bring Your Own Model (BYOM)”):
- 若 Redshift 数据仓库被删除,可用这些文件重建推理函数;
- 可用于模型版本管理(重训前归档旧版本);
- 可在一个 Redshift 仓库上训练,却在另一个仓库上直接暴露模型而无需再次训练。
标签概率(Label Probability)
标签(label)是你要预测的值。以 human_vs_machine 为例:预测人类是否获胜,两个标签分别是 true/false。标签概率为每个标签赋予一个发生概率。你可以调用 fnc_will_human_win_prob 函数,得到各标签出现的百分比可能性。当以 AUTO ON 创建模型且问题类型为二分类或多分类时,该概率功能可用。
标签概率按行计算,且无需实际运行 ML 模型;你可以在推理数据集上先获得期望结果的指示。
fnc_will_human_win_prob 由 Redshift ML 自动创建(在你提供的函数名 fnc_will_human_win 后加 _prob 后缀)。
示例 6-8. 标签概率
SELECT
race.fnc_will_human_win_prob
(city,
machine_distance,
human_distance,
weather,
road_condition,
machine_speed,
human_speed)
FROM
race.speed_inference
LIMIT 5;
示例输出(节选):
{"probabilities":[0.98792028,0.01207972],"labels":["f","t"]}
{"probabilities":[0.99937975,0.00062025],"labels":["f","t"]}
{"probabilities":[0.91194165,0.08805832],"labels":["t","f"]}
{"probabilities":[0.95782197,0.04217804],"labels":["t","f"]}
{"probabilities":[0.93414819,0.06585180],"labels":["t","f"]}
可以看到:前两行中人类获胜的概率较低;后面三行则较高。
解释模型(Explain Model)
在机器学习中,作为模型输入的自变量称为特征(feature) 。在 Redshift ML 中,用于建模的列即该模型的特征。
explain_model 命令(示例 6-9)会生成模型可解释性报告,其中包含所有特征的 Shapley 值。Shapley 值用于衡量每个特征对预测的贡献度;值越大,说明该特征对预测结果的影响越大(它是所有可能特征取值组合上的平均边际贡献)。
示例 6-9. 解释模型
SELECT explain_model('race.fnc_will_human_win_prob');
表 6-3. 解释模型结果(节选)
{"explanations":{"kernel_shap":{"label0":{
"expected_value":-0.5694439538988466,
"global_shap_values":{
"city":0.2865426473431818,
"human_distance":0.8485933955733828,
"human_speed":0.4954490773124456,
"machine_distance":0.8925393014624781,
"machine_speed":0.7125560417928333,
"road_condition":1.0487996886952989,
"weather":1.460974788708901
}}}},"version":"1.0"}
从结果可见:city 与 human_speed 的影响较小;road_condition(1.04) 与 weather(1.46) 影响更大。你或许能据此推断:人或机器在适应天气与路况方面存在明显差异。
explain_model 基于 Amazon SageMaker Clarify(提供模型可解释性工具)。详见 Amazon SageMaker Clarify Model Explainability。
若模型训练因 MAX_RUNTIME 被中断,explain_model 可能报错;此时可增大 MAX_RUNTIME 并重新训练后再生成报告。
使用 Amazon Redshift ML 预测学生结果(Using Amazon Redshift ML to Predict Student Outcomes)
在第 3 章,我们讨论了“学生信息学习分析数据集(Student Information Learning Analytics Dataset)”。现在用你已了解的 Amazon Redshift ML,基于该学生学习数据集构建一个预测学生成绩结果(pass 通过、fail 不通过、withdraw 退课、distinction 优异)的模型;你还将确定影响学生表现的最重要因素。
首先,从历史数据创建一个训练数据集表。该表包含学生人口统计信息、从学习管理系统(LMS)采集的数据,以及学生测评的分数。你将把这些输入作为特征来构建 ML 模型,预测学生的最终结果列 final_result。
示例 6-10 中的表 tbl_student_lmsactivities_and_score 由 student_info、student_lms 的点击次数聚合、以及 student_assessment 的分数聚合连接得到。这是一项重要的特征工程工作——即通过透视/汇总数据,使所有输入都能进入训练/推理流程。
示例 6-10. OpenLearn ML 模型特征
CREATE TABLE tbl_student_lmsactivities_and_score AS
SELECT
st.school_id, st.id_student, st.code_module,
st.code_presentation, st.gender, st.region,
st.highest_education, st.imd_band, st.age_band,
st.num_of_prev_atteempts, st.studied_credits,
st.disability, st.final_result,
st_lms_clicks.sum_of_clicks, scores.total_score,
scores.mean_score
FROM
openlearnm.student_info st
LEFT JOIN
(SELECT school_id, code_module,
code_presentation, id_student,
sum(sum_click) AS sum_of_clicks
FROM
OPENLEARNM.student_lms
GROUP BY 1,2,3,4) st_lms_clicks
ON st.school_id = st_lms_clicks.school_id
AND st.code_module = st_lms_clicks.code_module
AND st.code_presentation = st_lms_clicks.code_presentation
AND st.id_student = st_lms_clicks.id_student
LEFT JOIN
(SELECT
school_id, id_student,
sum(score) AS total_score,
avg(score) AS mean_score
FROM
openlearnm.student_assessment
GROUP BY 1,2) scores
ON st.school_id = scores.school_id
AND st.id_student = scores.id_student
;
接着,在表 tbl_student_lmsactivities_and_score 上运行 CREATE MODEL 命令以调用 Amazon SageMaker Autopilot。
示例 6-11. OpenLearn 创建模型
CREATE MODEL student_result
FROM tbl_student_lmsactivities_and_score
TARGET final_result
FUNCTION fnc_final_result
IAM_ROLE default
SETTINGS (
S3_BUCKET 'my_ml_bucket',
MAX_RUNTIME 10800
)
;
与前一节类似,这里将 MAX_RUNTIME 设为高于默认的 5400 秒(1.5 小时) ,以确保能成功生成表 6-3 中的模型可解释性报告。
现在可执行 SHOW MODEL 查看 Autopilot 选择的模型细节。表 6-4 显示其选择了准确率 87% 的模型;由于需要在多种可能标签(Withdrawn、Pass、Distinction、Fail)中进行判定,它将问题类型确定为多分类。
示例 6-12. 查看模型
show model student_result;
表 6-4. SHOW MODEL 输出
Key Value
Model Name student_result
Schema Name public
Owner model_create_user
Creation Time Sun, 05.03.2024 18:54:11
Model State READY
validation:accuracy 0.870610
Estimated Cost 29.814964
TRAINING DATA:
Table tbl_student_lmsactivities_and_score
Target Column FINAL_RESULT
PARAMETERS:
Model Type xgboost
Problem Type MulticlassClassification
Objective Accuracy
AutoML Job Name redshiftml-20230305185411524819
Function Name fnc_final_result
fnc_final_result_prob
Function Parameters id_student code_module code_presentation
gender region highest_education imd_band
age_band num_of_prev_atteempts
studied_credits disability sum_of_clicks
total_score mean_score
Function Parameter
Types int4 varchar varchar
bpchar varchar varchar varchar
varchar int2
int2 bpchar int8
int8 int8
IAM Role default-aws-iam-role
S3 Bucket my_ml_bucket
Max Runtime 10800
最后,执行 explain_model 查看 Shapley 值。如示例 6-13 所示:gender、region、num_of_prev_attempts 与 disability 的影响远小于 age_band(0.51)、highest_education(0.59)与 studied_credits(0.66)。其中 sum_of_clicks(0.99) 似乎是决定学生表现的最重要因素。sum_of_clicks 表示与虚拟学习环境的交互次数。基于该模型,可以预期:提升与虚拟学习环境的互动应能改善学生结果——比如在线上课程内容间穿插随堂小测。
示例 6-13. 解释模型 student_result
SELECT
t.r.explanations.kernel_shap.label0.global_shap_values
FROM (SELECT
explain_model('student_result') AS r
) AS t
;
示例输出(global_shap_values):
“age_band”:0.510843481387332466, “code_module”:0.1775745286500845,
“code_presentation”:0.09353407379714834, “disability”:0.051944180058839748,
“gender”:0.05065581722765354, “highest_education”:0.592895528627924518,
“id_student”:0.00000483678127755, “imd_band”:0.033637420953443259,
“mean_score”:0.2120711173613374, “num_of_prev_attempts”:0.05241636943859941,
“region”:0.13375708054846678, “studied_credits”:0.6551317963150247,
“sum_of_clicks”:0.9983975396249064, “total_score”:0.25218934352064467
Amazon SageMaker 与 Amazon Redshift 的集成(Amazon SageMaker Integration with Amazon Redshift)
前文介绍了用户如何用 SQL 创建模型并执行推理。对于在 Amazon SageMaker 中构建与训练模型的数据科学家,Amazon SageMaker Studio 提供一个基于 Web 的可视化 IDE,可访问完成全部 ML 工作所需的工具。SageMaker Notebooks(Jupyter Notebook)是常用界面,用于准备/处理数据、编写训练代码、把模型部署到 SageMaker 托管并进行测试/验证。第“Amazon Redshift Data API”节介绍的 Redshift Data API 简化了连接管理;Notebook 已预装访问该 API 所需的库,便于在 SageMaker 中直接利用 Redshift 数据进行高级 ML 训练。
Amazon SageMaker Canvas 允许业务分析师在无需写代码/无需 ML 专业知识的情况下构建模型。一旦为用户授予访问 Amazon Redshift 的权限,即可通过下推到 Redshift的 SQL 查询与连接导入数据,充分利用 Redshift 的原生特性。
与 Amazon SageMaker 集成——自带模型(BYOM, Bring Your Own Model)
对于在 Amazon Redshift 之外创建的高级 ML 模型,只要满足 Redshift ML 的要求,你就可以将其引入 Amazon Redshift 执行推理。你可以导入这些预训练模型,用于本地推理或远程推理。这些模型既可能基于 Redshift 数据训练(见“Amazon SageMaker 与 Amazon Redshift 的集成”),也可能基于其他数据源训练。
将你自己的 SageMaker 模型带到 Amazon Redshift,需满足以下条件:
- 模型必须在 SageMaker 中接受 CSV 格式输入(content type 为 text/csv)。
- 端点(endpoint)必须由与 Amazon Redshift 数据仓库相同 AWS 账户托管。
- 模型输出必须是单一值,其类型与创建推理函数时声明的类型一致。
- 模型必须接受空值(以空字符串形式传入)。
- SageMaker 端点需具备足够资源以承载来自 Redshift 的推理调用,或启用自动扩缩。
BYOM 本地(BYOM Local)
示例 6-14 展示了本地推理的语法。你可以指定 SageMaker 训练作业名,或该作业生成的 .tar.gz 模型产物在 S3 的位置。模型会被存为本地编译的 Redshift 函数。
示例 6-14. BYOM 本地
CREATE MODEL public.predict_customer_churn
FROM 'job_customer_churn-xxxxxxxxxx'
FUNCTION fn_customer_churn(int)
RETURNS decimal(8,7)
iam_role 'arn:aws:iam::123456789012:role/myRSMLrole';
使用 BYOM 本地模型进行推理时,Redshift 本地调用 SQL 函数生成预测,不经过 SageMaker。
BYOM 远程(BYOM Remote)
你也可以在 Redshift 中引用 SageMaker 模型端点进行远程推理。示例 6-15 展示了语法。关键字 sagemaker 告诉 Redshift ML:该模型通过 SageMaker 远程推理。
远程 BYOM 推理时,在 SageMaker 端调用模型并返回预测结果。
示例 6-15. BYOM 远程
CREATE MODEL public.remote_random_cut_forest
FUNCTION fn_remote_rcf(int)
RETURNS decimal(10,6)
sagemaker 'randomcurforest-xxxxxxxxxx'
iam_role 'arn:aws:iam::123456789012:role/myRSMLrole';
更多创建模型的用例,参见 create model use cases。
Amazon Redshift ML 成本(Costs)
Redshift ML 在训练阶段使用 SageMaker,因此训练一定产生成本。启用 Redshift ML 本身不另收费。在 Redshift 本地预测不产生 SageMaker 费用;远程预测(经 SageMaker 端点)会产生 SageMaker 费用。
CREATE MODEL 提供 MAX_RUNTIME 与 MAX_CELLS 用于在训练时控制成本、时长与潜在精度:
- MAX_RUNTIME
默认 5400 秒(90 分钟) ,即 SageMaker 训练的最长期限。调低可减少 SageMaker 计算时间与费用。 - MAX_CELLS
默认 1,000,000 cells(一个 cell 是数据集中单个数据点)。例如 12 列 × 20,000 行 = 240,000 cells。设更小值会让 Redshift ML 选用更小训练集,从而降低成本与训练时间。
训练完成后,Redshift 还需要时间在本地编译与安装模型,因此你可能会看到 CREATE MODEL 的总耗时超过设定的 MAX_RUNTIME。
当训练集实际 cells 超过 MAX_CELLS,Redshift 会随机抽样减少记录数量,以在降低规模的同时减少偏差并保持良好预测效果。
MAX_CELLS 与 MAX_RUNTIME 设得过低,可能导致无法产出模型,或得到精度较低的模型。
大多数用例在100 万 cells以内,训练成本通常低于 $20。若超过 100 万 cells,定价随规模递增,例如:
- 前 1000 万 cells: $20 / 百万
- 接下来的 9000 万: $15 / 百万
- 1 亿以上: $7 / 百万
示例:1.25 亿 cells 费用计算
前 1000 万 = 10 × $20 = $200
后 9000 万 = 90 × $15 = $1350
超出 1 亿 2500 万 = 25 × $07 = $175
------------------------------------
合计 1.25 亿 cells $1825
------------------------------------
训练期间,因在 S3 存放训练数据与模型产物,还会产生S3 存储费用。默认 垃圾回收(S3_GARBAGE_COLLECT=ON) 会在模型创建后自动清理这些临时数据,从而最小化 S3 成本。
总结(Summary)
本章介绍了可在 Redshift ML 中解决的部分 ML 用例:我们讨论了如何用 CREATE MODEL 在 Redshift 内直接启动监督学习来解决分类/回归;也讲解了如何在 SageMaker 中利用无监督学习(聚类、关联、降维)并通过内置连接器从 Redshift 导入训练数据,随后再以 BYOM 策略回到 Redshift 中进行推理。
全书多次提到数据共享(Data Sharing)在现代数据战略中的作用:它既能实现工作负载的隔离与独立扩缩,又能为用户提供统一数据平台。下一章将介绍数据共享的不同用例、如何在同账户/同区域或跨账户/跨区域设置 data-share,以及如何使用 Amazon DataZone 管理数据共享的访问。