第17部分. 支付与风险信号数据集市
支付数据的危险之处在于,技术上简单的聚合操作可能看起来像是风险决策。在教科书 mart_payment_risk_signals 中——这不是评分引擎。这是一个观察数据集市:哪些交易被标记了风险标志,哪些金额/渠道需要关注。
粒度
对于交易级风险数据集市,粒度为:
每行对应一个 `transaction_id`
如果数据集市按客户或日期进行聚合,那么这是另一个数据产品。即使 SQL 变得更短,也不能悄无声息地将交易级 mart 改为客户级 mart。
需要检查的内容
transaction_id不为空且唯一;- 金额不为
null; - 风险标志被视为源系统的教学信号;
- 不出现直接的 PII;
- 没有风险标志的交易不会在没有规范的情况下从上游层删除;
- 审查者能够看到阈值在哪里——这是教学规则。
不好的做法
where risk_flag = true
这种过滤对于特定的 mart 可能是允许的,但前提是规范明确规定:"数据集市仅包含风险事件"。如果消费者期望看到所有带有风险标志的交易,那么这种过滤器会破坏完整性。
Qwen 查询
读取 stg_card_transactions、mart_payment_risk_signals 和 specs。
确定粒度、包含哪些交易、排除哪些交易,以及风险数据集市需要哪些检查事实。
不要修改文件。
最小输出
编写风险数据集市的注释:
数据集市:
粒度:
风险标志来源:
包含的行:
排除的行:
检查事实:
审查者的手工问题:
给读者的解析
风险信号数据集市看起来很简单:取出带有 risk_flag 的交易,加上大额金额,然后给出列表。但正是在这里,代理最常开始凭空捏造业务逻辑。它可能会决定风险仅仅是源系统的标志。或者风险是超过阈值的金额。或者需要按客户聚合,因为这样更便于报表。这些决策都是可能的,但任何一项都不应在没有规范的情况下出现。
在教学项目中 mart_payment_risk_signals 不是评分模型。这是原则性的区别。评分需要方法论、可解释性、质量控制、法律和风险程序。而这里的数据集市是为了 SDD 教学:展示如何将信号源与决策分离,将交易级粒度与客户级聚合分离,将观察与结论分离。
大额阈值同样是一个教学规则,而不是银行事实。如果阈值仅写在 SQL 中,审查者将无法理解它是临时简化、产品需求还是代理的猜测。因此,阈值应出现在规范、检查备注和审查者报告中。这样,未来的作者可以将其替换为其他方法论,而不会出现潜在的偏差。
本章教授一个重要问题:"数据集市代表哪一行?" 如果行是交易,那么 transaction_id 是键,客户可能会重复。如果行是客户,则需要不同的字段、不同的测试和不同的规范。不能仅仅因为这两种方式都能用于讨论风险,就认为它们可以互换。
实践
描述风险数据集市的两种变体:交易级和客户级。对每种变体,指出其粒度、消费者,以及为什么不能悄无声息地用一种变体的 SQL 替换另一种。
常见错误
将教学用的 risk_flag 转化为真实的决策。在银行领域,这样的决策需要单独的模型、可解释性、管理程序和法律审查。在本卷中,风险标志是 SDD 流程的信号,而不是评分产品。
检查问题
- 为什么交易级和客户级风险数据集市不能混合?
- 什么时候过滤器
risk_flag = true是破坏性的更改? - 审查者应该检查什么手工事实?