Ktrimalrao/Bank-Transaction-Fraud-Detection-System-Hybrid-Rule-Based-Machine-Learning-Pipeline

GitHub: Ktrimalrao/Bank-Transaction-Fraud-Detection-System-Hybrid-Rule-Based-Machine-Learning-Pipeline

基于 Microsoft Fabric 构建的银行交易欺诈检测系统,通过混合规则引擎与随机森林模型实现端到端的欺诈识别、自动化响应和客户通知。

Stars: 0 | Forks: 0

# 🏦 银行交易欺诈检测系统 — 混合规则与机器学习 Pipeline 一个基于 Microsoft Fabric 构建的端到端欺诈检测与客户警报平台,结合了确定性规则检测引擎、训练有素的机器学习模型、自动化欺诈响应以及真实的电子邮件通知。 ## 目录 * [概述](#overview) * [架构](#architecture) * [使用的技术](#technologies-used) * [数据集](#dataset) * [安装说明](#setup-instructions) * [实现细节](#implementation-details) * [数据流](#data-flow) * [安全配置](#security-configuration) * [结果](#results) * [未来增强功能](#future-enhancements) * [贡献](#contributing) * [许可证](#license) ## 概述 银行每天处理数以百万计的银行卡和 UPI 交易,需要在几秒钟内检测出欺诈行为,而不是等待客户报告。本项目模拟了一个真实的银行欺诈检测平台,完全基于 **Microsoft Fabric 的免费试用容量** 构建,具有以下功能: - 通过 Bronze/Silver/Gold 奖牌架构摄取并处理银行交易数据 - 使用 **10 条规则的确定性引擎** 检测欺诈(速度检查、地理异常、高额交易、异常时段活动等) - 使用 **训练好的 Random Forest 分类器** 评估欺诈风险,并与基于规则的评分混合为一个综合决策 - 自动触发模拟的欺诈响应操作(冻结银行卡、锁定账户、立案调查) - 向客户发送 **真实的电子邮件警报**,并带有安全防护措施,防止将邮件退回至合成/未经验证的地址 - 应用适当的数据科学实践:可复现的真实标签(ground-truth)标记、类别不平衡处理、MLflow 实验跟踪以及基于 SHAP 的模型可解释性 这是一个用于个人学习/作品展示的项目,不是生产级银行系统——所有数据均为合成生成。 ## 架构 ![架构图](https://github.com/Ktrimalrao/Bank-Transaction-Fraud-Detection-System-Hybrid-Rule-Based-Machine-Learning-Pipeline/blob/92788d7b61580828c54c3aa6d33c65e027081856/screenshots/Architecture.png) **Pipeline 流程:** ``` Data Sources (Customers, Accounts, Cards, Merchants, Transactions) │ ▼ Bronze Layer (raw Delta tables, lineage metadata) │ ▼ Silver Layer (data quality checks, rejected-record isolation) │ ├──────────────────────────┐ ▼ ▼ Rule-Based Fraud Engine ML-Based Fraud Predictor (10 deterministic rules) (Random Forest, trained offline) │ │ └────────────┬─────────────┘ ▼ Hybrid Fraud Scoring (60% rule score + 40% ML probability) │ ▼ Fraud Response Engine (alert creation, simulated block/freeze, investigation case) │ ▼ Email Notification (sent only to verified customers, preventing bounce-backs) ``` **设计原则:** - **设计上支持幂等性** — 使用确定性 ID 和“存在则跳过”逻辑,重新处理相同数据绝不会创建重复的警报或重复的电子邮件。 - **规则与 ML 互补而非竞争** — 规则引擎为已知模式提供可解释、可审计的检测;ML 模型则能捕捉规则难以描述的更细微的行为模式。 - **训练与推理解耦** — 模型仅在离线状态下训练一次;每次运行 Pipeline 时,批量预测会一致地重新计算特征,从而避免训练和推理时的偏差。 ## 使用的技术 | 工具 | 类别 | |---|---| | Microsoft Fabric | 平台 | | PySpark | 数据工程 | | Delta Lake | 数据存储 | | Data Factory Pipelines | 任务编排 | | Python | 编程语言 | | SQL | 编程语言 | | scikit-learn | 机器学习 | | MLflow | 机器学习实验跟踪 | | SHAP | 模型可解释性 | | Pandas | 数据处理 | | Power BI | 商业智能 | | Gmail SMTP | 通知系统 | ## 数据集 所有数据均为 **合成生成**(未使用真实的银行数据),通过 `data_generation/generate_synthetic_data.py` 生成: | 实体 | 数量 | 备注 | |---|---|---| | 客户 | 1,000 | 加权风险类别(70% 低风险 / 25% 中等风险 / 5% 高风险) | | 商户 | 500 | 分布在 10 个类别、15 个印度城市中 | | 账户 | 5,000 | 每个客户有多个账户,对数正态余额分布 | | 银行卡 | 5,000 | 关联到真实的客户/账户对 | | 交易 | ~100,000 | 对数正态金额分布,约 0.2% 故意设置的脏数据,以及嵌入的欺诈模式集群(高频爆发、城市跳跃、余额耗尽、异常时段、失败后成功) | 欺诈模式被注入为 **结构上有效的交易**,表现出真实的可疑行为(不仅仅是随机的巨额数字),因此检测规则和 ML 模型都有真实的信号可供学习。少量精心设计的测试场景(具有已知严重欺诈交易集合的特定客户)用于手动测试 Pipeline 和验证模型的定性表现。 ## 安装说明 ### 前置条件 - 一个 Microsoft Entra ID(工作/学校)账户,或用于创建该账户的 Azure 账户 - 一个启用了双重验证(2-Step Verification)的 Gmail 账户(用于基于应用专用密码的邮件发送) ### 1. 激活 Microsoft Fabric 试用容量 1. 登录 `https://app.fabric.microsoft.com` 2. 点击个人资料图标 → **Free trial** → 选择一个区域 → **Activate** ### 2. 创建工作区和 Lakehouse 1. **Workspaces → New workspace** → 将其分配给您的试用容量 2. **+ New item → Lakehouse** → 将其命名为 `RawData` ### 3. 生成并加载初始数据集 1. 创建一个 Notebook,附加 `RawData`,运行 `data_generation/generate_synthetic_data.py`(将 CSV 写入 `Files/data/`) 2. 运行一次 `notebooks/01_data_engineering/NB_01_Bronze_Ingestion.py` **一次** — 这是唯一的全面重新加载步骤;在此之后永远不会再运行它 ### 4. 构建 Pipeline 依次运行以下设置 Notebook: `NB_07_Setup_Landing_Table` → `NB_12_Setup_Verified_Customers`(首先用您自己的测试邮箱进行编辑) 然后创建一个 Fabric Data Pipeline,按顺序链接这些 Notebook: ``` NB_10_Incremental_Bronze_Load → NB_02_Silver_DataQuality → NB_03_Fraud_Detection → NB_04_Fraud_Scoring → NB_17_Batch_Fraud_Prediction → NB_05_Fraud_Response → NB_06_Customer_Notification → NB_11_Send_Real_Email ``` ![Pipeline 图表](https://github.com/Ktrimalrao/Bank-Transaction-Fraud-Detection-System-Hybrid-Rule-Based-Machine-Learning-Pipeline/blob/92788d7b61580828c54c3aa6d33c65e027081856/screenshots/Pipeline.png) ### 5. 配置电子邮件发送 在 `NB_11_Send_Real_Email` 中,设置 `SENDER_EMAIL` 并生成一个 Gmail **应用专用密码** (`https://myaccount.google.com/apppasswords`) — 详情请参阅 [安全配置](#security-configuration)。 ### 6. 训练 ML 模型(一次性,离线) 按顺序运行:`NB_14_Feature_Engineering` → `NB_15_Model_Training` → `NB_16_Model_Evaluation_Explainability` ### 7. 进行端到端测试 使用 `NB_08_Insert_Master_Data` 和 `NB_09_Insert_Test_Transaction` 插入一个测试客户和欺诈交易,然后运行 Pipeline 并确认是否生成了警报和电子邮件。 ## 实现细节 | Notebook | 用途 | |---|---| | `NB_01_Bronze_Ingestion` | 将所有 5 个源 CSV 一次性全部加载到 Bronze Delta 表中 | | `NB_02_Silver_DataQuality` | 空值检查、去重、引用完整性、标准化;隔离被拒绝的记录 | | `NB_03_Fraud_Detection` | 应用 10 条基于规则的欺诈检查作为布尔标志 | | `NB_04_Fraud_Scoring` | 将规则标志转换为加权的 `fraud_score` 和严重性分类 | | `NB_05_Fraud_Response` | 幂等警报创建;模拟的冻结银行卡 / 锁定账户 / 立案调查 | | `NB_06_Customer_Notification` | 通过 Delta MERGE(upsert,而非覆盖)构建 HTML 电子邮件内容 | | `NB_07_Setup_Landing_Table` | 一次性创建交易“邮箱”表 | | `NB_08_Insert_Master_Data` | 手动插入新的客户/账户/银行卡/商户 | | `NB_09_Insert_Test_Transaction` | 手动将测试交易插入到落地表中 | | `NB_10_Incremental_Bronze_Load` | 仅将新的落地交易追加到 Bronze 层 | | `NB_11_Send_Real_Email` | 通过 Gmail SMTP 发送真实电子邮件,仅限经过验证的收件人 | | `NB_12_Setup_Verified_Customers` | 允许接收真实电子邮件的客户白名单 | | `NB_14_Feature_Engineering` | 导出真实标签并构建机器学习特征表 | | `NB_15_Model_Training` | 训练 Logistic Regression 和 Random Forest 模型,并通过 MLflow 跟踪 | | `NB_16_Model_Evaluation_Explainability` | ROC/PR 曲线、混淆矩阵、SHAP 可解释性 | | `NB_17_Batch_Fraud_Prediction` | 每次运行 Pipeline 时应用已训练的模型;计算混合评分 | ## 数据流 1. 新的主数据(客户/账户/银行卡/商户)或交易将被手动或通过自动化摄取插入 2. 数据落入 **Bronze** 层(原始、不可变、带有血缘标记) 3. **Silver** 层应用数据质量规则;坏记录会被隔离,而不是被静默丢弃 4. **规则引擎** 根据 10 种欺诈模式评估每笔交易 5. **ML 模型** 利用行为特征独立预测欺诈概率 6. 两个信号被混合为一个 **综合评分和严重性等级** 7. 中等及以上严重性会触发 **FraudAlert**、模拟的响应操作以及 **Notification** 记录 8. **只有当** 客户在已验证的白名单中时才会发送电子邮件 — 从而防止因合成数据导致的邮件退回 9. 该 Pipeline 是 **幂等的** — 对已处理过的数据重新运行不会创建任何新内容 ## 安全配置 - **不会将任何凭据提交到此存储库中。** 必须在本地/您自己的 Fabric 工作区中设置 `NB_11_Send_Real_Email` 中的 `SENDER_EMAIL` 和 `APP_PASSWORD` — 在运行前替换占位符值。 - 电子邮件使用 Gmail **应用专用密码**,而不是您的真实账户密码 — 请在 `https://myaccount.google.com/apppasswords` 生成(需要启用双重验证)。 - 真实电子邮件的发送仅限于手动维护的 `VerifiedCustomers` 白名单 (`NB_12`),防止意外将邮件发送到合成/无效地址。 - `NB_11` 中的 `ENABLE_EMAILS` 标志提供了一个全局“切断”开关,可在测试期间禁用所有电子邮件发送,而不会影响任何其他 Pipeline 阶段。 如果克隆此存储库,请确保不要提交真实的凭据 — 为包含密钥的任何本地配置文件添加 `.gitignore` 条目。 ## 结果 *(在运行第 15-16 章后,请填入您的实际指标)* | 指标 | Logistic Regression | Random Forest | |---|---|---| | ROC-AUC | 0.9995 | 0.9999 | | PR-AUC | 0.8759 | _待定_ | | Precision(欺诈类别) | 0.28 | 0.9729 | | Recall(欺诈类别) | 0.99 | 0.95 | - 欺诈检测规则引擎在 10 个规则类别中评估了约 100,000 笔合成交易 - 混合评分识别出了基于规则和基于 ML 的严重性不一致的情况,从而为审查提取出了真正模棱两可的交易 - SHAP 分析证实,模型顶部的预测特征与领域直觉相符(金额与余额的比率、规则标志、交易速度) ## 未来增强功能 - 构建 **Gold 层** 和 **Power BI 仪表板**(执行视图、欺诈监控、客户风险) — 已计划但在当前版本中尚未实现 - 一旦有真正的流数据源,即可通过 Fabric Eventstream 进行实时处理 - 将 ML 模型部署为实时评分 endpoint(Azure ML 托管的 endpoint),而不是批量评分 - 带有漂移检测的自动化模型重新训练 Pipeline - 用于生产级数据治理的行级安全性和 PII 掩码 - 通过 Fabric Git 集成和部署 Pipeline 实现 Notebook 和 Pipeline 的 CI/CD ## 许可证 该项目基于 [MIT 许可证](LICENSE) 授权。 ![缩略图](https://github.com/Ktrimalrao/Bank-Transaction-Fraud-Detection-System-Hybrid-Rule-Based-Machine-Learning-Pipeline/blob/92788d7b61580828c54c3aa6d33c65e027081856/screenshots/Thumbnail.png)
标签:Apex, Delta Lake, Microsoft Fabric, PySpark, 多线程, 机器学习, 欺诈检测, 逆向工具, 随机森林