thiagofsdata-collab/wyllo-fraud-pipeline

GitHub: thiagofsdata-collab/wyllo-fraud-pipeline

该 pipeline 将电商原始交易数据转化为退货欺诈检测所需的 point-in-time 特征存储,采用 Medallion 分层架构并配备完整的编排与质量测试体系。

Stars: 0 | Forks: 0

# Wyllo 退货欺诈 Pipeline ![CI](https://static.pigsec.cn/wp-content/uploads/repos/cas/ad/ad5834178f7599af9fdda11629d49cae07f2997beec49821b2920eff5bfd50e7.svg) ![Python](https://img.shields.io/badge/python-3.12-blue) ![dbt](https://img.shields.io/badge/dbt-1.10-orange) ![Dagster](https://img.shields.io/badge/dagster-1.10-purple) ![DuckDB](https://img.shields.io/badge/duckdb-1.5-yellow) ## 简介 退货欺诈每年给电商造成约 1000 亿美元的损失。**2% 的客户导致了 20% 的欺诈性退货**(NRF)。最困难的部分不在于拦截,而在于对**行为进行细分**,从而确保合法的偶尔退货者不被拦截。该 Pipeline 生成了实现该细分的 feature store。 **作为一名 Data Engineer:** 我们不负责训练模型。我们交付的是一张能让决策变得显而易见的表。 ``` ┌───────────────────────────────────┐ Olist CSVs → S3 → Bronze → Silver → Gold │ fct_customer_return_risk_features │ │ PK: (customer, snapshot_date) │ └─────────┬─────────────────────────┘ │ ┌────────────────────┼────────────────────┐ ▼ ▼ ▼ Data Scientist Fraud Analyst Pipeline Health (trains models) (writes rules) (Streamlit + Plotly) ``` ## 架构

Architecture

关于各层职责及技术选型依据的详细说明,请参阅 [`docs/ARCHITECTURE.md`](docs/ARCHITECTURE.md)。 ## 端到端运行 Pipeline ### dbt — 17 个模型,60 个测试,零警告 Medallion Pipeline 将数据物化(materialize)为 Bronze → Silver → Gold,随后完整的测试套件在真实的 Olist 数据上成功通过。 ![dbt 运行与测试](https://static.pigsec.cn/wp-content/uploads/repos/cas/7d/7d35b2d9987c8903ec385be18be232058e604f0c595d811f4ecf03e4887b00bd.gif) ### Dagster — asset graph 与编排 从数据接入到 feature store 的自动推导血缘。每个 dbt 模型都会成为一个 Dagster asset;该图直接映射了 dbt manifest。 ![Dagster asset 血缘](https://raw.githubusercontent.com/thiagofsdata-collab/wyllo-fraud-pipeline/main/docs/diagrams/dagster_lineage.gif) ### Streamlit — Pipeline 健康度看板 针对数据仓库的只读视图:各层的行数、feature store 的内容以及最新的 dbt 测试结果。 ![Streamlit 看板演示](https://raw.githubusercontent.com/thiagofsdata-collab/wyllo-fraud-pipeline/main/docs/diagrams/streamlit_demo.gif) ## 状态 — 已完成内容 🟢 Layer 0 — Schema 映射、架构、仓库脚手架 🟢 Layer 1 — 数据接入(CSVs → DuckDB + 分区 Parquet,S3 风格布局) 🟢 Layer 2 — dbt Bronze / Silver / Gold(17 个模型,60 个测试通过) 🟢 Layer 3 — Dagster 编排(29 个 asset、job、调度和传感器) 🟢 Layer 4 — Streamlit Pipeline 健康度看板 📝 设计时超出范围的内容 — 已在此 README 中说明: - AWS 部署(S3 / Glue / Athena 脚本已配置但未预置) - RAG / AI 目录助手(已在下文设计) - ML 模型训练(Data Scientist 的工作 — Pipeline 终止于 feature store) ## 设计文档(请先阅读这些) - [`docs/SCHEMA_FRAUD_MAPPING.md`](docs/SCHEMA_FRAUD_MAPPING.md) — Olist 列如何映射到欺诈防范特征,包含代理逻辑及超出范围的理由。 - [`docs/ARCHITECTURE.md`](docs/ARCHITECTURE.md) — 系统设计、 各层职责、技术选型权衡,以及生产环境迁移路径(Kinesis 虚线框说明)。 ## 快速开始 — 当前状态 ``` # 1. 安装 Python deps (Python 3.11 或 3.12) make install # 2. 从 Kaggle 下载 Olist dataset 到 data/raw/ make download-data # 3. (下一层) 构建 Bronze/Silver/Gold make dbt-run ``` 完整的一键 Docker 设置将随 Layer 6 一起提供。 ## 一句话技术选型说明 - **AWS S3 + Glue + Athena** — 标准数据湖;以 S3 作为存储契约 - **DuckDB** — 分析引擎,可移植的 SQL(相同模型可在 Snowflake/BigQuery 上运行) - **dbt** — 带有测试、血缘和文档的 SQL 即代码 - **Dagster** — 以 asset 为中心的编排器,能与 dbt 完美映射 - **Streamlit + Plotly** — Pipeline 健康度看板,而非欺诈看板 - **LangChain + FAISS** — 用于目录自然语言搜索的小型 DataOps 工具 - **GitHub Actions** — CI 会在每次 PR 时运行 dbt 测试 + pytest 详细理由:请参阅 `docs/ARCHITECTURE.md`。 ## 仓库布局 ``` wyllo-fraud-pipeline/ ├── ingestion/ │ ├── load_raw_to_duckdb.py # The local-first loader (the one that runs) │ ├── s3/ # AWS S3 upload (wired, not deployed) │ ├── glue/ # AWS Glue crawler trigger │ └── athena/ # AWS Athena ad-hoc queries ├── dbt/ │ ├── models/ │ │ ├── bronze/ # 9 views, 1:1 raw + metadata │ │ ├── silver/ # 6 tables, cleaned/typed/deduped │ │ └── gold/ # int_orders_enriched + feature store │ ├── seeds/ # risk thresholds, category priors │ ├── macros/ # haversine, month_spine │ └── tests/generic/ # custom expression_is_true, unique_combination ├── orchestration/ # Dagster — assets, jobs, schedule, sensor ├── streamlit/ # Pipeline health dashboard │ ├── app.py │ ├── pages/ # 4 pages: Layers, Feature Store, Quality, Lineage │ └── utils/ ├── docs/ │ ├── SCHEMA_FRAUD_MAPPING.md │ ├── ARCHITECTURE.md │ └── diagrams/ # Excalidraw + Dagster screenshots └── .github/workflows/ci.yml ``` ## 该 Pipeline 不做的事(设计使然) | 超出范围 | 原因 | |-------------------------------------|------------------------------------------------------------------| | ML 模型训练 | Data Scientist 的工作。Pipeline 产生输入。 | | 规则引擎业务逻辑 | Fraud Analyst 的工作。Pipeline 暴露他们查询的特征。 | | 实时预下单评分 | 需要亚秒级延迟;这是批处理的 feature store。 | | 跨商家身份识别 | Wyllo 的护城河 — 需要我们没有的数据。 | | 设备 / IP 指纹特征 | Olist 没有此类数据;模拟纯属纸上谈兵。 | 这些限制是面试时的讨论点,而不是失败之处。 ## 下一步计划 1. **AWS 部署** — 通过 Terraform 预置 S3 + Glue + Athena,将 dbt target 从 `local` 切换为 `prod`。代码已经配置完毕。 2. **目录 RAG 助手** — 下文构思的 FAISS + LangChain pipeline。大约需要 1-2 天的工作量;其价值在于让分析师能够自助查询 dbt 文档。 3. **流式数据接入路径** — Kinesis Stream + Firehose → S3,以 取代批量上传。下游代码(dbt + Dagster)已经 与此解耦 — 只有入口路径发生变化。 4. **实时评分补充** — 当前的 pipeline 是批处理 feature store。对于预下单(亚秒级)决策,我会添加一个 feature serving 层(Feast / Tecton / Redis),并从 Gold 中复制选定的特征。 5. **身份识别** — 根据行为相似性对 customer_unique_id 进行聚类。 Wyllo 的竞争护城河;需要多租户数据。
标签:Dagster, dbt, DuckDB, Kubernetes, 数据工程, 数据管道, 欺诈检测, 特征工程, 软件工程, 逆向工具