kgothatso605/credit-fraud-detection-ml

GitHub: kgothatso605/credit-fraud-detection-ml

基于系统化特征工程的端到端信用卡欺诈检测机器学习框架,包含从数据处理到API部署的完整生产级流水线。

Stars: 0 | Forks: 0

# 信用卡欺诈检测 ML 框架 [![Python](https://img.shields.io/badge/Python-3.9+-blue.svg)](https://www.python.org/) [![License](https://img.shields.io/badge/License-MIT-green.svg)](LICENSE) [![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black) ## 项目概述 从零开始构建的端到端欺诈检测系统,通过系统化的方法论和专业的 ML 实践,实现了 76.28% 的精确率和 9.04% 的召回率。 **核心成就**:基于 terminal 的特征占了模型重要性的 58%,这表明交易发生的*地点*比发生的时间或金额*多少*更为重要。 ### 数据集 - **来源**:Kaggle - 信用卡欺诈检测挑战赛 - **规模**:291,231 条训练交易,226,731 条测试交易 - **不平衡度**:1:43 比例(2.26% 欺诈率) - **结构**:多表关系数据(交易、客户、terminal) **致谢**:我们非常感谢 Kaggle 提供此合成数据集用于教育目的。 ## 结果摘要 | 指标 | 数值 | 状态 | |--------|-------|--------| | Precision | 76.28% | 高 | | Recall | 9.04% | 保守 | | F1-Score | 16.17% | 最佳平衡 | | 训练时间 | 36.7s | 快速 | | 核心特征 | terminal_fraud_rate | 29.75% 重要性 | **关键发现**:发现了基本的精确率-召回率约束,其中 85%+ 的精确率需要 <1% 的召回率。 ## 架构 ``` End-to-End Pipeline: Raw Data → Feature Engineering → Model Training → Evaluation → Deployment → API ``` ### 构建的特征:共 58 个 1. **时间特征 (14)**:高风险时段 (21:00-04:00),周期性编码 2. **地理特征 (2)**:距离计算 3. **金额偏差 (6)**:每位客户的个性化 Z-score 4. **终端风险 (5)**:历史欺诈率(占模型重要性的 58%!) 5. **客户行为 (3)**:使用习惯 6. **高级上下文 (7)**:周末模式,客户时间习惯 7. **交互特征 (6)**:复合效应 ### 评估的模型:20 种配置 - Logistic Regression, Random Forest, XGBoost, LightGBM, CatBoost - 技术:Baseline、Class Weights、SMOTE、Threshold Tuning - **已选择**:Random Forest Baseline(最佳的精确率-召回率平衡) ## 快速开始 ### 安装 ``` # Clone repository git clone https://github.com/yourusername/credit_fraud_ml.git cd credit_fraud_ml # Create virtual environment python -m venv venv source venv/bin/activate # On Windows: venv\Scripts\activate # Install package pip install -e . # Or install dependencies only pip install -r requirements.txt ``` ### 使用 #### 1. 特征工程 ``` from src.features.feature_engineering import FeatureEngineer # Initialize engineer = FeatureEngineer() # Load and engineer features train_engineered = engineer.fit_transform(train_df, customers_df, terminals_df) test_engineered = engineer.transform(test_df, customers_df, terminals_df) ``` #### 2. 模型训练 ``` from src.models.train import train_model # Train model model, metrics = train_model( X_train, y_train, model_type='random_forest', save_path='models/fraud_detector.pkl' ) print(f"Precision: {metrics['precision']:.2%}") print(f"Recall: {metrics['recall']:.2%}") ``` #### 3. 预测 ``` from src.deployment.predictor import FraudPredictor # Initialize predictor predictor = FraudPredictor(model_path='models/fraud_detector.pkl') # Predict result = predictor.predict(transaction_data) print(f"Fraud Probability: {result['fraud_probability']:.2%}") ``` #### 4. API 部署 ``` # Start API server uvicorn src.deployment.api:app --host 0.0.0.0 --port 8000 # Test prediction curl -X POST "http://localhost:8000/predict" \ -H "Content-Type: application/json" \ -d '{"transaction_id": 12345, "amount": 100.50, ...}' ``` ## 项目结构 ``` credit_fraud_ml/ ├── src/ # Source code │ ├── data/ # Data loading & validation │ ├── features/ # Feature engineering │ ├── models/ # Model training & evaluation │ ├── deployment/ # API & serving │ └── utils/ # Utilities ├── notebooks/ # Jupyter notebooks ├── tests/ # Unit tests ├── deployment/ # Docker & K8s configs ├── data/ # Data (gitignored) ├── models/ # Saved models (gitignored) └── reports/ # Figures & results ``` ## 方法论 ### 阶段 1:EDA(第 1-3 天) **发现**: - 高风险时段:21:00-04:00(欺诈率高出 50%) - 交易量与风险悖论:低交易量时段 = 更高的欺诈率 - 金额分析:欺诈交易与正常交易之间仅有 $4.07 的差异 - 合成数据识别:周二欺诈率升高(异常模式) ### 阶段 2:特征工程(第 4-7 天) 跨 7 个类别**创建了 58 个特征**,重点关注: - 终端风险指标(占模型重要性的 58%!) - 个性化金额偏差(特定于客户的基准) - 高级时间模式(高风险时段指标) ### 阶段 3:模型评估(第 8-12 天) **系统性比较**: - 测试了 20 种配置(5 个模型 × 4 种技术) - 发现了精确率-召回率约束 - 选择了 Random Forest Baseline 作为最优模型 ### 阶段 4:部署(第 13-17 天) **生产就绪**: - FastAPI REST API - Docker 容器化 - 监控与日志记录 - 模型版本控制 ## 关键经验 ### 1. 特征工程 > 模型选择 尽管测试了 5 种不同的模型类型,但 terminal 特征占据了主导地位 (58%)。 ### 2. 数据驱动 > 假设驱动 合成数据显示出周二欺诈率升高(而不是周末),这教会了我们应相信数据而非领域假设。 ### 3. 系统性评估至关重要 测试 20 种配置揭示了在临时测试中不可见的约束。 ### 4. 如实记录局限性 事实证明 85% 的精确率目标是不可能实现的(需要 <1% 的召回率)。记录失败的原因与记录成功一样重要。 ## 性能优化 ### 当前模型 - **Precision**:76.28% - **Recall**:9.04% - **推理时间**:<10ms/交易 ### 潜在改进 1. 时间序列特征(滚动窗口) 2. 网络特征(欺诈团伙检测) 3. 集成方法(stacking) 4. 深度学习(用于序列的 LSTM) ## 部署 ### Docker ``` # Build image docker build -t fraud-detector:latest . # Run container docker run -p 8000:8000 fraud-detector:latest ``` ### Kubernetes ``` # Deploy to K8s kubectl apply -f deployment/kubernetes/ # Check status kubectl get pods -l app=fraud-detector ``` ### 监控 - 位于 `/metrics` 的 Prometheus 指标 - 位于 `/health` 的健康检查 - 模型性能跟踪 ## 测试 ``` # Run all tests pytest tests/ # With coverage pytest tests/ --cov=src --cov-report=html # Specific test pytest tests/test_features.py -v ``` ## API 文档 运行后,请访问:`http://localhost:8000/docs` ### 接口 **POST /predict** - 预测单笔交易 ``` { "transaction_id": 12345, "amount": 100.50, "customer_id": 1, "terminal_id": 50, "timestamp": "2026-02-16T21:30:00" } ``` **POST /predict/batch** - 批量预测 **GET /health** - 健康检查 **GET /metrics** - Prometheus 指标 ## 作者 **Kgothatso Ntumbe** 威特沃特斯兰德大学物理学硕士学生 有志成为 AI 工程师与创业者 ## 许可证 MIT 许可证 - 详情请参阅 LICENSE 文件 ## 鸣谢 - **数据集**:Kaggle - 信用卡欺诈检测挑战赛 - **平台**:用于开发的 CERN SWAN - **工具**:scikit-learn, XGBoost, LightGBM, CatBoost, FastAPI ## 文档 - [API 文档](docs/api_documentation.md) - [特征工程指南](docs/feature_engineering.md) - [部署指南](docs/deployment.md) ## 路线图 - [x] EDA 与特征工程 - [x] 模型训练与评估 - [x] API 部署 - [ ] 实时流处理 Pipeline - [ ] A/B 测试框架 - [ ] AutoML 集成 - [ ] 模型监控仪表板 ** 如果您觉得这个项目有用,请考虑给它点个 Star!**
标签:Apex, Python, 子域名突变, 数据科学, 无后门, 机器学习, 欺诈检测, 特征工程, 请求拦截, 资源验证, 逆向工具, 金融科技