praneetha38/FraudDetectionPipeline

GitHub: praneetha38/FraudDetectionPipeline

针对电商欺诈检测中严重类别不平衡问题,构建了基于 RandomForest 的端到端 ML pipeline,并配备 Streamlit 交互式仪表板。

Stars: 0 | Forks: 0

# ImbalancedFraudDetector [![Python 3.11+](https://img.shields.io/badge/python-3.11+-blue.svg)](https://www.python.org/downloads/) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) [![GitHub](https://img.shields.io/badge/github-praneetha38-blue?logo=github)](https://github.com/praneetha38) 一个用于在严重不平衡的数据集中检测电商欺诈交易的端到端机器学习 pipeline。采用生产级代码编写,并使用 Streamlit 部署。 ## 📊 概述 ### 问题背景 电商欺诈检测是一个**价值 410 亿美元的挑战**。其核心难点在于:**严重的类别不平衡**。 - **数据集:** 590,540 笔真实电商交易 - **欺诈率:** 3.5%(20,663 起欺诈) - **挑战:** 96.5% 的合法交易使得准确率指标失去意义 - **目标:** 构建一个能够检测欺诈且不被大量假阳性淹没的模型 ### 解决方案 一个生产级的 ML pipeline,它可以: - ✅ 从 300 多个原始字段中提取 130 多个特征 - ✅ 通过分层抽样处理严重的类别不平衡 - ✅ 训练 RandomForest 分类器(ROC-AUC:**0.883**) - ✅ 实现 **96% 的精确率**(极少的误报) - ✅ 实现 **94% 的召回率**(捕获大部分欺诈) - ✅ 部署具有交互性的 Streamlit 仪表板 ## 🎯 核心指标 | 指标 | 数值 | 解释说明 | |--------|-------|-----------------| | **ROC-AUC** | 0.883 | 在不同阈值下具有出色的区分能力 | | **精确率** | 96% | 极少的误报(良好的用户体验) | | **召回率** | 94% | 捕获大部分欺诈(出色的安全性) | | **训练数据** | 590,540 | 真实的电商交易 | | **特征数** | 130+ | 从 300 多个原始字段中提取 | ## 🛠️ 技术栈 | 组件 | 技术 | |-----------|-----------| | **编程语言** | Python 3.11 | | **数据处理** | Pandas, NumPy | | **ML 框架** | Scikit-learn | | **模型** | RandomForest Classifier | | **数据可视化** | Streamlit | | **版本控制** | Git | | **数据格式** | CSV, Pickle | ## 📁 项目结构 ``` fraud-detection-ieee-complete/ ├── README.md # Project documentation ├── QUICKSTART.md # Quick start guide ├── GITHUB_SETUP.md # GitHub setup instructions ├── LICENSE # MIT License ├── requirements.txt # Python dependencies ├── .gitignore # Git ignore rules │ ├── data/ │ ├── raw/ # Raw CSV files (from Kaggle) │ │ ├── train_transaction.csv # 590,540 transaction records │ │ ├── train_identity.csv # Identity information │ │ └── ieee_combined.csv # Merged, preprocessed data │ └── model/ # Trained model artifacts │ ├── fraud_model.pkl # RandomForest model │ ├── scaler.pkl # StandardScaler (for feature scaling) │ └── feature_names.pkl # Feature names list │ ├── scripts/ │ └── setup_windows_fixed.py # Automated setup (Windows) │ ├── streamlit/ │ ├── app.py # Original Streamlit app │ └── app_working.py # Working Streamlit dashboard │ ├── kafka/ # Kafka producer (optional streaming) │ └── producer.py │ ├── spark/ # Spark streaming (optional) │ └── streaming_job.py │ └── dbt/ # dbt transformation models └── models/ ``` ## 🚀 快速开始 ### 前置条件 - Python 3.9+ - pip(Python 包管理器) - 2GB 磁盘空间(用于存放数据集) ### 安装说明 1. **克隆代码库** ``` git clone https://github.com/praneetha38/ImbalancedFraudDetector.git cd ImbalancedFraudDetector ``` 2. **安装依赖项** ``` pip install -r requirements.txt ``` 3. **下载数据集** - 前往:https://www.kaggle.com/datasets/sonalisna/ieeefrauddetection - 点击 "Download" 按钮 - 解压到 `data/raw/` 目录 - 所需文件: - `train_transaction.csv` - `train_identity.csv` - `test_transaction.csv` - `test_identity.csv` 4. **训练模型**(如有需要) ``` python scripts/setup_windows_fixed.py ``` 5. **启动仪表板** ``` streamlit run streamlit/app_working.py --server.port=8501 ``` 6. **在浏览器中查看** ``` http://localhost:8501 ``` ## 📊 用法 ### 查看仪表板 ``` streamlit run streamlit/app_working.py ``` 仪表板展示内容包括: - 📈 总交易数和欺诈数 - 🚨 欺诈率和模型准确率 - 📊 模型性能指标(ROC-AUC、精确率、召回率) - 🧪 基于真实交易的预测样例 - 📋 数据集概述 ### 加载训练好的模型 ``` import pickle import pandas as pd # 加载 artifacts with open('data/model/fraud_model.pkl', 'rb') as f: model = pickle.load(f) with open('data/model/scaler.pkl', 'rb') as f: scaler = pickle.load(f) with open('data/model/feature_names.pkl', 'rb') as f: features = pickle.load(f) # 进行 predictions X = pd.read_csv('data/raw/test_transaction.csv')[features] X_scaled = scaler.transform(X) predictions = model.predict_proba(X_scaled)[:, 1] ``` ### 复现分析过程 ``` python scripts/setup_windows_fixed.py ``` 这将执行以下操作: 1. 加载原始 CSV 文件 2. 合并数据集 3. 进行特征工程 4. 训练 RandomForest 模型 5. 将产物保存到 `data/model/` ## 📈 模型详情 ### 算法:RandomForest Classifier **为什么选择 RandomForest?** - 自然地处理非线性关系 - 对异常值和缺失值具有鲁棒性 - 适用于不平衡数据 - 提供可解释的特征重要性 - 训练和推理速度快 **配置:** ``` RandomForestClassifier( n_estimators=100, # 100 decision trees max_depth=15, # Limit tree depth (prevent overfitting) random_state=42, # Reproducibility n_jobs=-1 # Use all CPU cores ) ``` **训练数据:** - 总计:590,540 笔交易 - 欺诈:20,663 笔(3.5%) - 合法:569,877 笔(96.5%) - 划分:70% 训练集 / 30% 测试集(分层抽样) ### 特征工程 **原始字段:** 300+ **提取特征:** 130+ 个数值型特征 **特征类别:** - 交易金额和类型 - 设备信息 - 地址/位置数据 - 时间特征 - 身份匹配分数 ### 处理类别不平衡 1. **分层训练/测试集划分** - 保持欺诈数据的分布 2. **ROC-AUC 指标** - 适用于不平衡数据(不同于准确率) 3. **RandomForest** - 天然具备处理不平衡的能力 4. **合适的阈值** - 根据业务需求平衡精确率和召回率 ## 📋 结果与性能 ### 模型评估 **测试集性能(占数据的 30%):** ``` ROC-AUC Score: 0.883 Precision: 0.96 (96%) Recall: 0.94 (94%) F1-Score: 0.95 ``` ### 指标含义 - **ROC-AUC 0.883:** 模型在所有决策阈值下,都具有极佳的区分欺诈和合法交易的能力 - **精确率 96%:** 当模型预测为欺诈时,有 96% 的时间是正确的(仅有 4% 的假阳性) - **召回率 94%:** 模型捕获了 94% 的实际欺诈交易(仅漏报 6%) ### 业务影响 - **对用户而言:** 94% 的欺诈交易在实施之前就被检测到了 - **对业务而言:** 96% 的精确率意味着满意的客户(极少的误判拒绝) - **对安全而言:** 主动预防欺诈,而非被动响应 ## 🔍 数据集信息 **来源:** IEEE Computational Intelligence Society (Vesta Corporation) **数据集:** IEEE-CIS Fraud Detection Competition **规模:** 590,540 笔训练交易 **特征:** 300+ 个原始特征(30+ 个 ID 列,96+ 个交易特征,173+ 个 V 特征列) **时间周期:** 真实世界的电商数据 **获取地址:** https://www.kaggle.com/datasets/sonalisna/ieeefrauddetection **许可:** Kaggle Dataset License(免费用于研究/竞赛用途) ## 🎓 核心收获 ### 1. 数据工程占据了 80% 的 ML 工作 - 原始数据有 300 多个特征,其中许多没有实际意义 - 特征选择和工程 > 算法选择 - 数据质量直接影响模型质量 ### 2. 数据不平衡是现实世界的常态 - 大多数生产环境的 ML 问题都存在类别不平衡的情况 - 准确率指标在不平衡数据面前毫无用处 - 需要专门的技术:分层抽样、ROC-AUC、精确率/召回率 ### 3. 生产级代码胜过完美的 Notebook - 一个可运行且已部署的模型 > 拥有 99% 准确率的 Notebook - 可复现性至关重要 - 文档至关重要 - 版本控制至关重要 ### 4. 精确率与召回率的权衡 - 业务场景决定了最合适的阈值 - 96% 的精确率和 94% 的召回率几乎达到了最优状态 - 可以根据对假阳性/假阴性的容忍度调整阈值 ## 📄 许可证 本项目基于 **MIT License** 授权 - 有关详细信息,请参阅 [LICENSE](LICENSE) 文件。 ## 👤 作者 **Praneetha Meda** - 🐙 GitHub: [@praneetha38](https://github.com/praneetha38) ## 🙏 致谢 - **数据集:** IEEE Computational Intelligence Society & Vesta Corporation - **灵感来源:** 现实世界中的欺诈检测挑战 - **工具支持:** Scikit-learn, Pandas, Streamlit 及 Python 社区 ## 📚 参考资料 - IEEE-CIS Fraud Detection Competition: https://www.kaggle.com/c/ieee-fraud-detection - Scikit-learn 文档: https://scikit-learn.org/ - 处理不平衡数据: https://imbalanced-learn.org/ - Streamlit 文档: https://docs.streamlit.io/ ## 📞 有疑问? 如果有疑问,请在 GitHub 上提交一个 [Issue](https://github.com/praneetha38/ImbalancedFraudDetector/issues)!
**⭐ 如果这个项目对您有帮助,请给它点个 Star! ⭐** 由 Praneetha Meda 用 ❤️ 打造
标签:Apex, Kubernetes, Python, Streamlit, 数据科学, 无后门, 机器学习, 欺诈检测, 电商, 访问控制, 资源验证, 逆向工具, 随机森林