mwandikikepha/Fraud-detection
GitHub: mwandikikepha/Fraud-detection
一套面向移动支付场景的端到端欺诈检测系统,覆盖数据验证、特征工程、模型训练到容器化部署的完整MLOps流程。
Stars: 0 | Forks: 0
# 移动支付欺诈检测
**挑战:** AI 工程挑战 — 端到端 ML 欺诈检测 Pipeline
## 项目功能
本项目构建了一个能够自动检测移动支付欺诈交易系统的系统。其工作流程如下:
1. 接收交易数据(金额、时间、位置、发送方、接收方)
2. 提取有助于识别可疑模式的特征
3. 训练机器学习模型以标记欺诈行为
4. 使用 Docker 和 Argo Workflows 将所有内容打包为自动化 pipeline
## 项目结构
```
ai_project/
├── README.md # This file
├── config.py # All paths and settings in one place
├── main.py # Runs the full pipeline with one command
├── requirements.txt # All Python libraries needed
├── data/
│ ├── transactions.csv # Training data (50,000 transactions)
│ ├── test_transactions.json # Test data (10,000 transactions)
│ └── test_predictions.csv # Our fraud predictions (submitted)
├── models/
│ ├── fraud_detection_model.pkl # Trained XGBoost model
│ └── scaler.pkl # Feature scaler
├── notebooks/
│ └── fraud_detection1.ipynb # Full analysis notebook
├── dockerfiles/
│ └── Dockerfile # Packages the pipeline into a container
├── argo/
│ └── workflow.yaml # Argo pipeline definition
└── src/
├── validate_data.py # Step 1: Check data quality
├── feature_engineering.py # Step 2: Create model features
├── train_model.py # Step 3: Train the model
├── evaluate_model.py # Step 4: Evaluate performance
└── predict.py # Step 5: Generate predictions
```
## 阶段 1:数据科学
### 数据说明
- 50,000 条已标记的移动支付交易数据(2024年1月–6月)
- 14 列:交易 ID、时间戳、发送方、接收方、金额、类型、余额、设备、位置
- 欺诈率:4%(2,000 条欺诈 / 48,000 条正常)
### 探索性数据分析 (EDA) 的主要发现
| 发现 | 详情 |
|---------|--------|
| 夜间欺诈 | 凌晨 12 点至 4 点的交易发生欺诈的可能性高出 15 倍 |
| 高金额 | 欺诈交易的中位数金额为 5,474 肯尼亚先令 (KES),而正常交易为 1,368 肯尼亚先令 |
| 整数金额 | 10% 的欺诈交易使用整数金额,而正常交易仅为 0.002% |
| 位置 | 欺诈交易的来源位置分布更广 |
| 交易类型 | 所有类型的欺诈率相似 — 单独作为信号较弱 |
### 提取的特征
| 特征 | 描述 |
|---------|-------------|
| `is_night` | 如果交易发生在凌晨 12 点至 4 点之间,则为 1 |
| `hour` | 一天中的小时 |
| `day_of_week` | 星期几 |
| `is_weekend` | 如果是周六或周日,则为 1 |
| `amount_to_balance_ratio` | 发送方正在发送的余额比例 |
| `balance_after_ratio` | 交易后剩余的余额比例 |
| `is_round_amount` | 如果金额是整数,则为 1 |
| `sender_tx_count` | 此发送方发起的总交易数 |
| `sender_tx_per_day` | 此发送方每天发起的交易数 |
| `sender_avg_amount` | 发送方的平均交易金额 |
| `amount_vs_avg` | 此金额对于该发送方是否异常? |
| `sender_unique_receivers` | 此发送方使用过多少个不同的接收方 |
| `receiver_tx_count` | 此接收方接收的总交易数 |
| `device_tx_count` | 此设备被使用的频率 |
| `location_distance` | 此交易距离发送方常用位置有多远 |
### 模型结果
| 模型 | AUC | F1 | Precision | Recall |
|-------|-----|----|-----------|--------|
| Logistic Regression | 0.9971 | 0.8529 | 0.7789 | 0.9425 |
| Random Forest | 0.9990 | 0.9078 | 0.8610 | 0.9600 |
| XGBoost | 0.9995 | 0.9428 | 0.9381 | 0.9475 |
| LightGBM | 0.9995 | 0.9371 | 0.9246 | 0.9500 |
**获胜者:XGBoost** — 最高的 AUC 和 F1 分数。
### 最终模型性能(消除数据泄漏后)
| 指标 | 值 |
|--------|-------|
| Accuracy | 98% |
| Precision | 79% |
| Recall | 78% |
| F1 Score | 0.78 |
| AUC-ROC | 0.9995 |
### 按重要性排名的主要特征
1. `location_distance` — 欺诈交易发生在远离发送方常用位置的地方
2. `amount` — 欺诈涉及更高的金额
3. `hour` — 一天中的时间是一个强烈的信号
4. `device_tx_count` — 设备使用频率
5. `is_night` — 夜间交易风险更高
## 阶段 2:MLOps
### Docker
整个 pipeline 被打包到一个 Docker 容器中,以确保可复现性。
**构建镜像:**
```
docker build -f dockerfiles/Dockerfile -t fraud-detection .
```
**运行 pipeline:**
```
docker run -v $(pwd)/data:/app/data -v $(pwd)/models:/app/models fraud-detection
```
### Argo Workflow
该 pipeline 被定义为一个包含 5 个按顺序执行的步骤的 Argo Workflow:
```
validate-data → engineer-features → train-model → evaluate-model → export-model
```
每个步骤都在 `fraud-detection` Docker 容器内运行。
**使用 Argo 运行(需要安装 Kubernetes + Argo):**
```
argo submit argo/workflow.yaml
argo watch fraud-detection-pipeline-xxxxx
```
## 如何在本地运行
### 1. 设置环境
```
pip install -r requirements.txt
```
### 2. 运行完整 pipeline
```
python main.py
```
### 3. 或分步运行
```
python src/validate_data.py
python src/train_model.py
python src/evaluate_model.py
python src/predict.py
```
### 4. 使用 Docker 运行
```
docker build -f dockerfiles/Dockerfile -t fraud-detection .
docker run -v $(pwd)/data:/app/data -v $(pwd)/models:/app/models fraud-detection
```
## 测试预测
测试集的预测结果保存在 `data/test_predictions.csv` 中。
- 测试集交易总数:10,000
- 被标记为欺诈:306 (3.06%)
- 预期欺诈率:~4%
格式:
```
transaction_id,predicted_fraud
6739205AC695C940,0
0891D338A86BFD86,1
...
```
## 局限性与未来改进
- **更多历史数据** — 如果每个用户有更多的交易历史,行为特征将会更具说服力
- **实时特征** — 速度特征(过去一小时的交易次数)将提升检测效果
- **阈值调优** — 根据误报与漏报的业务成本调整欺诈阈值
- **模型监控** — 随着欺诈模式的变化,随时间追踪模型性能
标签:Apex, Argo Workflows, Docker, MLOps, XGBoost, 交易监控, 人工智能, 反欺诈, 子域名突变, 安全防御评估, 容器化部署, 异常检测, 数据科学, 数据验证, 机器学习, 模型评估, 欺诈检测, 特征工程, 用户模式Hook绕过, 移动支付, 端到端机器学习, 自动化流水线, 请求拦截, 资源验证, 逆向工具, 金融科技