Peter-P-Saji111/Financial-Fraud-Detection-Using-XGBoost
GitHub: Peter-P-Saji111/Financial-Fraud-Detection-Using-XGBoost
一个结合 XGBoost 机器学习模型与规则引擎的全栈金融欺诈检测系统,提供实时交易风险评估和可解释的分析结果。
Stars: 0 | Forks: 0
# 欺诈检测系统
一个使用 React.js、FastAPI、XGBoost 和 PostgreSQL 构建的生产就绪型欺诈检测系统。该系统结合了机器学习与基于规则的分析,可实时检测欺诈交易。
## 架构
```
┌─────────────┐
│ React │
│ Frontend │
└──────┬──────┘
│ HTTP
↓
┌─────────────┐
│ FastAPI │
│ Backend │
└──────┬──────┘
│
├──────────────┐
│ │
↓ ↓
┌──────────┐ ┌──────────────┐
│ XGBoost │ │ Rule Engine │
│ Model │ │ (rules.py) │
└──────────┘ └──────────────┘
│ │
└──────┬───────┘
↓
┌─────────────────┐
│ Explanation │
│ Layer │
└────────┬────────┘
↓
┌─────────────────┐
│ PostgreSQL │
└─────────────────┘
```
## 功能特性
- **实时欺诈检测**:准确率高达 99.9% 的 XGBoost 机器学习模型
- **基于规则的分析**:用于业务逻辑验证的自定义规则引擎
- **可解释性层**:为预测结果提供易于人类理解的解释
- **仪表盘**:实时监控与动态统计信息
- **交易历史记录**:支持搜索和筛选的交易日志
- **数据分析**:风险分布与趋势分析
- **响应式 UI**:现代化的深色主题界面
- **RESTful API**:文档完善的 FastAPI 端点
- **生产就绪**:已部署在 Render 上并使用 PostgreSQL
## 技术栈
### 前端
- React 19.2
- React Router 7.18
- Axios 1.6
- Recharts 2.10
### 后端
- FastAPI 0.115
- Uvicorn 0.32
- SQLAlchemy 2.0
- Pydantic 2.9
- PostgreSQL
### 机器学习
- XGBoost 2.1
- scikit-learn 1.5
- pandas 2.2
- numpy 2.0
### 数据库
- PostgreSQL(Render 托管数据库)
### 部署
- Render(后端与数据库)
- Vercel(前端)
## 项目结构
```
.
├── backend/
│ ├── api.py # FastAPI application
│ ├── database.py # SQLAlchemy configuration
│ ├── rules.py # Rule engine
│ ├── requirements.txt # Python dependencies
│ ├── .env.example # Environment variables template
│ ├── render.yaml # Render deployment configuration
│ ├── generate_dataset.py # Synthetic data generator
│ ├── model/
│ │ ├── model.pkl # Trained XGBoost model
│ │ ├── encoders.pkl # Label encoders
│ │ ├── predict.py # Prediction logic
│ │ ├── train.py # Model training script
│ │ └── preprocess.py # Data preprocessing
│ ├── explain/
│ │ └── explain.py # Explanation layer
│ └── data/
│ └── transactions.csv # Training data (gitignored)
├── src/
│ ├── App.js # Main React component
│ ├── pages/
│ │ ├── Dashboard.jsx # Dashboard page
│ │ ├── Prediction.jsx # Prediction page
│ │ ├── Analytics.jsx # Analytics page
│ │ └── TransactionHistory.jsx # Transaction history
│ └── services/
│ └── api.js # API client
├── public/ # Static assets
├── .env.example # Frontend environment variables template
├── package.json # Node.js dependencies
├── .gitignore # Git ignore rules
└── README.md # This file
```
## 安装说明
### 前置条件
- Python 3.8+
- Node.js 16+
- pip
- npm
- PostgreSQL(本地)或 Render 账户(生产环境)
### 后端设置
1. **进入后端目录**
```
cd backend
```
2. **创建虚拟环境**
```
python -m venv venv
```
3. **激活虚拟环境**
**Windows:**
```
venv\Scripts\activate
```
**Linux/Mac:**
```
source venv/bin/activate
```
4. **安装依赖**
```
pip install -r requirements.txt
```
5. **配置环境变量**
```
cp .env.example .env
# 使用你的配置编辑 .env
```
6. **设置 PostgreSQL 数据库**
**本地 PostgreSQL:**
```
# 创建 database
createdb fraud_detection
# 使用你的 connection string 更新 .env
DATABASE_URL=postgresql://user:password@localhost:5432/fraud_detection
```
**Render(生产环境):**
- 在 Render 上创建一个 PostgreSQL 数据库
- 将连接字符串复制到 Render 的环境变量中
7. **生成训练数据**
```
python generate_dataset.py
```
8. **训练模型**
```
cd model
python train.py
cd ..
```
### 前端设置
1. **进入项目根目录**
```
cd ..
```
2. **安装依赖**
```
npm install
```
3. **配置环境变量**
```
cp .env.example .env
# 使用你的 backend URL 编辑 .env
```
## 运行应用程序
### 启动后端
```
cd backend
# 首先激活 venv
uvicorn api:app --reload --host 0.0.0.0 --port 8000
```
后端将在 `http://localhost:8000` 提供
API 文档位于 `http://localhost:8000/docs`
### 启动前端
```
npm start
```
前端将在 `http://localhost:3000` 提供
## 部署到 Render
### 后端部署
1. **将代码推送到 GitHub**
2. **在 Render 上创建 PostgreSQL 数据库**
- 进入 Render 仪表盘
- Create New → PostgreSQL
- 名称:`fraud-detection-db`
- 保存连接字符串
3. **在 Render 上创建 Web Service**
- 进入 Render 仪表盘
- Create New → Web Service
- 连接你的 GitHub 仓库
- 根目录:`backend`
- 构建命令:`pip install -r requirements.txt`
- 启动命令:`uvicorn api:app --host 0.0.0.0 --port $PORT`
4. **配置环境变量**
DATABASE_URL=
ALLOWED_ORIGINS=https://your-frontend.vercel.app,http://localhost:3000
MODEL_PATH=model/model.pkl
ENCODERS_PATH=model/encoders.pkl
5. **部署**
- 点击“Deploy Web Service”
- 等待构建完成
- 记录你的后端 URL(例如:`https://fraud-detection-api.onrender.com`)
### 前端部署 (Vercel)
1. **将代码推送到 GitHub**
2. **在 Vercel 上创建项目**
- 进入 Vercel 仪表盘
- Add New Project
- 导入你的 GitHub 仓库
3. **配置环境变量**
REACT_APP_API_URL=https://your-backend.onrender.com
4. **部署**
- 点击“Deploy”
- 等待构建完成
- 记录你的前端 URL
## API 端点
### 健康检查
```
GET /
Response: {"message": "Fraud Detection API Running"}
```
### 欺诈预测
```
POST /predict
Content-Type: application/json
Request:
{
"amount": 25000,
"merchant_category": "Electronics",
"merchant_risk": 0.8,
"country": "India",
"is_foreign": 0,
"hour": 12,
"device_trust": 0.8,
"previous_fraud": 0,
"transaction_velocity": 1
}
Response:
{
"prediction": 1,
"fraud_probability": 0.85,
"risk_score": 89,
"risk_level": "HIGH",
"rule_reasons": ["High transaction amount", "High-risk merchant"],
"shap_reasons": ["High transaction amount", "High-risk merchant"]
}
```
### 获取交易记录
```
GET /transactions
Response: Array of transaction objects
```
### 获取分析数据
```
GET /analytics
Response: {
"total_transactions": 1000,
"high_risk": 50,
"medium_risk": 150,
"low_risk": 800
}
```
### 获取仪表盘统计
```
GET /dashboard
Response: {
"total": 1000,
"flagged": 50,
"safe": 950,
"recentAlerts": [...]
}
```
## 模型训练
该模型使用 XGBoost 在合成的交易数据上进行训练。
### 训练过程
1. **数据生成**:10,000 条带有欺诈模式的合成交易记录
2. **特征工程**:类别编码、特征选择
3. **训练集与测试集划分**:80-20 的比例划分并进行分层抽样
4. **模型训练**:包含 200 个 estimators 的 XGBoost
5. **模型评估**:准确率、精确率、召回率、F1 分数、ROC AUC
### 模型性能表现
- **准确率 (Accuracy)**:99.95%
- **精确率 (Precision)**:100%
- **召回率 (Recall)**:99.5%
- **F1 分数**:99.75%
- **ROC AUC**:100%
## 规则引擎
规则引擎将业务规则应用于交易:
| 规则 | 分数 | 原因 |
|------|-------|--------|
| 金额 > 5000 | +30 | 交易金额高 |
| 商户风险 > 0.8 | +20 | 高风险商户 |
| 境外交易 | +15 | 境外交易 |
| 设备信任度 < 0.3 | +10 | 设备信任度低 |
| 历史欺诈记录 | +15 | 存在历史欺诈记录 |
| 交易频率 > 10 | +10 | 交易频率过高 |
## 风险计算
```
risk_score = (fraud_probability × 70) + rule_score
```
**风险等级:**
- **HIGH**:risk_score ≥ 80
- **MEDIUM**:50 ≤ risk_score < 80
- **LOW**:risk_score < 50
## 环境变量
### 后端 (backend/.env)
```
DATABASE_URL=postgresql://user:password@localhost:5432/fraud_detection
ALLOWED_ORIGINS=http://localhost:3000,https://your-frontend.vercel.app
MODEL_PATH=model/model.pkl
ENCODERS_PATH=model/encoders.pkl
```
### 前端 (.env)
```
REACT_APP_API_URL=http://localhost:8000
# Production: REACT_APP_API_URL=https://your-backend.onrender.com
```
### Render 环境变量
在你的 Render Web Service 仪表盘中配置以下内容:
- `DATABASE_URL` - PostgreSQL 连接字符串(从数据库自动关联)
- `ALLOWED_ORIGINS` - 允许的前端 URL 列表(以逗号分隔)
- `MODEL_PATH` - model.pkl 文件的路径
- `ENCODERS_PATH` - encoders.pkl 文件的路径
## 截图
### 仪表盘
[占位符:显示实时统计信息的仪表盘截图]
### 预测
[占位符:带风险表的预测表单]
### 分析
[占位符:风险分布图]
### 交易历史记录
[占位符:带筛选器的交易表格]
## 故障排除
### 后端问题
**ModuleNotFoundError: No module named 'psycopg2'**
```
pip install psycopg2-binary
```
**数据库连接错误**
- 检查 DATABASE_URL 是否设置正确
- 确保本地 PostgreSQL 正在运行,或 Render 数据库处于活跃状态
- 检查防火墙/网络设置
**模型加载错误**
- 检查 backend/model/ 目录下是否存在 model.pkl 和 encoders.pkl 文件
- 检查 MODEL_PATH 和 ENCODERS_PATH 环境变量
### 前端问题
**CORS 错误**
- 检查 ALLOWED_ORIGINS 是否包含你的前端 URL
- 检查后端 CORS 配置
**API 连接错误**
- 检查 REACT_APP_API_URL 是否设置正确
- 确保后端正在运行且可访问
- 确保前端使用了正确的协议(http/https)
### 部署问题
**Render 构建失败**
- 检查构建日志中的具体错误
- 确认所有依赖项都在 requirements.txt 中
- 确保模型文件已提交到 Git
**数据库连接超时**
- 确保 Render PostgreSQL 处于活跃状态
- 检查 DATABASE_URL 格式
- 确保数据库与 Web Service 处于同一区域
## 未来改进
- [ ] 添加用户身份验证
- [ ] 实现实时 WebSocket 更新
- [ ] 添加更多 ML 模型(集成学习)
- [ ] 实现模型版本控制
- [ ] 添加 A/B 测试框架
- [ ] 实现速率限制
- [ ] 添加全面的日志记录
- [ ] 添加单元和集成测试
- [ ] Docker 容器化
- [ ] CI/CD pipeline
- [ ] 添加监控和告警
- [ ] 使用 Redis 实现缓存
- [ ] 添加 API 速率限制与节流
## 贡献指南
1. Fork 该仓库
2. 创建一个功能分支 (`git checkout -b feature/amazing-feature`)
3. 提交你的更改 (`git commit -m 'Add amazing feature'`)
4. 推送到该分支 (`git push origin feature/amazing-feature`)
5. 发起一个 Pull Request
## 开源许可
该项目基于 MIT 许可证授权 - 详情请参阅 LICENSE 文件。
## 作者
- **Peter P Saji** - 初始工作
## 致谢
- 用于 ML 模型的 XGBoost 库
- 用于 Web 框架的 FastAPI
- 用于前端 UI 的 React
- 用于数据可视化的 Recharts
- 用于托管的 Render
- 用于前端部署的 Vercel
标签:Apex, AV绕过, FastAPI, React, Syscalls, XGBoost, 反欺诈检测, 机器学习, 测试用例, 自定义脚本, 逆向工具, 金融风控