AbhinavKhareTech/BGI-Fraud-Detection

GitHub: AbhinavKhareTech/BGI-Fraud-Detection

基于混合架构的实时欺诈检测系统,利用图模型与梯度提升结合识别协调欺诈模式。

Stars: 0 | Forks: 0

# BGI — 行为图智能 **一种用于实时欺诈检测的混合生产架构。** BGI 不是一个单体模型。它是一种生产架构,结合了 图原生推理与梯度提升表格特征以及堆叠集成。XGBoost 处理冷启动和稀疏情况。基于 DGL 的图注意力模型检测协调的欺诈模式——骡子环、设备合谋、商户端洗钱。堆叠层通过上下文感知权重融合两者,并生成可审计的解释。 这确实来自 `scripts/smoke_test.py` 的输出,而不是虚构的插图。这就是演示的核心。 ## 为何采用混合方案(而非纯图模型) 纯 GNN 在论文中看起来很好。在生产中它们存在四种失效模式: 1. **冷启动。** 新用户和新商户没有邻居。图模型预测会变成噪声。仅凭表格特征,XGBoost 能很好地处理这种情况。 2. **稀疏情况下的延迟。** 子图为空的交易不应等待图数据库。XGBoost 约 5ms 即可响应。 3. **可解释性。** 监管要求 SHAP 值和特征重要性,而不只是子图注意力图。我们两者都提供。 4. **降级容错。** 如果图基础设施出现故障,XGBoost 能保持欺诈引擎继续运行。 混合系统正是生产欺诈检测的实际形态——Feedzai、Sardine、Stripe Radar 都采用集成方案。BGI 让这种架构成为一等公民。 ## 架构 ``` ┌────────────────────┐ Transaction ──────┤ Feature Pipeline │ └──────────┬─────────┘ │ ┌───────────┴────────────┐ │ │ ▼ ▼ ┌─────────────────┐ ┌─────────────────┐ │ XGBoost │ │ DGL GraphSAGE │ │ tabular, 5 ms │ │ subgraph, 30ms │ └────────┬────────┘ └────────┬────────┘ │ │ └───────────┬────────────┘ │ ┌──────────▼─────────┐ │ Stacking Ensemble │ │ (logistic meta) │ └──────────┬─────────┘ │ ▼ Score + per-arm contributions + subgraph explanation ``` **所有内容均采用 Apache 2.0 许可,可部署在客户 VPC 中。** PyTorch + DGL + XGBoost + scikit-learn。这是标准的可雇佣技术栈,无供应商锁定。 ## 优雅降级:每个依赖项均为可选 为了保持 CI 快速并降低安装摩擦,BGI 使用依赖注入的后端: | 组件 | 主要(生产) | 降级(CI / 无 GPU) | |----------|----------------------------------|---------------------------------------------| | 表格臂 | XGBoost | sklearn `HistGradientBoosting` | | 图臂 | DGL GraphSAGE(异构图) | NetworkX 结构特征 + sklearn | | 集成 | sklearn `LogisticRegression` |(同上) | 相同的 `HybridScorer` 接口适用于两者。烟雾测试运行在降级路径上,因此仅需 numpy/pandas/sklearn。若要在 YC 演示中使用,安装主依赖栈:`pip install -e ".[dev"`,代码会自动识别。 ### 路线图:可插拔图后端(v2) BGI 在生产规模图推理中使用 DGL(AWS SageMaker 集成、成熟的分布式训练、无 Kumo 依赖)。计划引入 **PyTorch Geometric (PyG) 作为可替换后端**,以实现最大框架中立性与研究敏捷性。 理由如下: - **DGL 在生产中胜出**——获得 AWS 支持、与 SageMaker 原生集成、多 GPU 扩展能力强,已在 Amazon、DoorDash、BlackRock 等企业规模验证。 - **PyG 在研究中胜出**——最大的 GNN 研究社区,最快采用新架构(时序 GAT、异构图注意力变体),更易原型设计。 - **使其可插拔**让我们能在 PyG 中迭代架构,再部署到生产环境的 DGL,同时保持相同的 `GraphArm` 接口。 当前的 `GraphArm` 已通过 `fit()` / `predict_proba()` / `compute_features_for()` 抽象后端;替换 DGL 为 PyG 仅需修改 `src/bgi/models/graph_model.py`,无需更改代码库其他部分。 ## 数据集 本演示基于 [Synthetic Merchant Fraud Dataset (Graph Structure)](https://www.kaggle.com/datasets/akashraj121/synthetic-merchant-fraud-dataset-graph-structure) (来自 Kaggle)。数据加载器(`src/bgi/data/loader.py`)自动识别图导向的商户欺诈数据集中的通用列名,包括类似 PaySim 的 `nameOrig`/`nameDest`/`isFraud` 以及标准化的 `customer_id`/`merchant_id`/`is_fraud`。 **如果你无法访问 Kaggle**,仓库自带一个合成数据生成器,它生成相同模式并注入欺诈环与骡子网络——因此演示可开箱即用运行: ``` python scripts/generate_synthetic_data.py --out data/raw/transactions.csv ``` 该生成器故意构建五种不同的欺诈原型: | 欺诈原型 | XGBoost 能捕获? | 图臂能捕获? | |----------------------|------------------------|---------------------| | 个人欺诈 | 是(金额异常) | 是 | | 速度爆发 | **是** | 有时 | | 骡子环 | 否(单行看正常) | **是** | | 设备合谋环 | 部分 | **是** | | 商户端洗钱 | 否 | **是** | 这正是演示可信的原因:你可以指向图臂捕获的具体交易,而这些是纯表格模型无法发现的。 详见 [docs/DATA.md](docs/DATA.md) 了解完整的列处理说明。 ## 快速开始 ``` # 安装(仅回退模式,尚未支持 XGBoost/DGL) pip install -e . # 验证一切是否正常工作(尚未有数据或模型 — 仅内存中合成并训练) python scripts/smoke_test.py # 持久化流水线并生成演示用例 python scripts/generate_synthetic_data.py # synthetic, no Kaggle needed # 或将 Kaggle CSV 放入 data/raw/transactions.csv python scripts/train.py # trains + saves bundle python scripts/evaluate.py # prints disagreement cases + saves JSON # 对于完整的 YC 技术栈,添加主要的后端 pip install xgboost dgl torch fastapi uvicorn jinja2 # 运行实时演示服务器 python scripts/run_demo.py # 打开 http://localhost:8000 ``` 演示页面展示实时交易流,采用终端/交易台风格。对于每笔交易,你可以并排查看三个分数——当两侧臂不一致时,会显示触发该结果的子图证据。 ## 烟雾测试结果(使用 sklearn 降级后端) 运行 `python scripts/smoke_test.py` 端到端生成的数据,结果大致如下(运行间方差约 0.01): ``` [4/7] Model arms tabular AUC-ROC=0.986 AUC-PR=0.958 graph AUC-ROC=0.747 AUC-PR=0.649 ensemble AUC-ROC=0.986 AUC-PR=0.960 ``` 整体 AUC 提升较小,因为表格臂已能干净地捕获速度爆发和金额异常。关键在于 **独特捕获情况**: ``` [BONUS] Unique-catch breakdown at threshold 0.5 total fraud in test: 169 caught by both arms: 70 caught ONLY by graph arm: 10 <- YC demo gold caught ONLY by tabular arm: ~76 caught by NEITHER arm: ~13 ``` **大约十个被纯表格 XGBoost 批准的欺诈案例被图臂捕获——包括设备共享环和洗钱商户。** 这些正是演示 UI 高亮展示的案例。表格单独捕获约 76 个速度爆发,而图臂漏检。这正是混合架构存在的原因:两者的盲区是互补的。 安装 XGBoost + DGL 后,数值还会进一步提升。详见 `scripts/smoke_test.py` 获取精确复现——大约运行 30 秒。 ## 一个示例解释(自动生成) 以下段落直接来自某个随机环案例的解释器: 这正是调查人员打开被 BGI 拦截的交易时所看到的内容——不是特征向量,而是一段文字。 ## 仓库结构 ``` src/bgi/ data/ loader + schema auto-detection, graph builder, synthetic generator features/ streaming-safe tabular features (velocity, entropy, ratios) models/ tabular_model.py, graph_model.py, ensemble.py inference/ hybrid_scorer.py (parallel-shaped inference + timing) explain/ plain-English explainer scripts/ train, evaluate, run_demo, generate_synthetic_data, smoke_test demo/ FastAPI + SSE live scoring UI (the YC demo itself) configs/ YAML configs tests/ pytest suite ``` ## 运行测试 有两种方式验证流水线: ``` # 选项 A:纯 Python(无需 pytest) python scripts/smoke_test.py # 22 checks, ~30 seconds # 选项 B:pytest(标准开发流程) pip install pytest pytest tests/ -v ``` ## YC 推介,一句话总结 BGI 是一种混合生产架构。梯度提升的表格模型处理冷启动和稀疏情况。我们基于 DGL 的图模型检测设备共享环、骡子网络、商户端洗钱等按行特征无法识别的协调欺诈模式。逻辑堆叠器以可审计的方式融合两侧臂的贡献。构建于 PyTorch,可部署在客户 VPC,支持在 AWS 或本地环境自托管。我们在构建自托管栈的同时,已对 7 个试点客户验证了该架构。本仓库即该栈,烟雾测试证明它能捕获纯表格模型会放过的环欺诈。 ## 许可证 Apache 2.0。参见 [LICENSE](LICENSE)。
标签:DGL, Feedzai, Sardine, SEO, SHAP, Stripe Radar, XGBoost, 上下文加权, 冷启动, 凭据扫描, 协同欺诈, 反欺诈系统, 可解释性, 商户洗钱, 图注意力网络, 图神经网络, 堆叠集成, 实时检测, 审计解释, 案例研究, 欺诈检测, 深度图学习, 混合架构, 特征工程, 生产系统, 设备共谋, 账户接管, 骡子网络