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

这个架构提供了关键优势:
本节介绍如何使用示例欺诈检测数据配置 Snowflake 环境的实际操作步骤。
确保你满足以下前提条件。
Snowflake 账户。有关创建 Snowflake 账户的步骤,请参阅创建 Snowflake 免费试用账户。
要创建 Snowflake 数据库,请在 Snowflake 控制台左侧面板中选择加号(+),然后选择 SQL 工作表。
一个空白 SQL 文件会打开。将以下 SQL 命令复制粘贴到工作表中,然后选择 Run。
-- Create database and warehouse
USE ROLE accountadmin;
CREATE OR REPLACE WAREHOUSE HOL_WH WITH WAREHOUSE_SIZE='X-SMALL';
CREATE OR REPLACE DATABASE FRAUD;
-- Use the database
USE DATABASE FRAUD;
-- Create the final fraud table with proper data types
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
);
-- Generate sample fraud detection data for 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_dat
然后分别选择每个子部分,一次选择一个运行,选择 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 QuickSight 构建无代码 ML 工作流 – 第二部分:使用 Amazon SageMaker Canvas 进行数据准备和模型构建
第三部分 – 使用 Snowflake、Amazon SageMaker Canvas 和 Amazon QuickSight 构建无代码 ML 工作流 – 第三部分:使用 Amazon QuickSight 可视化洞察