foal90/fraud-detection-mlops
GitHub: foal90/fraud-detection-mlops
以欺诈检测为场景、在 AWS 上公开构建的 MLOps 与数据工程学习项目,重点打造模型生产化所需的数据管道和底层基础设施。
Stars: 0 | Forks: 0
# 欺诈检测 MLOps 平台
**这个代码库的重点不在于模型。** 一个欺诈分类器只需要几行 XGBoost 代码。将机器学习投入生产的困难且有价值的部分在于模型*周围*的一切:可靠的数据摄取、值得信赖的数据、一致的特征、可复现的训练、安全的服务以及漂移监控。本项目构建的正是这些底层基础设施。
## 系列
| 部分 | 层级 | 状态 |
|------|-------|--------|
| **1** | [批量摄取 — Iceberg 上的 Bronze 层](docs/part-1-bronze.md) | ✅ 已完成 |
| **2** | [Silver 层 — 数据质量、隔离与分析](docs/part-2-silver.md) | ✅ 已完成 |
| **3** | 特征管道与特征存储 | 计划中 |
| **4** | 训练、实验跟踪与模型注册表 | 计划中 |
| **5** | 服务与漂移监控 | 计划中 |
每个部分都在 Git 中打上了标签(`part-1-bronze`, …),因此你可以准确地查看该部分发布时代码库的状态。
## 架构
```
generate.py ──► raw (S3, JSONL)
│
▼
Bronze (Glue PySpark → Apache Iceberg) ✅ Part 1
│ typed, idempotent, lineage-tracked
▼
Silver (validation, quarantine, profiling) ✅ Part 2
│ trustworthy data + auditable rejects
▼
Feature pipeline → Feature store Part 3
│ point-in-time correct, train/serve consistent
▼
Training → MLflow → Model registry Part 4
│
▼
Serving + Drift monitoring Part 5
Terraform (IaC) + orchestration span the whole flow
```
## 技术栈
| 关注点 | 选择 | 原因 |
|---|---|---|
| 存储 | Amazon S3 | 廉价,与计算解耦 |
| 表格格式 | **Apache Iceberg** | 支持 ACID、时间旅行、schema 演化 —— 开放,无供应商锁定 |
| 计算 | AWS Glue 5.0 (Spark 3.5) | Serverless Spark:无需运行集群,闲置时零成本 |
| 目录 | AWS Glue Data Catalog | 兼容 Hive-Metastore |
| 查询 | Amazon Athena (Trino) | 直接在 S3 上运行 SQL,按扫描的 TB 量付费 |
| IaC | Terraform | 可复现的构建,干净的销毁 |
| 数据生成 | Python (Faker, NumPy) | 真实的交易数据 + 延迟的欺诈标签 |
一切都是 serverless 且按需付费的。没有任何东西是 24/7 运行的 —— 一次完整的管道运行只需花费几分钱,而 `terraform destroy` 会将账户费用恢复为零。
## 仓库结构
```
fraud-detection-mlops/
├── README.md # you are here
├── docs/
│ ├── part-1-bronze.md # design decisions & deep dive per part
│ └── part-2-silver.md
├── requirements.txt
├── run_bronze.sh # deploy + run the Bronze job end to end
├── run_silver.sh # deploy + run the Silver job, then reconcile
├── config/
│ └── quality_rules.yaml # declarative data quality rules
├── data_generator/
│ └── data_generator.py # synthetic transactions + delayed labels + dimensions
├── glue_jobs/
│ ├── bronze_ingest.py # raw JSONL → idempotent Iceberg tables
│ └── silver_clean.py # validation, quarantine, dedup, profiling
└── infra/
└── main.tf # S3, IAM, Glue Catalog DBs, Glue jobs (Terraform)
```
## 快速开始
**前提条件:** 一个 AWS 账户、配置好的 AWS CLI(`aws configure`),以及为你的 CPU 架构编译的 Terraform(在 Apple Silicon 上,使用 `file $(which terraform)` 进行验证 —— `x86_64` 二进制文件在 Rosetta 下会卡死)。
所有命令均在仓库根目录下运行。
```
# Environment + dataset
python3 -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt
python data_generator/data_generator.py --customers 2000 --days 60 --out ./output --seed 42
# Infrastructure
terraform -chdir=infra init
terraform -chdir=infra apply
# 运行 pipeline
./run_bronze.sh
./run_silver.sh
# 完成后 tear down
terraform -chdir=infra destroy
```
要观察质量层的工作情况,请生成带有注入缺陷的数据,并将其打印出的清单与 `silver.quarantine` 进行核对:
```
python data_generator/data_generator.py --customers 2000 --days 60 --dirty-rate 0.001 --out ./output
```
请参阅 [第 1 部分](docs/part-1-bronze.md) 和 [第 2 部分](docs/part-2-silver.md) 了解各层背后的设计决策,以及如何在 Athena 中验证结果。
## 成本
所有服务均为 serverless 并按使用量计费:一次 Glue 运行只需几个 DPU-minutes(几分钱),该数据集的 S3 存储每月不到一美元,而 Glue Data Catalog 保持在免费额度内。每次会话后运行 `terraform destroy` 可将闲置成本保持为零。建议在 AWS Budgets 中设置预算告警作为安全保障。
标签:Apache Iceberg, AWS, C语言, DPI, ECS, MLOps, Terraform, 恶意软件检测, 数据工程, 数据流水线, 欺诈检测, 逆向工具