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, 交互式看板, 代码示例, 仪表板, 分类模型, 反洗钱, 可视化, 合成数据, 图分析, 基于规则, 多线程, 异常检测, 数据分析, 数据挖掘, 数据科学, 无后门, 机器学习, 梯度提升, 模型监控, 欺诈检测, 欺诈预防, 特权检测, 端到端, 系统审计, 资源验证, 逆向工具, 金融科技, 银行业, 风控系统