khm08/fraud-detection-banca-roma

GitHub: khm08/fraud-detection-banca-roma

这是一个为数字银行设计的端到端欺诈检测系统,结合了机器学习、规则引擎和图分析技术来识别并预防多种交易欺诈行为。

Stars: 0 | Forks: 0

# Banca Roma Digitale — 欺诈检测与预防系统 **作者:** Kareem Makki | **日期:** 2025 | **状态:** 已完成 ## 执行摘要 为 **Banca Roma Digitale**(一家位于意大利罗马的数字银行)构建的端到端欺诈检测系统。该项目涵盖合成数据生成、探索性分析、机器学习模型开发、基于规则的策略、基于图的欺诈检测、模型监控以及交互式分析仪表板。 **关键成果:** - **最佳模型 AUC-ROC:** 0.9991 (Gradient Boosting) - **检测率:** 94.3% 召回率 - **精确率:** 97.9% (最小化误报) - **分析的总欺诈敞口:** 50,000 笔交易中涉及 1080 万欧元 ## 项目结构 ``` fraud-detection-project/ | |-- data/ | |-- banca_roma_digitale_data.xlsx # Raw synthetic dataset (5 sheets) | |-- tableau_fraud_data.csv # Tableau-ready flat file (42 columns) | |-- banca_roma_fraud.db # SQLite database with all tables | |-- notebooks/ | |-- Banca_Roma_Fraud_Detection.ipynb # Full ML pipeline (Jupyter) | |-- scripts/ | |-- generate_data.py # Synthetic data generator | |-- fraud_detection_pipeline.py # Python ML pipeline (standalone) | |-- fraud_analysis.sql # SQL analysis queries (10 sections) | |-- dashboards/ | |-- Banca_Roma_Fraud_Dashboard.html # Interactive web dashboard | |-- Banca_Roma_Fraud_Dashboard_v2.xlsx # Excel dashboard | |-- Banca_Roma_Fraud_Detection_v2.twbx # Tableau workbook | |-- TABLEAU_BUILD_GUIDE.md # Step-by-step Tableau build guide | |-- reports/ | |-- fraud_detection_report.xlsx # Model comparison & monitoring report | |-- Fraud_Detection_Presentation.pptx # Executive presentation | |-- charts/ | |-- 01_fraud_overview.png | |-- 02_cp_cnp_analysis.png | |-- 03_temporal_patterns.png | |-- 04_network_graph.png | |-- 05_model_comparison.png | |-- 06_feature_importance.png | |-- 07_model_monitoring.png | |-- README.md # This file ``` ## 数据集概览 | 表 | 记录数 | 描述 | |-------|---------|-------------| | Customers | 2,000 | 意大利银行客户,包含 KYC、收入、信用评分 | | Transactions | 50,000 | 24 个月的银行交易记录 (2024 年 1 月 - 2025 年 12 月) | | Devices | 3,983 | 设备指纹、IP、操作系统版本 | | Alerts | 2,635 | 带有处置结果的欺诈警报 | | Network Edges | 188 | 用于图分析的客户间连接 | ### 涵盖的欺诈类型 | 欺诈类型 | 数量 | 敞口 (EUR) | 描述 | |------------|-------|----------------|-------------| | Account Takeover (ATO) | 1,013 | 5,399,153 | 通过被盗凭证进行未授权访问 | | Card Present Fraud | 864 | 885,386 | 在 POS/ATM 使用伪造/被盗卡片 | | Phishing ATO | 856 | 2,130,041 | 导致账户受损的社会工程学攻击 | | Card Not Present (CNP) | 615 | 1,555,029 | 无实体卡的网络/电话欺诈 | | First Party Fraud | 408 | 701,632 | 客户发起的虚假索赔 | | Money Mule | 8 | 85,784 | 用于洗钱的账户 | | Synthetic Identity | 3 | 16,337 | 用于信贷欺诈的伪造身份 | ## 技术栈 | 类别 | 技术 | |----------|-------------| | Languages | Python 3.10+, SQL | | ML Frameworks | Scikit-learn, NumPy, Pandas | | Visualization | Matplotlib, Seaborn, Chart.js, Tableau | | Database | SQLite | | Graph Analysis | NetworkX | | Dashboard | HTML/CSS/JS (Chart.js), Excel (openpyxl), Tableau | | Notebook | Jupyter (ipynb) | ## 模型与结果 ### 监督学习模型 | 模型 | AUC-ROC | 精确率 | 召回率 | F1 分数 | |-------|---------|-----------|--------|----------| | **Gradient Boosting** | **0.9991** | **0.979** | **0.943** | **0.961** | | Random Forest | 0.9985 | 0.973 | 0.921 | 0.947 | | Decision Tree | 0.9788 | 0.765 | 0.954 | 0.849 | | Logistic Regression | 0.9661 | 0.534 | 0.878 | 0.664 | ### 无监督学习模型 | 模型 | 精确率 | 召回率 | F1 分数 | |-------|-----------|--------|----------| | Isolation Forest | 0.464 | 0.462 | 0.463 | ### 混合模型 (ML + 规则) | 方法 | AUC-ROC | 精确率 | 召回率 | F1 分数 | |----------|---------|-----------|--------|----------| | Hybrid (60% ML + 40% Rules) | 0.9969 | 0.960 | 0.910 | 0.940 | ## 特征工程 (29 个特征) **交易特征:** amount, card presence, velocity (1h/24h), response time, channel, merchant category, authentication method **客户特征:** age, monthly income, credit score, account age, account type, KYC status **风险指标:** foreign transaction flag, unknown device flag, no authentication flag, amount-to-income ratio, high amount flag, night transaction flag, transfer flag, crypto flag **图特征:** degree centrality, neighbor count, suspicious connections, fraud cluster membership ## 基于规则的策略 (10 条专家规则) 1. 高频交易 (1 小时内 5 笔以上交易) 2. 未知设备 + 高金额 (>EUR 500) 3. 境外交易 + 无身份验证 4. 金额超过月收入的 3 倍 5. 新账户 (<30 天) + 大额转账 (>EUR 1,000) 6. 夜间交易 + 境外来源 7. 加密货币交易所 + 高金额 (>EUR 2,000) 8. 合成身份标记 9. 骡子账户标记 10. 低响应时间 + 高金额 (自动化攻击) ## 基于图的欺诈检测 - 使用 NetworkX 构建客户网络图 - 72 个连通组件中包含 179 个节点和 188 条边 - 通过共享设备、IP 和电话模式识别可疑集群 - 通过社区分析检测欺诈团伙 - 节点级特征 (degree centrality, suspicious connection count) 输入到 ML 模型中 ## 主要发现与建议 1. **账户接管是首要威胁** — 敞口 540 万欧元,部署设备指纹验证作为主要防御手段 2. **无卡欺诈 (CNP) 主导在线渠道** — 9.05% 的欺诈率,而移动端为 6.63% 3. **部署 Gradient Boosting 进行实时评分** — 99.91% AUC,精确率 97.9% 4. **实施基于图的监控** — 识别出 72 个可疑网络集群 5. **收紧夜间时段规则** — 22:00-06:00 期间欺诈率较高 6. **标记大额转账的新账户** — 账户年龄 <30 天且转账 >EUR 1,000 7. **每月监控模型漂移** — 自动化仪表板跟踪精确率、召回率和 AUC 随时间的变化 ## 如何运行 ### 前置条件 ``` pip install pandas numpy scikit-learn openpyxl networkx matplotlib seaborn ``` ### 步骤 1:生成数据 ``` python generate_data.py ``` ### 步骤 2:运行 ML 流水线 ``` python fraud_detection_pipeline.py # 或在 Jupyter 中打开 Banca_Roma_Fraud_Detection.ipynb ``` ### 步骤 3:运行 SQL 分析 ``` sqlite3 banca_roma_fraud.db < fraud_analysis.sql ``` ### 步骤 4:查看仪表板 在任何 Web 浏览器中打开 `Banca_Roma_Fraud_Dashboard.html`。 ## 实时仪表板 [点击此处查看交互式欺诈仪表板](https://khm08.github.io/fraud-detection-banca-roma/) *(部署方法:通过 khm08 仓库将 HTML 文件上传到 GitHub Pages)* ## 联系方式 **Kareem Makki** - Email: kareemmakki@gmail.com - LinkedIn: [linkedin.com/in/kareemmakki](https://linkedin.com/in/kareemmakki) - GitHub: [github.com/khm08](https://github.com/khm08) - Portfolio: [datascienceportfol.io/kareemmakki](https://datascienceportfol.io/kareemmakki) - Coursera: [Financial Reporting with Tableau](https://www.coursera.org/projects/financial-reporting-with-tableau-parameters--filters)
标签:Apex, AUC-ROC, BSD, Mutation, Python, SQL, SQLite, Tableau, 交互式看板, 代码示例, 仪表板, 分类模型, 反洗钱, 可视化, 合成数据, 图分析, 基于规则, 多线程, 异常检测, 数据分析, 数据挖掘, 数据科学, 无后门, 机器学习, 梯度提升, 模型监控, 欺诈检测, 欺诈预防, 特权检测, 端到端, 系统审计, 资源验证, 逆向工具, 金融科技, 银行业, 风控系统