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, 反欺诈检测, 机器学习, 测试用例, 自定义脚本, 逆向工具, 金融风控