AWS AI Blog新闻
使用 Snowflake、Amazon SageMaker Canvas 和 Amazon Quick 构建无代码机器学习工作流——第 1 部分:设置 Snowflake 环境
本教程是系列文章的第一部分,介绍如何设置 AWS 账户和 Snowflake 环境,为使用 Amazon SageMaker Canvas 构建无代码机器学习工作流奠定基础。该工作流旨在帮助医疗、零售和生命科学领域的业务分析师等非技术用户,无需编写代码即可探索数据、构建预测模型并生成洞察。本部分详细说明了创建 Snowflake 数据库、仓库和示例欺诈检测数据表的步骤。
医疗、零售和生命科学组织在Snowflake等云数据仓库中生成海量的运营数据。虽然这些系统能够高效地存储和扩展信息,但将这些数据转化为有意义的预测仍然是一项挑战。传统的机器学习(ML)方法需要专业团队、漫长的开发周期和大量的工程支持,这造成了延迟,并限制了最了解数据的业务用户的试验空间。
无代码ML工作流改变了这一格局。
借助Amazon SageMaker Canvas,您可以探索数据集、准备特征、构建预测模型并以可视化方式生成洞察,无需编写代码,也无需依赖数据科学资源。业务分析师、产品负责人和运营团队可以在保持企业安全性和治理能力的同时加速决策。
这是三篇系列文章的第1部分。第1部分涵盖设置您的AWS账户和Snowflake环境。第2部分将Amazon SageMaker Canvas连接到Snowflake,以准备数据并构建欺诈检测模型。第3部分将预测结果发送到Amazon Quick,以创建交互式仪表板并与利益相关者分享洞察。
业务挑战
该解决方案的灵感来自一家真实的医疗机构,该机构在Snowflake中积累了多年的运营数据,包括销售交易、产品流动、患者互动和区域绩效指标。虽然数据基础很扎实,但将这些数据转化为预测性洞察仍然是一项挑战。
业务团队希望预测多个产品类别的需求,了解季节性和区域性消费模式,并直接在商业智能(BI)仪表板中呈现由ML驱动的洞察,以支持更快的决策。然而,该组织缺乏足够的数据科学能力来支持这些需求。每一个新的预测或分析请求都需要工程或ML专家参与,导致开发周期漫长且试验空间有限。
这造成了明显的差距:业务用户理解问题和数据,但没有切实可行的方法自行构建和迭代预测模型。此外,在生成预测结果后,组织还需要一种方式,通过交互式仪表板将这些洞察可视化并与利益相关者分享。该组织需要的不是引入又一个复杂的ML管道,而是一种能够让机器学习更贴近业务团队的方法。这种方法必须能够原生地处理现有的Snowflake数据,通过熟悉的BI工具可视化预测结果,并在不损害治理或安全性的前提下减少对专业资源的依赖。
这些需求自然而然地指向了下一步:采用集成可视化能力的无代码机器学习方法。
解决方案概述
为了弥合数据丰富环境与缺乏洞察的业务团队之间的差距,本文向您介绍一个基于Amazon SageMaker Canvas构建的无代码ML工作流。这种方法不是取代您现有的数据基础设施,而是通过让非技术用户也能使用机器学习,并将预测结果直接连接到可视化工具,从而扩展您对Snowflake投资的价值。
Amazon SageMaker Canvas提供了一个直观的可视化界面,可直接连接到Snowflake,因此您可以准备数据、构建机器学习模型并生成预测。训练模型后,直接从Canvas模型详情页面将其部署到Amazon SageMaker Endpoint,无需任何基础设施配置。当端点状态显示为“In service”(运行中)时,即可对您的Snowflake交易数据生成预测。要在Amazon Quick中可视化结果,请使用Canvas中的批量预测功能,将评分数据集输出到Amazon Simple Storage Service(Amazon S3)。Amazon Quick通过交互式仪表板将这些洞察可视化,使组织内的利益相关者无需自定义管道或数据科学干预即可访问由ML驱动的预测。

- 通过无需编码技能的自助式模型构建,实现ML访问的民主化。
- 借助由Data Wrangler提供支持的300多种可视化转换,简化数据准备流程,同时保持企业治理。
- 将模型开发时间从数月缩短至数小时,加速获得洞察的进程。
- 在Amazon SageMaker的托管基础设施上进行训练。
- 通过Amazon Quick Sight仪表板实现预测结果的交互式可视化。
- 支持多种ML问题类型,包括回归、分类和时间序列预测,通过单一解决方案应对多样化的业务问题。
技术实施
本节将引导您完成配置Snowflake环境并加载示例欺诈检测数据的实际操作步骤。
前提条件
请确保您具备以下前提条件。
- 一个 AWS 账户。
- Snowflake 账户。有关创建 Snowflake 账户的步骤,请参阅创建 Snowflake 免费试用账户。
Snowflake 数据库设置
- 要创建 Snowflake 数据库,请在 Snowflake 控制台的左侧面板中选择加号 (+),然后选择 SQL worksheet。
- 此时会打开一个空白 SQL 文件。将以下 SQL 命令复制并粘贴到工作表中,然后选择 Run。
-- 创建数据库和仓库
USE ROLE accountadmin;
CREATE OR REPLACE WAREHOUSE HOL_WH WITH WAREHOUSE_SIZE='X-SMALL';
CREATE OR REPLACE DATABASE FRAUD;
-- 使用该数据库
USE DATABASE FRAUD;
-- 使用适当的数据类型创建最终的欺诈表
CREATE OR REPLACE TABLE FRAUD.PUBLIC.FRAUD_TABLE (
id NUMBER,
trans_date_trans_time TIMESTAMP_NTZ(9),
cc_num NUMBER,
merchant VARCHAR,
category VARCHAR,
amt NUMBER(38,2),
first VARCHAR,
last VARCHAR,
gender VARCHAR,
street VARCHAR,
city VARCHAR,
state VARCHAR,
zip NUMBER,
lat NUMBER(38,15),
long NUMBER(38,14),
city_pop NUMBER(38,0),
job VARCHAR,
dob DATE,
trans_num VARCHAR,
unix_time NUMBER,
merch_lat NUMBER(38,15),
merch_long NUMBER(38,14),
is_fraud NUMBER
);
-- 生成 2020 年的示例欺诈检测数据
INSERT INTO FRAUD.PUBLIC.FRAUD_TABLE
WITH raw_data AS (
SELECT
ROW_NUMBER() OVER (ORDER BY SEQ4()) as id,
DATEADD(minute, UNIFORM(0, 525600, RANDOM()), '2020-01-01 00:00:00'::TIMESTAMP_NTZ) as trans_date_trans_time,
UNIFORM(1, 1000, RANDOM()) as cc_num,
CONCAT('merchant_', UNIFORM(1, 500, RANDOM())) as merchant,
CASE UNIFORM(1, 14, RANDOM())
WHEN 1 THEN 'grocery_pos'
WHEN 2 THEN 'gas_transport'
WHEN 3 THEN 'shopping_net'
WHEN 4 THEN 'shopping_pos'
WHEN 5 THEN 'food_dining'
WHEN 6 THEN 'entertainment'
WHEN 7 THEN 'personal_care'
WHEN 8 THEN 'health_fitness'
WHEN 9 THEN 'travel'
WHEN 10 THEN 'kids_pets'
WHEN 11 THEN 'home'
WHEN 12 THEN 'misc_net'
WHEN 13 THEN 'misc_pos'
ELSE 'other'
END as category,
ROUND(UNIFORM(1, 1000, RANDOM()) + UNIFORM(0, 99, RANDOM())/100, 2) as amt,
CONCAT('FirstName', UNIFORM(1, 1000, RANDOM())) as first,
CONCAT('LastName', UNIFORM(1, 1000, RANDOM())) as last,
CASE UNIFORM(0, 1, RANDOM()) WHEN 0 THEN 'M' ELSE 'F' END as gender,
CONCAT(UNIFORM(1, 9999, RANDOM()), ' Main St') as street,
CASE UNIFORM(1, 10, RANDOM())
WHEN 1 THEN 'New York' WHEN 2 THEN 'Los Angeles' WHEN 3 THEN 'Chicago'
WHEN 4 THEN 'Houston' WHEN 5 THEN 'Phoenix' WHEN 6 THEN 'Philadelphia'
WHEN 7 THEN 'San Antonio' WHEN 8 THEN 'San Diego' WHEN 9 THEN 'Dallas'
ELSE 'San Jose'
END as city,
CASE UNIFORM(1, 10, RANDOM())
WHEN 1 THEN 'NY' WHEN 2 THEN 'CA' WHEN 3 THEN 'IL' WHEN 4 THEN 'TX'
WHEN 5 THEN 'AZ' WHEN 6 THEN 'PA' WHEN 7 THEN 'TX' WHEN 8 THEN 'CA'
WHEN 9 THEN 'TX' ELSE 'CA'
END as state,
UNIFORM(10000, 99999, RANDOM()) as zip,
ROUND(UNIFORM(25.0, 49.0, RANDOM()) + UNIFORM(0, 999999, RANDOM())/1000000, 15) as lat,
ROUND(UNIFORM(-125.0, -65.0, RANDOM()) + UNIFORM(0, 99999999999999, RANDOM())/100000000000000, 14) as "LONG",
UNIFORM(10000, 5000000, RANDOM()) as city_pop,
CONCAT('Job_Title_', UNIFORM(1, 100, RANDOM())) as job,
DATEADD(year, -UNIFORM(18, 80, RANDOM()), '2020-12-01'::DATE) as dob,
CONCAT('trans_', LPAD(ROW_NUMBER() OVER (ORDER BY SEQ4()), 10, '0')) as trans_num,
DATEDIFF(second, '1970-01-01', DATEADD(minute, UNIFORM(0, 44640, RANDOM()), '2020-12-01 00:00:00'::TIMESTAMP_NTZ)) as unix_time,
ROUND(UNIFORM(25.0, 49.0, RANDOM()) + UNIFORM(0, 999999, RANDOM())/1000000, 15) as merch_lat,
ROUND(UNIFORM(-125.0, -65.0, RANDOM()) + UNIFORM(0, 99999999999999, RANDOM())/100000000000000, 14) as merch_long
FROM TABLE(GENERATOR(ROWCOUNT => 139538))
)
SELECT
id, trans_date_trans_time, cc_num, merchant, category, amt,
first, last, gender, street, city, state, zip, lat, "LONG",
city_pop, job, dob, trans_num, unix_time, merch_lat, merch_long,
CASE
WHEN category IN ('shopping_net', 'misc_net') AND amt > 700
AND UNIFORM(0, 100, RANDOM()) < 85 THEN 1
WHEN category = 'travel' AND amt > 800
AND UNIFORM(0, 100, RANDOM()) < 80 THEN 1
WHEN amt > 900 AND EXTRACT(HOUR FROM trans_date_trans_time) BETWEEN 0 AND 4
AND UNIFORM(0, 100, RANDOM()) < 75 THEN 1
WHEN category IN ('shopping_net', 'misc_net', 'travel') AND amt > 400 AND amt <= 700
AND UNIFORM(0, 100, RANDOM()) < 12 THEN 1
WHEN EXTRACT(HOUR FROM trans_date_trans_time) BETWEEN 0 AND 3
AND UNIFORM(0, 100, RANDOM()) < 3 THEN 1
ELSE 0
END as is_fraud
FROM raw_data;- 然后分别选中每个小节,通过选择 Run 逐一运行。
- 查询成功运行后,通过运行以下验证查询来确认设置。
SELECT COUNT(*) as total_records FROM FRAUD_TABLE;
SELECT TOP 10 * FROM FRAUD_TABLE;
SELECT is_fraud, COUNT(*) as count FROM FRAUD_TABLE GROUP BY is_fraud;收集从Snowflake连接到Amazon SageMaker Canvas所需的信息。该连接需要Snowflake组织账户名称,该名称由Snowflake组织名称和账户名称以连字符组合而成。在工作表中运行以下SQL查询以确定组织账户名称。
SELECT CURRENT_ORGANIZATION_NAME()||'-'||CURRENT_ACCOUNT_NAME() AS organizaton_account_name;结论
在本三部分系列的第一部分中,您探讨了拥有数据丰富的Snowflake环境的组织所面临的业务挑战,并介绍了无代码ML工作流。您创建了一个Snowflake数据库,加载了示例欺诈检测数据,并检索了后续步骤所需的连接详细信息。
在第二部分中,您将Amazon SageMaker Canvas连接到Snowflake数据,使用可视化工具准备和转换数据集,并构建欺诈检测模型。
参考资料
- 第二部分——使用Snowflake、Amazon SageMaker Canvas和Amazon Quick构建无代码ML工作流——第二部分:使用Amazon SageMaker Canvas进行数据准备和模型构建
- 第三部分——使用Snowflake、Amazon SageMaker Canvas和Amazon Quick构建无代码ML工作流——第三部分:使用Amazon Quick Sight可视化洞察
关于作者