gappy401/quant-risk-mlops
GitHub: gappy401/quant-risk-mlops
开源MLOps平台,用于信用违约概率评分。
Stars: 0 | Forks: 0
# 量化风险 MLOps
一个开源、可移植的**MLOps平台**,用于消费者信用**违约概率(PD)**评分。模型经过训练、门控、注册,在实时API和批量作业后提供服务,监控漂移,通过版本化的管道实现可重复性,然后容器化并在Kubernetes上运行,实现自动扩展。
一个云无关的构建。计划一个Azure原生兄弟(Databricks、ADF、ADLS、Azure ML)。
## 从上到下如何工作
1. **数据合约**(`schema.py`)。一个版本化的Pandera模式在摄取时验证原始贷款数据,并关闭失败,因此坏数据在成为后来的无声错误预测之前就被拒绝在门外。
2. **摄取**(`data/load.py`,`data/generate.py`)。如果存在,则读取真实的Lending Club文件,否则生成一个与模式忠实的合成数据,并带有漂移旋钮进行测试。一切都在合约中通过验证。
3. **特征**(`features/transforms.py`)。一个无状态的函数将验证后的数据转换为模型准备好的特征。它被训练和提供方导入,因此两者不能偏离。
4. **训练**(`models/train.py`,`models/evaluate.py`)。训练一个scikit learn管道,在排名指标(AUC、Gini、KS)上评分,将一切记录到MLflow中,包括数据哈希和模式版本,只有当它通过AUC门控时才注册模型。
5. **实时服务**(`serving/api.py`)。一个FastAPI服务通过名称从注册表中加载模型,一次评分一个请求,由边缘的Pydantic合约保护。
6. **批量服务**(`models/predict.py`)。相同的模型按计划对整个群体进行评分,这是夜间预测模式。
7. **监控**(`monitoring/`)。PSI和KS漂移检测将实时数据与训练基线进行比较,对结果进行分层,并将警报扇出到Slack和Prometheus。
8. **可重复性**(`dvc.yaml`,`params.yaml`)。DVC将生成、训练和监控连接到一个管道,该管道只重新运行更改的内容。
9. **容器化**(`docker/`)。一个精简的镜像提供API服务,一个Compose堆栈在MLflow服务器旁边运行它,以便模型通过网络加载。
10. **Kubernetes**(`k8s/`)。API作为部署在服务后面运行,具有存活和就绪探测,以及一个自动扩展器,在负载下将其从2个扩展到10个Pod。
## 架构
```
raw loans (real CSV or synthetic)
| schema.py validates at ingest (fail closed)
v
labeled data -> build_features() -> model ready features
| (shared by train and serve)
+-----------------+-------------------+
v v v
TRAIN SERVE MONITOR
train.py api.py drift.py
MLflow + gate FastAPI PSI / KS -> Slack / Prometheus
| predict.py (batch) |
+-------- model registry --------------+
|
reproduced by DVC: generate -> train -> monitor
shipped by Docker, run on Kubernetes with autoscaling
```
## 快速入门
```
# 1. 隔离环境,然后安装包 + 开发工具
python -m venv .venv
.\.venv\Scripts\Activate.ps1
pip install -e ".[dev]"
# 2. 测试
pytest
# 3. 训练(MLflow 注册 + 偏差基线,受控)
python -m quant_risk.models.train
mlflow ui --backend-store-uri sqlite:///mlflow.db # http://localhost:5000
# 4. 实时服务
uvicorn quant_risk.serving.api:app --port 8000 # http://localhost:8000/docs
# 5. 批量评分
python -m quant_risk.models.predict --n 20000
# 6. 偏差监控(强制警报)
python -m quant_risk.monitoring.run_monitor --drift 1.2
# 7. 可重复的管道
dvc repro
dvc metrics show
# 8. 容器化
docker build -t credit-pd-api -f docker/Dockerfile.api .
docker compose -f docker/docker-compose.yml up -d
# 9. Kubernetes
kubectl apply -f k8s/mlflow.yaml
kubectl apply -f k8s/api.yaml
kubectl apply -f k8s/hpa.yaml
```
将真实的Lending Club CSV文件放入`data/raw/`,一切从合成数据切换到真实数据,无需更改代码。
## 项目结构
```
quant-risk-mlops/
├── pyproject.toml installable package + tool config
├── requirements-serve.txt lean serving dependencies (for the image)
├── dvc.yaml / params.yaml reproducible pipeline + tracked knobs
├── conf/config.yaml runtime settings (seed, paths, MLflow)
├── src/quant_risk/
│ ├── schema.py the data contract
│ ├── config.py central configuration
│ ├── data/ generate.py, load.py
│ ├── features/transforms.py shared feature engineering
│ ├── models/ evaluate.py, train.py, predict.py
│ ├── serving/ schema.py, api.py
│ └── monitoring/ drift.py, alerts.py, run_monitor.py
├── tests/ 14 tests (contract, parity, metrics, api, drift)
├── docker/ Dockerfile.api, docker-compose.yml
├── k8s/ mlflow.yaml, api.yaml, hpa.yaml, loadgen.yaml
└── docs/ per technology deep dives
```
## 状态
| 层 | 状态 |
|---|---|
| 数据合约、配置、摄取 | 构建 |
| 共享特征、训练、注册、AUC门控 | 构建 |
| 测试套件(14个测试) | 构建 |
| 实时API + 批量评分 | 构建 |
| 漂移监控 + Slack / Prometheus警报 | 构建 |
| 可重复性管道(DVC) | 构建 |
| Docker镜像 + Compose堆栈 | 构建 |
| Kubernetes部署、服务、探测、自动扩展 | 构建 |
| CI、Spark / Kafka扩展、Airflow、S3、Azure原生兄弟 | 路线图 |
## 设计原则
1. 保护边界,而不是模型。合约在摄取时验证原始数据,并关闭失败。
2. 在确切的一个地方计算特征。一个共享的函数使训练和提供方偏斜成为不可能。
3. 模型是一个贬值的资产。监控是一个一等特性。
4. 可重复性是不可或缺的。种子、数据哈希、模式版本和DVC管道。
5. 将平台与有效负载分开。模型是可交换的,平台不是。
## 文档
每个技术的深入探讨都活生生地存在于`docs/`中。每一页都涵盖了该技术是什么,它做什么,命令和基本语法,它如何适应此项目以及它在哪里发挥作用,以及链接到官方文档。
1. Kubernetes:[docs/kubernetes.md](docs/kubernetes.md)
2. Docker:[docs/docker.md](docs/docker.md)
3. MLflow:[docs/mlflow.md](docs/mlflow.md)
4. DVC:docs/dvc.md(计划中)
5. 监控、PSI和KS:docs/monitoring.md(计划中)
计划中的跨切面笔记:为什么需要一个隔离的虚拟环境,如何端到端强制执行可重复性,如何故意使技术可交换(模型、数据源、编排器)以及为什么,以及通过`.gitignore`(数据、MLflow存储、本地工件)与提交(代码、管道定义、`dvc.lock`、指标)有意识地保留在版本控制之外的内容。
## 技术栈
Python、pandas、numpy、scipy。Pandera用于数据合约。scikit learn用于模型。MLflow用于跟踪和注册。FastAPI、Pydantic和uvicorn用于服务。PSI和KS,可选的Evidently用于漂移。Slack和Prometheus用于警报。DVC用于管道。Docker和Kubernetes用于打包和服务。pytest和ruff用于质量。
## 路线图
CI与GitHub Actions(ruff、pytest、推送到时的镜像构建)、PySpark奖牌ETL和Kafka流评分器以实现扩展、Airflow夜间批量DAG、S3原始数据存储,以及Azure原生兄弟项目。
标签:ADF, ADLS, Apex, AUC, AV绕过, Azure, Azure ML, Databricks, DVC, FastAPI, Gini, KS指标, MLflow, MLOps, NIDS, Pandera, Pydantic, Scikit-learn, Slack, 信用评分, 可重复性, 子域名突变, 安全可观测性, 实时API, 容器化, 批处理作业, 数据工程, 数据验证, 机器学习, 概率预测, 模型监控, 模型训练, 模型部署, 漂移检测, 版本控制, 特征工程, 自动扩展, 自定义请求头, 请求拦截, 逆向工具