无代码机器学习的价值,不只是把 Python 隐藏起来,而是让数据分析人员能够沿着一条可审计的路径完成数据接入、清洗、关联和建模。本系列第二部分把 Amazon SageMaker Canvas 连接到 Snowflake,使用 Data Wrangler 的可视化转换处理交易数据,并训练一个基于 XGBoost 的欺诈检测模型,为后续构建交互式仪表板准备预测结果。
从 Snowflake 到 Canvas,先明确数据边界
连接 Snowflake 时,需要准备可访问目标数据库、Schema 和表的 Snowflake 账号,并在 SageMaker Canvas 中建立对应的数据源连接。生产环境不应直接使用管理员账号,建议为 Canvas 单独创建只读角色,只开放建模所需对象。
即使操作界面不要求编写 SQL,也要先回答几个数据问题:
- 一行数据代表一笔交易,还是一个账户在某个时间窗口内的汇总?
- 欺诈标签何时产生,是否晚于交易发生时间?
- 哪些字段在实际预测时可用,哪些字段只有调查结束后才出现?
- 交易表与客户、设备或商户表之间是一对一、一对多,还是多对多?
这些问题决定了联接是否会复制记录,也决定模型是否会发生标签泄漏。比如,将交易后的拒付结论、人工审核状态或调查关闭时间作为输入特征,可能让离线指标异常漂亮,却无法用于实时预测。
可以先在 Snowflake 中运行一组校验查询。下面是假设性示例,需要把数据库、Schema、表名和字段名替换成实际对象:
USE DATABASE FRAUD_ANALYTICS;
USE SCHEMA CURATED;
-- 检查主表规模、标签分布和关键字段缺失情况
SELECT
COUNT(*) AS transaction_count,
COUNT(DISTINCT transaction_id) AS unique_transactions,
SUM(IFF(is_fraud = 1, 1, 0)) AS fraud_count,
ROUND(AVG(IFF(is_fraud = 1, 1, 0)) * 100, 4) AS fraud_rate_pct,
SUM(IFF(customer_id IS NULL, 1, 0)) AS missing_customer_ids
FROM transactions;
-- 检查关联客户表后是否造成交易记录膨胀
SELECT
COUNT(*) AS joined_rows,
COUNT(DISTINCT t.transaction_id) AS unique_transactions
FROM transactions AS t
LEFT JOIN customers AS c
ON t.customer_id = c.customer_id;
如果 joined_rows 明显大于 unique_transactions,说明客户表中可能存在重复键或历史版本。此时应先选择有效版本,或者在 Data Wrangler 中聚合后再联接,而不是直接把重复记录送入模型。
用 Data Wrangler 组织可重复的数据准备流程
数据导入 Canvas 后,可以通过 Data Wrangler 的可视化步骤完成表联接、类型转换、缺失值处理和特征构造。关键不是堆叠更多转换,而是确保每一步都能解释,并且可以对未来数据重复执行。
一个典型的交易欺诈数据流可以包含这些步骤:
- 导入交易事实表,以及客户、商户或设备维度表。
- 统一联接键的数据类型,清理空字符串和异常占位值。
- 按业务关系选择左联接或内联接,并检查联接前后的行数。
- 从交易时间提取小时、星期和周末标记等特征。
- 对金额等长尾数值进行合理变换,处理缺失类别。
- 删除交易 ID、自由文本备注和预测时不可获得的字段。
- 将欺诈标签设为目标列,并检查类别分布。
欺诈数据通常高度不平衡。整体准确率在这里容易误导:如果欺诈率只有 0.2%,一个永远预测“正常”的模型仍可得到 99.8% 的准确率。因此,模型评估应关注少数类的召回率、精确率、F1,以及在不同决策阈值下的误报成本。
时间也是必须保留的业务结构。随机拆分可能把同一客户相邻时间的相似交易分散到训练集和验证集,造成过于乐观的结果。摘要没有给出具体拆分配置;实际实施时,可以优先使用较早交易训练、较晚交易验证,并保留最新时间段作为最终测试集。
在 Canvas 中训练 XGBoost 欺诈检测模型
数据准备完成后,在 SageMaker Canvas 中选择欺诈标签作为预测目标,并构建分类模型。该流程使用 XGBoost 训练欺诈检测模型,无需手写机器学习代码。
训练前应记录一份简短的特征清单:每个字段来自哪里、何时产生、缺失值代表什么,以及线上评分时能否获得。Canvas 降低了建模操作门槛,但不会自动消除业务定义错误。
查看模型结果时,不要只接受默认阈值。欺诈检测通常对应两种不同损失:
- 漏报会带来资金损失、拒付成本和账户风险。
- 误报会阻断正常交易,增加人工审核量并伤害客户体验。
可以根据审核团队每天可处理的告警数量选择阈值。例如,与其追求最高准确率,不如寻找“每日最多产生 2,000 条告警时,能够捕获多少欺诈交易”。这个问题更容易转化为可执行的运营规则。
为下一阶段的交互式仪表板准备输出
模型训练并不是终点。为了让后续仪表板可以按时间、商户、地区或风险等级分析结果,预测输出至少应保留以下字段:
- 可回溯原始记录的
transaction_id - 交易时间和业务分组维度
- 实际标签(已获得时)
- 预测类别
- 欺诈概率或风险分数
- 模型版本和评分时间
风险分数比单一的真假判断更适合仪表板。业务人员可以查看高风险交易数量、分数分布、不同阈值对应的告警量,以及模型在新数据上的表现变化。
上线前检查清单
采用这套无代码流程时,建议重点检查五件事:联接后是否仍保持一笔交易一行;输入特征是否在预测时真实可用;训练、验证和测试是否尊重时间顺序;指标是否覆盖少数类和运营成本;预测结果是否携带足够的追踪字段。
SageMaker Canvas 与 Data Wrangler 让数据准备和 XGBoost 建模可以通过可视化界面完成,但数据权限、标签定义、泄漏控制和阈值选择仍然需要工程判断。把这些约束记录在数据流和模型版本旁边,后续的交互式仪表板才不会只是展示一个脱离业务语境的分数。