Mark007-R/FraudShield
GitHub: Mark007-R/FraudShield
一个基于XGBoost和Dask构建的端到端数字支付欺诈检测ML流水线,支持大规模数据处理和实验可复现性。
Stars: 0 | Forks: 0
# AirPay 欺诈检测流水线
一个用于数字支付交易的端到端欺诈检测系统,使用 **Dask** 进行可扩展数据处理,使用 **DVC** 实现可复现的 ML 流水线。基于 XGBoost 构建,具有自动化特征工程、实验跟踪和模型版本控制功能。
## 目录
- [概述](#overview)
- [架构](#architecture)
- [技术栈](#tech-stack)
- [项目结构](#project-structure)
- [快速开始](#getting-started)
- [流水线阶段](#pipeline-stages)
- [运行流水线](#running-the-pipeline)
- [实验跟踪](#experiment-tracking)
- [结果](#results)
- [数据集](#dataset)
- [贡献指南](#contributing)
- [许可证](#license)
## 概述
数字支付平台每天处理数百万笔交易,使得人工欺诈检测变得不可能。本项目构建了一个**可扩展、可复现的 ML 流水线**,具有以下功能:
- 使用 **Dask** 处理大规模交易数据(并行和核外计算)
- 工程化欺诈指标特征,如交易频率、金额偏差和时间模式
- 训练 **XGBoost** 分类器来标记欺诈交易
- 使用 **DVC** 跟踪每个数据版本、参数变更和模型产物
- 支持轻松的实验比较和完整的流水线可复现性
## 架构
```
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ Raw Data │────▶│ Preprocessing │────▶│ Training │
│ (transactions) │ │ (Dask-based) │ │ (XGBoost) │
└─────────────────┘ └─────────────────┘ └────────┬────────┘
│
┌─────────────────┐ │
│ Evaluation │◀─────────────┘
│ (Metrics/Plots) │
└─────────────────┘
── Entire pipeline versioned & tracked by DVC ──
```
## 技术栈
| 组件 | 工具 |
| ---------------------- | --------------------- |
| 数据处理 | Dask |
| 模型训练 | XGBoost, Scikit-learn |
| 流水线编排 | DVC |
| 数据/模型版本控制 | DVC + Git |
| 可视化 | Matplotlib, Seaborn |
| 编程语言 | Python 3.9+ |
## 项目结构
```
airpay-fraud-detection-pipeline/
│
├── data/
│ ├── raw/ # Original dataset (DVC tracked)
│ │ └── transactions.csv
│ └── processed/ # Feature-engineered data
│ └── features.csv
│
├── src/
│ ├── __init__.py
│ ├── preprocess.py # Dask-based cleaning & feature engineering
│ ├── train.py # Model training
│ ├── evaluate.py # Metrics & confusion matrix
│ └── predict.py # Inference on new data
│
├── notebooks/
│ └── eda.ipynb # Exploratory data analysis
│
├── models/
│ └── fraud_model.pkl # Trained model (DVC tracked)
│
├── metrics/
│ └── scores.json # Precision, Recall, F1, AUC
│
├── reports/
│ └── confusion_matrix.png # Evaluation plots
│
├── dvc.yaml # DVC pipeline definition
├── dvc.lock # Pipeline lock file
├── params.yaml # Hyperparameters & config
├── requirements.txt
├── README.md
└── .gitignore
```
## 快速开始
### 前置条件
- Python 3.9 或更高版本
- Git
- pip
### 安装
```
# 克隆仓库
git clone https://github.com//airpay-fraud-detection-pipeline.git
cd airpay-fraud-detection-pipeline
# 创建虚拟环境
python -m venv venv
source venv/bin/activate # Linux/Mac
venv\Scripts\activate # Windows
# 安装依赖项
pip install -r requirements.txt
# 初始化 DVC
dvc init
```
### 下载数据集
```
# 选项 1 — 如果使用 DVC 远程存储
dvc pull
# 选项 2 — 手动下载
# 从 Kaggle 下载数据集(见下方数据集部分)
# 放入 data/raw/transactions.csv
```
## 流水线阶段
### 阶段 1 — 预处理 (`src/preprocess.py`)
使用 **Dask** 处理大规模交易数据,并行处理。
**执行的操作:**
- 使用 `dask.dataframe` 加载原始 CSV,实现核外读取
- 处理缺失值和数据类型转换
- 工程化欺诈指标特征:
- `tx_frequency` — 滚动窗口内每个用户的交易数量
- `amount_deviation` — 交易金额与用户平均金额的偏差程度
- `time_since_last_tx` — 自用户上一次交易以来经过的秒数
- `hour_of_day`、`day_of_week` — 时间模式
- `is_high_amount` — 高于阈值的交易标记
- 输出清洗后的特征集到 `data/processed/features.csv`
### 阶段 2 — 训练 (`src/train.py`)
- 加载处理后的特征
- 将数据分割为训练集和测试集
- 使用 `params.yaml` 中的参数训练 **XGBoost** 分类器
- 将训练好的模型保存到 `models/fraud_model.pkl`
### 阶段 3 — 评估 (`src/evaluate.py`)
- 加载训练好的模型和测试数据
- 计算 **精确率**、**召回率**、**F1 分数** 和 **AUC-ROC**
- 生成混淆矩阵图
- 将指标保存到 `metrics/scores.json`
## 运行流水线
### 运行完整流水线
```
dvc repro
```
这将按顺序执行所有三个阶段。DVC 会自动跳过输入未更改的阶段。
### 运行单个阶段
```
dvc repro preprocess
dvc repro train
dvc repro evaluate
```
### 查看指标
```
dvc metrics show
```
### 比较实验
```
# 修改 params.yaml 并重新运行后
dvc params diff
dvc metrics diff
```
## 实验跟踪
DVC 可以轻松迭代和比较实验:
```
# 1. 在 params.yaml 中修改超参数
# 2. 重新运行管道
dvc repro
# 3. 与上次运行比较指标
dvc metrics diff
# 4. 查看参数变化
dvc params diff
# 5. 提交实验
git add .
git commit -m "experiment: increase n_estimators to 300"
```
示例指标输出:
```
{
"precision": 0.96,
"recall": 0.91,
"f1_score": 0.93,
"auc_roc": 0.98
}
```
## 结果
| 指标 | 分数 |
| --------- | ----- |
| 精确率 | 0.96 |
| 召回率 | 0.91 |
| F1 分数 | 0.93 |
| AUC-ROC | 0.98 |
## 数据集
本项目支持任何表格形式的交易数据集。推荐的公开数据集:
- [Kaggle — 信用卡欺诈检测](https://www.kaggle.com/datasets/mlg-ulb/creditcardfraud)(284K 笔交易,492 起欺诈)
- [Kaggle — IEEE-CIS 欺诈检测](https://www.kaggle.com/c/ieee-fraud-detection)(590K 笔交易)
将下载的 CSV 放在 `data/raw/transactions.csv` 中,然后运行:
```
dvc add data/raw/transactions.csv
git add data/raw/transactions.csv.dvc .gitignore
git commit -m "track raw dataset with DVC"
```
## 为什么选择 Dask + DVC?
| 挑战 | 解决方案 |
| ---------------------------------- | ----------------------------------------------------- |
| 数据集太大,pandas 无法处理 | **Dask** — 并行、分块、核外处理 |
| 无法复现之前的结果 | **DVC** — 跟踪数据、参数和模型版本 |
| 无法比较实验 | **DVC 指标** — 跨运行比较参数和分数 |
| 大文件无法放入 Git | **DVC remote** — 在 Git 外部存储大文件 |
| 阶段变更时流水线中断 | **DVC pipeline** — 依赖感知的阶段执行 |
## 许可证
本项目基于 MIT 许可证授权。详情请参阅 [LICENSE](LICENSE) 文件。
## 致谢
- [Dask 文档](https://docs.dask.org/)
- [DVC 文档](https://dvc.org/doc)
- [XGBoost 文档](https://xgboost.readthedocs.io/)
- [Kaggle 欺诈检测数据集](https://www.kaggle.com/)
标签:Apex, Dask, DVC, ML管道, Python, XGBoost, 信用风险, 可扩展计算, 大数据, 实验跟踪, 并行处理, 异常检测, 数字支付, 无后门, 机器学习, 模型版本控制, 欺诈检测, 特征工程, 目录扫描, 网络安全研究, 自动化机器学习, 逆向工具, 金融安全, 金融科技