# SHAKTISAFE
**基于图神经网络的跨渠道骡子账户检测系统**
这是一个生产级、实时欺诈情报平台,构建覆盖所有支付渠道的统一实体图谱,并应用 GraphSAGE 神经网络在资金拨付前识别并阻断骡子账户团伙。
[](https://python.org)
[](https://pytorch-geometric.readthedocs.io)
[](https://fastapi.tiangolo.com)
[](https://spring.io)
[](https://nextjs.org)
[](https://neo4j.com)
[](https://kafka.apache.org)
[](https://docker.com)
[](LICENSE)
42,152 建模交易数 |
12 欺诈场景 |
9 支付渠道 |
0.98+ ROC-AUC (合成数据) |
INR 6.79 Cr 标记金额 |
<100ms 检测延迟 |
*PSBs Hackathon 2026 · 问题陈述 2 · 创意提交*
*VIT Bhopal · 计算机学院 · Team WebsiteCrash*
## Team WebsiteCrash
| Role |
Name |
Institution |
GitHub |
| Team Leader |
Vidhi Luniya |
VIT Bhopal · School of Computing |
— |
| Member |
Akshat Singh Tomar |
VIT Bhopal · School of Computing |
 |
| Member |
Anushka Pareek |
VIT Bhopal · School of Computing |
— |
| | |
|---|---|
| **竞赛** | PSBs Hackathon 2026 |
| **问题陈述** | 陈述 2 — 跨渠道骡子账户检测 |
| **轮次** | 创意提交 |
| **代码库** | [github.com/akshat440/ShaktiSafe](https://github.com/akshat440/ShaktiSafe) |
## 目录
1. [问题陈述](#1-problem-statement)
2. [解决方案](#2-proposed-solution)
3. [系统架构](#3-system-architecture)
4. [GNN 模型 — GraphSAGE](#4-gnn-model--graphsage)
5. [检测引擎](#5-detection-engine)
6. [12 种欺诈场景](#6-12-embedded-fraud-scenarios)
7. [监管合规性](#7-regulatory--compliance-coverage)
8. [隐私架构](#8-privacy-safe-inter-bank-sharing)
9. [技术栈](#9-technology-stack)
10. [快速开始](#10-quick-start)
11. [API 参考](#11-api-reference)
12. [项目结构](#12-project-structure)
13. [数据集详情](#13-dataset-facts)
## 1. 问题陈述
印度在 2023-24 财年因银行欺诈损失了 **INR 11,333 Crore**(印度储备银行 RBI 数据)。约 87% 的金融欺诈涉及骡子网络——即被招募来接收并快速转移非法资金的合法账户持有人,资金跨越多家银行和支付渠道,旨在故意逃避检测。
### 跨渠道盲区
当前的 AML(反洗钱)系统在坚硬的孤岛中运行。手机银行欺诈团队无法看到 ATM 模式。NEFT 合规官看不到 UPI 的交易速度。欺诈者构建的交易个别来看能通过所有基于规则的检查,但聚合后的跨渠道模式却显而易见。
```
MOBILE APP LINKED WALLET ATM WITHDRAW DISPERSE
[ Receive ] --> [ Move ] --> [ Cash Out ] --> [ Gone ]
Passes all Passes all Passes all Too late
rule checks rule checks rule checks
```
### 威胁规模
| 指标 | 数值 | 来源 |
|--------|-------|--------|
| 2023-24 财年银行欺诈损失 | INR 11,333 Crore | 印度储备银行年度报告 |
| 涉及骡子网络的金融欺诈 | ~87% | 行业估算 |
| 骡子团伙平均清算和分散时间 | < 6 分钟 | 记录在案的案件 |
| RBI 结构化阈值(主要目标) | INR 50,000 | RBI 通告 |
### 解决方案必须涵盖的内容
| 需求 | 优先级 |
|---|:---:|
| 跨所有 9 个渠道的统一实体图谱 | 关键 |
| 拨付前的实时团伙检测 | 关键 |
| 结构化和碎片化检测 | 高 |
| 跨司法管辖区风险评分 (FATF) | 高 |
| 基于行为的制裁(超越 KYC 名单) | 高 |
| 隐私安全的银行间共享 | 高 |
| 监管就绪的带置信度评分 STR 报告 | 关键 |
## 2. 解决方案
ShaktiSafe 将所有交易流摄入到单个 Neo4j 实体图谱中,并在整个连接网络上同时运行 GraphSAGE 推理——而不是按渠道逐一进行。跨渠道关联是设计固有的,而非事后聚合。
### 四大支柱
| # | 支柱 | 描述 |
|:---:|---|---|
| 01 | **统一实体图谱** | 每个账户、设备、IP 地址、银行和司法管辖区都是一个节点。每笔交易都是一条有向边。移动应用团队和 SWIFT 合规官实时分析同一个图谱。 |
| 02 | **GraphSAGE 神经网络** | 3 层归纳式 GNN,在 42,152 笔合成交易上训练,嵌入了 12 种真实欺诈模式。通过聚合交易邻域特征,无需重新训练即可对新账户进行评分。输出每个账户的骡子账户概率。 |
| 03 | **并行检测引擎** | 六个确定性检测器与 GNN 并行运行:骡子团伙(Louvain 社区)、结构化/拆分交易、跨司法管辖区(FATF 风险图)、设备指纹、嵌套深度和行为制裁筛查器。 |
| 04 | **合规与共享层** | 针对每种检测到的模式自动生成 FIU-IND STR 报告。通过 SHA-256 哈希 ID 实现隐私安全的银行间共享。所有输出均符合 PMLA、RBI 和 FATF 标准,包含 GNN 置信度分数和完整证据链。 |
### 需求覆盖矩阵
| 需求 | ShaktiSafe 实现 |
|---|---|
| 统一实体图谱 | Neo4j:所有 9 个渠道 — 一个图谱 |
| 实时团伙检测 | Louvain 社区 + GNN 推理 |
| 在分散前阻断团伙 | API 在拨付窗口前冻结 |
| 结构化 / 碎片化 | 阈值带交易检测器 |
| 司法管辖区风险评分 | 20 国 FATF 风险矩阵 |
| 基于行为的制裁 | 设备 + 路由指纹匹配 |
| 隐私安全共享 | SHA-256 哈希 ID + 金额分桶 |
| 监管就绪报告 | 带 evidence chain + confidence score 的自动 STR |
## 3. 系统架构
### 端到端检测流水线
```
+------------------------------------------------------------------------------+
| DATA INGESTION (9 Payment Rails) |
| |
| Mobile App Web Banking ATM Network UPI / BHIM NEFT / IMPS |
| RTGS SWIFT NACH |
+--------------------------------------+---------------------------------------+
|
v
+------------------------------------------------------------------------------+
| EVENT STREAMING -- Apache Kafka 3.6 |
| |
| Account-partitioned topics Ordered per-account delivery |
| Replay-capable forensic log Fault-tolerant, zero data loss |
| |
| Topics: transactions.raw / fraud.alerts / str.reports / dlq |
+------------------+---------------------------+------------------------------+
| |
+----------v----------+ +----------v----------+
| GRAPH ENGINE | | SPRING BOOT |
| Neo4j 5.x | | API GATEWAY |
| | | |
| 42,152 txn edges | | REST ingestion |
| 3,073 acct nodes | | Kafka producer |
| Cypher ring query | | ML Engine proxy |
+---------------------+ +----------+----------+
| |
+--------------+------------+
|
v
+------------------------------------------------------------------------------+
| ML ENGINE -- FastAPI + GraphSAGE |
| |
| Input Layer 32 node features per account |
| SAGEConv Layer 1 64 hidden dims . BatchNorm . ReLU |
| SAGEConv Layer 2 128 dims . BN . ReLU . Residual |
| SAGEConv Layer 3 64 dims . BN . ReLU . Residual |
| Dropout (0.3) -> Classifier Head -> Mule probability [0.0, 1.0] |
| |
| Target inference latency: < 100ms |
+--------+---------+----------+-----------+-----------+----------------------+
| | | | |
v v v v v
+--------+ +--------+ +-------+ +--------+ +--------+
| BLOCK | | REVIEW | | FILE | | INTER | | GRAPH |
| ACCOUNT| | FLAG | | STR | | BANK | | ALERT |
+--------+ +--------+ +-------+ +--------+ +--------+
| | | | |
+----+----+----------+-----------+ +----+
| |
v v
+------------------------------------------------------------------------------+
| NEXT.JS 14 REAL-TIME DASHBOARD |
| |
| Live WebSocket alert ticker D3 force-directed mule ring graph |
| Account risk score table STR report viewer |
| Cross-channel stats overview Transaction explorer |
+------------------------------------------------------------------------------+
```
### Neo4j 属性图谱 Schema
```
// Node types
(:Account {id, kyc_status, account_age, risk_score, channel_count})
(:Device {device_id, fingerprint_hash, platform})
(:Bank {bank_id, name, country})
(:Jurisdiction {code, fatf_risk_score, status})
// Relationships
(Account) -[:TRANSACTS {amount, channel, timestamp, txn_id}]-> (Account)
(Account) -[:SHARES_DEVICE]-> (Device)
(Device) -[:LOCATED_IN]-> (Jurisdiction)
(Account) -[:MANAGED_BY]-> (Bank) -[:OPERATES_IN]-> (Jurisdiction)
```
### 架构设计原理
| 组件 | 原理 |
|---|---|
| **Neo4j** | 属性图谱原生地对账户-设备-司法管辖区拓扑进行建模。Cypher 环查询比等效的关系型 SQL 多表连接更具表现力,且 APOC 存储过程支持库内 Louvain 社区检测。 |
| **GraphSAGE** | 与直推式 GCN 不同,GraphSAGE 是归纳式的——它可以在运行时泛化到未见过的账户。今天注册的新骡子账户无需等待完整的模型重新训练周期即可被评分。 |
| **Apache Kafka** | 将摄入与评分解耦,支持独立的服务扩展,并允许对任何历史交易窗口进行取证重放,而无需触及生产数据库。 |
| **Spring Boot** | 使用 Java 21 虚拟线程干净地处理高吞吐量的 REST 摄入和 Kafka 扇出,并通过非阻塞 WebClient 代理到 Python ML 引擎。 |
## 4. GNN 模型 — GraphSAGE
### 节点特征工程 — 每个账户 32 个特征
**账户级特征 (F-0 到 F-9)**
| 特征 | 名称 | 信号描述 |
|---------|------|--------------------|
| F-0 | Account Age (账户账龄) | 归一化 — 账龄低 = 风险高 |
| F-1 | KYC Status (KYC 状态) | 二元:验证失败标志 |
| F-2 | Txn Velocity (交易速度) | log(计数) 归一化 [0,1] |
| F-3 | Avg Amount (平均金额) | log(平均值) 归一化 |
| F-4 | Channel Diversity (渠道多样性) | 唯一渠道数 / 总共 9 个 |
| F-5 | Receive Ratio (收款比率) | 入站 / 总额 — 过渡信号 |
| F-6 | New Account Flag (新账户标志) | 账龄 < 30 天 — 强骡子指标 |
| F-7 | Round Amounts (整数金额) | 结构化 + 制裁信号 |
| F-8 | Velocity Proxy (速度代理) | 交易计数 vs 同行中位数 |
| F-9 | KYC Risk (KYC 风险) | 反转的 KYC 质量分数 |
**交易模式特征 (F-10 到 F-19)**
| 特征 | 名称 | 信号描述 |
|---------|------|--------------------|
| F-10 | Cross-Jurisdiction (跨司法管辖区) | 跨境交易比例 |
| F-11 | High-Risk Juris. (高风险司法管辖区) | FATF 灰名单目的地比例 |
| F-12 | Structuring Signal (结构化信号) | INR 45K–49.9K 区间内的交易 |
| F-13 | ATM Ratio (ATM 比率) | 现金取款频率 |
| F-14 | SWIFT Ratio (SWIFT 比率) | 国际电汇频率 |
| F-15 | App-to-ATM (App 到 ATM) | 手机 App 然后 ATM 序列标志 |
| F-16 | Shared Device (共享设备) | 设备指纹团伙信号 |
| F-17 | Amt Variability (金额波动性) | 标准差 / 平均值比率 |
| F-18 | Send/Recv Ratio (发送/接收比率) | 过渡账户指标 |
| F-19 | Tor IP Flag (Tor IP 标志) | 已知的匿名化 IP 前缀 |
**GraphSAGE 邻域特征 (F-20 到 F-31)**
| 特征 | 名称 | 信号描述 |
|---------|------|--------------------|
| F-20/21 | Neighbour Age/KYC (邻居账龄/KYC) | 连接节点的平均账龄和 KYC |
| F-22/23 | Degree / Out-Degree (度数 / 出度) | 归一化节点度数指标 |
| F-24 | Neighbour Activity (邻居活动) | 邻居的平均交易计数 |
| F-25/26 | Edge Amounts (边金额) | 平均入 / 出边金额 |
| F-27/28 | Fan-Out / Fan-In (扇出 / 扇入) | 枢纽和汇聚检测指标 |
| F-29 | Chain Node (链节点) | 单入 + 单出 = 分层信号 |
| F-30/31 | In / Out Degree (入 / 出度) | 最终结构度数特征 |
### 网络架构
```
Input Layer 32 features per node
|
v
SAGEConv Layer 1 64 hidden dims . BatchNorm . ReLU
|
v
SAGEConv Layer 2 128 dims . BatchNorm . ReLU . Residual connection
|
v
SAGEConv Layer 3 64 dims . BatchNorm . ReLU . Residual connection
|
v
Dropout (0.3) Regularisation
|
v
Classifier Head Mule probability output [0.0, 1.0]
```
### 训练配置
| 参数 | 值 |
|-----------|-------|
| 数据集 | 48,396 笔交易 · 1,875 个账户 · 75 个骡子账户 (4%) |
| 类别不平衡处理 | Focal Loss (alpha=0.75, gamma=2.0) |
| 优化器 | Adam lr=0.005 · 余弦退火 · 梯度裁剪 1.0 |
| 数据划分 | 70% 训练 · 15% 验证 · 15% 测试 · 分层采样 |
| 早停 | 验证集 AUC 上 patience = 30 个 epoch |
| 特征提取 | GraphSAGE 1 跳邻域聚合 |
| 模型总参数量 | 156,326 |
### 模型性能 — 合成数据集
| 指标 | 分数 | 备注 |
|--------|-------|-------|
| ROC-AUC | **0.98+** | 对嵌入模式的高区分度 |
| F1 Score | **~0.95** | Focal Loss 对不平衡类别的处理 |
| 假阳性率 | **~2–5%** | 可通过检测阈值调整 |
| 收敛性 | **稳定** | 使用 Focal Loss发散 |
| 全图推理 | **估计 < 80ms** | 生产目标 < 100ms |
## 5. 检测引擎
六个确定性检测器与 GNN 推理并行运行。每个检测器均可独立调整,并发出各自的警报类型和置信度分数。
### 检测器摘要
| 检测器 | 算法 | 警报类型 | 默认操作 |
|---|---|---|---|
| 骡子团伙 | Louvain 社区检测 | 团伙拓扑 + 速度 | BLOCK + FILE STR |
| 结构化 | 阈值带分析 | INR 45K–49.9K 聚类 | FILE CTR |
| 司法管辖区风险 | FATF 20 国矩阵 | 跨境跳转评分 | FLAG / BLOCK |
| 设备指纹 | SHA-256 哈希匹配 | 跨账户共享设备 | REVIEW |
| 嵌套深度 | 多跳空壳链 | 分层深度 > 3 跳 | FLAG |
| 行为制裁 | 模式 vs 行为画像 | 设备 + 路由匹配 | ESCALATE |
### 骡子团伙检测 — Louvain 社区算法
```
Step 1 Load 90-day transaction window
Step 2 Build weighted directed graph from transactions
Step 3 Run Louvain community detection algorithm
Step 4 For each detected community, compute ring score:
- Internal velocity (how fast money moves within cluster)
- Channel diversity (App -> Wallet -> ATM pattern)
- Temporal compression (all within short window)
- External entry and exit points
Community Score >= 0.65 --> BLOCK + FILE STR
Community Score < 0.65 --> MONITOR
```
### 结构化检测 — 阈值带分析
```
Step 1 Scan all transactions in rolling 24-hour window
Step 2 Filter: amount in INR 45,000 to 49,999 band
Step 3 Group by receiver account and time window
Step 4 Same destination >= 3 transactions?
AND multiple coordinated senders?
--> STRUCTURING ALERT — FILE CTR
```
### 司法管辖区风险评分 — FATF 矩阵
```
Score = sum(hop_risks) + corridor_penalty
Score > 60 --> HIGH RISK FLAG
Score > 80 --> BLOCK
```
| 司法管辖区 | 风险分数 | 状态 |
|---|:---:|---|
| India (IN) | 8–10 | 国内 — 基线 |
| Singapore (SG) | 42 | FATF 成员 |
| UAE (AE) | 65 | FATF 灰名单 |
| Panama (PA) | 78 | 灰名单 |
| Macau (MO) | 72 | 监控中 |
### 行为制裁筛查
| 信号 | 示例 | 权重 |
|---|---|:---:|
| KYC 状态 | PASS — 不在任何制裁名单上 | 基线 |
| Device ID | MATCH — SHA-256 哈希与先前标记的实体匹配 | 关键 |
| 转账模式 | 整数金额:INR 100K, 500K, 1M | 高 |
| 取款速度 | 收款后 < 5 分钟 | 高 |
| 司法管辖区 | UAE — FATF 灰名单目的地 | 中 |
| 交易对手 | 无既定关系 | 中 |
`Behaviour Score >= 70` 阈值 → **升级至合规部 — 制裁匹配**
## 6. 12 种嵌入的欺诈场景
每个场景都作为精确的数学模式嵌入在 42,152 笔交易的合成数据集中。
| ID | 严重性 | 场景 | 描述 | 检测信号 |
|----|:---:|---|---|---|
| S01 | CRITICAL | **经典骡子团伙** | 6 个账户:App→UPI×3→ATM×2,6 分钟内 INR 3.8L,所有账户账龄 <25 天 | 团伙拓扑 + 速度 |
| S02 | HIGH | **协同拆分交易** | 18 笔交易 × INR 48,500–49,900 至新加坡,协同控制在 INR 50K 阈值以下 | 阈值带聚类 |
| S03 | CRITICAL | **跨境 SWIFT** | India→Singapore→UAE→Switzerland→India,4 跳链,AE 在 FATF 灰名单上 | 司法管辖区风险路径评分 |
| S04 | HIGH | **空壳嵌套 (6 跳)** | INR 50L 通过 6 个空壳,6 家银行,6 个城市 — 每跳抽取 10–15% | 多跳深度 + 抽取比例 |
| S05 | CRITICAL | **制裁规避** | 通过 KYC,不在任何名单上 — 设备指纹与标记实体匹配 | 行为指纹匹配 |
| S06 | HIGH | **循环欺诈** | 8 个账户,资金回流至源头 — 制造虚假贸易历史 | 循环流向检测 |
| S07 | CRITICAL | **大规模 ATM 提现** | 1 个来源 → 12 个 ATM 骡子同时进行,1 小时内 INR 9,500–9,999 | 扇出速度爆发 |
| S08 | HIGH | **贸易型洗钱** | 5 笔高开发票的幽灵 SWIFT 出口,以掩盖跨境价值转移 | 发票异常 + SWIFT 标志 |
| S09 | HIGH | **贷款堆叠** | 6 笔贷款,同一设备,4 家银行,2 小时内 — 典型的套现欺诈 | 共享设备 + 时机 |
| S10 | HIGH | **加密货币出金** | 5 个 P2P 加密货币交易所 → 归集账户 → SWIFT 退出至香港 | 归集 + SWIFT 退出 |
| S11 | HIGH | **工资挪用** | 40 笔经由 NACH 的工资重定向至 8 个 <15 天前开立的骡子账户 | NACH 异常 + 新账户 |
| S12 | HIGH | **暗网购卡** | 30 笔交易,单个 IP,6 个钱包,平均 INR 3,200 — 盗刷卡提现 | 单 IP 爆发 + 钱包模式 |
## 7. 监管与合规覆盖
ShaktiSafe 的每个组件都围绕印度监管 AML 框架设计——而非事后适配。
| 法规 | 需求 | ShaktiSafe 实现 | 状态 |
|---|---|---|:---:|
| PMLA 2002, Sec 12 | 记录 + 7 天内 STR | 针对每种检测到的模式自动生成带证据链的 STR | 已覆盖 |
| RBI KYC Master Dir. 2023 | KYC 验证,强化尽职调查 | KYC 状态 = GNN 模型中的节点特征 F-1 | 已覆盖 |
| FIU-IND STR Requirements | 带证据和理由的 STR | PDF:证据链 + 置信度分数 + 建议措施 | 已覆盖 |
| FATF Recommendation 16 | 电汇透明度 | 20 个司法管辖区 FATF 风险矩阵 + SWIFT 跳转跟踪 | 已覆盖 |
| FATF Rec. 1 — Risk-Based | 基于风险的 AML/CFT 方法 | GNN 概率分数 = 量化的风险输出 | 已覆盖 |
| IBA AML Guidelines 2024 | 银行间情报共享 | SHA-256 哈希 ID + 金额分桶共享 API | 已覆盖 |
| RBI Cybersecurity Framework | 设备级欺诈信号 | 设备指纹作为图中的专用实体节点 | 已覆盖 |
| GDPR / RBI Data Localisation | 共享报告中的账户 ID 隐私 | 账户 ID 在任何外部导出前进行哈希处理 — 无 PII | 已覆盖 |
| FEMA (跨境流动) | 监控对外汇款 | SWIFT 节点跟踪 + 司法管辖区跳转评分 | 已覆盖 |
| RBI AML Guidelines | 交易监控,速度检查 | 速度 = 节点特征 F-2;滚动 24 小时和 90 天窗口 | 已覆盖 |
### 自动生成的 FIU-IND STR 输出示例
```
Report Type SUSPICIOUS TRANSACTION REPORT
Classification CONFIDENTIAL — INTERNAL COMPLIANCE
Typology CLASSIC MULE RING
Risk Level CRITICAL
GNN Confidence 97.2% (GraphSAGE Ensemble)
Accounts Flagged 8 accounts — all < 25 days old
Amount at Risk INR 3,80,000
Txn Count 14 transactions — 6 minutes
Channels MOBILE APP -> UPI x3 -> ATM x2
Detection Engine ShaktiSafe v1.0 — Louvain + GraphSAGE
Regulatory Basis PMLA 2002 Section 12
RBI KYC Master Direction 2023
FIU-IND STR Format IV
FATF Recommendation 16
STR Filing REQUIRED . Deadline: 7 working days . Format: FIU-IND IV
```
## 8. 隐私安全的银行间共享
没有任何一家银行能看到完整的骡子团伙全貌。ShaktiSafe 广播匿名的行为指纹,以便银行可以在不交换原始客户数据的情况下关联跨机构模式。
```
BANK A SHA-256 SHARED BANK B ALERT
Detects ring --> + DP NOISE --> FINGERPRINT --> Pattern match --> CONFIRMED
flagged accts Anonymise Broadcast to against own Cross-bank
hash + noise correspondent data ring blocked
banks
```
### 共享内容 vs 受保护内容
| 共享 — 匿名行为指纹 | 受保护 — 永不传输 |
|---|---|
| SHA-256(account_id)[:16] — 不可逆 | 原始账户 ID 或客户姓名 |
| 交易计数桶(最近 10) | 实际交易金额(DP 噪声处理) |
| 平均金额桶(最近 INR 10,000) | 设备 ID 或 IP 地址(仅哈希) |
| 使用的渠道类型 (MOBILE_APP, ATM, SWIFT) | KYC 文件或个人标识符 |
| 司法管辖区列表 — 仅国家代码 | 分行、城市或地理细节 |
| 整数金额比率 — 结构化信号 | 交易时间戳(仅分桶) |
### Python 实现
```
anonymized_id = SHA256(account_id)[:16] # First 16 hex chars — not reversible
txn_count_bucket = len(txns) // 10 * 10 # Round to nearest 10
avg_amount_bucket = round(mean_amount, -4) # Round to nearest INR 10,000
channels_list = sorted(set(t.channel for t in txns))# Channel types only — no amounts
fingerprint_hash = SHA256(JSON(behaviour_vector)) # Deterministic match key — no PII
```
## 9. 技术栈
| 层级 | 技术 | 版本 | 用途 |
|---|---|:---:|---|
| GNN | PyTorch Geometric — GraphSAGE | Latest | 归纳式骡子概率评分 |
| Graph Database | Neo4j Community | 5.15 | 统一实体图谱,Cypher 环查询 |
| ML API | FastAPI + Uvicorn | 0.109 | 推理服务器,WebSocket 流式传输 |
| Event Streaming | Apache Kafka | 3.6 | 交易事件总线,取证重放 |
| API Gateway | Spring Boot + Java 21 | 3.2.2 | REST 摄入,Kafka 生产者,ML 代理 |
| Frontend | Next.js + TypeScript + Tailwind | 14 | 实时欺诈情报仪表板 |
| Deployment | Docker Compose | v3.9 | 一键全栈编排 |
| STR Reports | ReportLab / WeasyPrint | Latest | 自动生成 FIU-IND STR PDF |
| Privacy Layer | SHA-256 + Differential Privacy | — | GDPR 安全的银行间指纹识别 |
| Coordination | Apache ZooKeeper | 3.9 | Kafka Broker 协调 |
## 10. 快速开始
### 前置条件
- Docker 24+ 和 Docker Compose v2
- 建议至少 8 GB RAM
- 端口 3000, 8000, 8080, 8090, 7474, 7687, 9092, 9093 可用
### 部署
```
git clone https://github.com/akshat440/ShaktiSafe.git
cd ShaktiSafe
docker-compose up --build
```
等待 60–90 秒让所有服务初始化。ML 引擎在首次启动时会自动种子合成数据并训练 GNN 模型。
### 服务端点
| 服务 | URL | 凭证 |
|---|---|---|
| Next.js Dashboard | http://localhost:3000 | — |
| Spring Boot Gateway API | http://localhost:8080/api/v1 | — |
| ML Engine (FastAPI) | http://localhost:8000 | — |
| ML Engine Swagger UI | http://localhost:8000/docs | — |
| Neo4j Browser | http://localhost:7474 | neo4j / intellitrace2026 |
| Kafka UI (Provectus) | http://localhost:8090 | — |
### Make 命令
```
# Stack 管理
make demo # Launch full Docker stack with build
make stop # Stop all containers
make clean # Tear down and remove all named volumes
# 开发
make data # Regenerate 42,152 synthetic transactions
make train # Retrain GNN model only
make report # Generate sample FIU-IND STR report
# 可观测性
make test # Smoke test all service endpoints
make logs # Tail all container logs
make logs-ml # ML Engine logs only
make logs-gateway # Spring Boot gateway logs only
make logs-kafka # Kafka broker logs only
```
## 11. API 参考
### Spring Boot Gateway — `localhost:8080/api/v1`
| 方法 | 端点 | 描述 | 响应 |
|:---:|---|---|---|
| `POST` | `/transactions` | 摄入单笔交易 | 202 Accepted + 带时间戳的交易 |
| `POST` | `/transactions/batch` | 批量摄入 (最大 500) | 202 Accepted + 已摄入计数 |
| `POST` | `/transactions/analyze` | 摄入 + 同步 ML 风险评分 | 200 + score object |
| `GET` | `/stats` | 仪表板统计信息 | Stats JSON |
| `GET` | `/graph` | 用于 D3 可视化的交易图谱 | Graph nodes + edges |
| `GET` | `/alerts` | 带分数的近期欺诈警报 | Alert array |
| `GET` | `/accounts` | 账户风险评分表 | Account array |
| `GET` | `/health` | 服务健康检查 | UP / DOWN |
**摄入一笔交易:**
```
curl -X POST http://localhost:8080/api/v1/transactions \
-H "Content-Type: application/json" \
-d '{
"sender_id": "ACC001",
"receiver_id": "ACC002",
"amount": 49999,
"channel": "UPI",
"sender_country": "IN",
"receiver_country": "SG"
}'
```
**同步风险评分:**
```
curl -X POST http://localhost:8080/api/v1/transactions/analyze \
-H "Content-Type: application/json" \
-d '{
"sender_id": "ACC001",
"receiver_id": "ACC002",
"amount": 49500,
"channel": "UPI"
}'
```
### 交易 Schema
| 字段 | 类型 | 必需 | 备注 |
|---|---|:---:|---|
| transaction_id | string | No | 如省略则自动生成 UUID |
| sender_id | string | Yes | |
| receiver_id | string | Yes | |
| amount | number | Yes | INR,必须为正数 |
| channel | string | Yes | UPI, NEFT, RTGS, IMPS, WALLET, ATM, SWIFT, NACH |
| currency | string | No | 默认:INR |
| sender_country | string | No | ISO-3166 alpha-2,默认:IN |
| receiver_country | string | No | ISO-3166 alpha-2,默认:IN |
| timestamp_ms | number | No | Unix 纪元毫秒,默认为当前时间 |
| device_id | string | No | 设备指纹哈希 |
| mcc | string | No | 商户类别代码 |
### ML Engine Direct — `localhost:8000`
| 方法 | 端点 | 描述 |
|:---:|---|---|
| `GET` | `/` | 服务信息和模型状态 |
| `GET` | `/stats` | 欺诈检测统计信息 |
| `GET` | `/graph` | 完整实体图谱数据 |
|GET` | `/alerts` | 所有带置信度分数的欺诈警报 |
| `GET` | `/accounts` | 已评分账户列表 |
| `POST` | `/analyze` | 直接 GNN 推理 |
| `WS` | `/ws/live` | 实时警报 WebSocket 流 |
### Kafka Topics
| Topic | Partitions | Retention | 用途 |
|---|:---:|---|---|
| `transactions.raw` | 6 | 7 天 | 所有入站交易 |
| `fraud.alerts` | 3 | 30 天 | 检测到的欺诈事件 |
| `str.reports` | 1 | 90 天 | STR 报告触发器 |
| `transactions.dlq` | 2 | 7 天 | 死信队列 |
## 12. 项目结构
```
ShaktiSafe/
|
|-- docker-compose.yml 8-service full-stack deployment
|-- Makefile Developer shortcuts
|-- README.md
|
|-- ml-engine/ Python FastAPI + GNN Inference
| |-- Dockerfile
| |-- requirements.txt
| |-- gnn/
| | |-- model.py GraphSAGE 3-layer architecture (156,326 params)
| | |-- train.py Focal loss + cosine annealing pipeline
| | |-- inference.py Runtime scoring module
| | `-- __init__.py
| |-- detection/
| | |-- mule_ring_detector.py Louvain community detection
| | |-- structuring_detector.py Threshold band analysis
| | |-- jurisdiction_scorer.py 20-country FATF risk matrix
| | |-- device_fingerprint.py SHA-256 hash matching
| | |-- nesting_depth.py Multi-hop shell chain scorer
| | |-- sanctions_screener.py Behavioural pattern matching
| | `-- __init__.py
| |-- data/
| | |-- generator.py 42,152 synthetic transactions, 12 scenarios
| | `-- __init__.py
| |-- reports/
| | `-- report_generator.py Auto FIU-IND STR PDF
| |-- api/
| | |-- main.py FastAPI app, all endpoints, WebSocket
| | `-- __init__.py
| `-- sample_data/
| |-- transactions.json
| |-- accounts.json
| `-- stats.json
|
|-- backend/ Spring Boot 3.2 API Gateway (Java 21)
| |-- Dockerfile 2-stage build: JDK builder -> JRE slim
| |-- pom.xml
| `-- src/main/
| |-- java/com/shaktisafe/gateway/
| | |-- ShaktiSafeApplication.java
| | |-- controller/
| | | `-- TransactionController.java 7 REST endpoints
| | |-- service/
| | | `-- TransactionService.java Kafka publish + ML proxy
| | |-- config/
| | | |-- KafkaConfig.java Topic auto-creation
| | | `-- WebClientConfig.java Non-blocking ML client
| | `-- model/
| | |-- Transaction.java Canonical transaction payload
| | `-- FraudAlert.java Alert model with STR flag
| `-- resources/
| `-- application.yml
|
|-- frontend/ Next.js 14 + TypeScript + Tailwind
| |-- Dockerfile
| |-- package.json
| |-- tailwind.config.js
| |-- next.config.js
| |-- tsconfig.json
| `-- src/
| |-- app/
| | |-- layout.tsx
| | |-- page.tsx
| | `-- dashboard/page.tsx Main fraud intelligence dashboard
| |-- components/
| | |-- ForceGraph.tsx D3 force-directed mule ring graph
| | |-- LiveAlertTicker.tsx WebSocket real-time alert feed
| | |-- AlertCard.tsx Alert display with severity badge
| | |-- StatCard.tsx Metric overview card
| | `-- Badge.tsx Severity level indicator
| |-- lib/
| | `-- api.ts API client (Gateway + ML Engine)
| `-- types/
| `-- index.ts Shared TypeScript types
|
|-- graph-db/
| |-- init/schema.cypher Node labels, relationships, indexes
| `-- queries/mule_ring_detection.cypher
|
`-- kafka/
`-- init-topics.sh Creates all 4 topics on broker startup
```
## 13. 数据集详情
| 指标 | 值 |
|--------|-------|
| 数据集总交易数 | 42,152 |
| 账户节点 | 3,073 |
| 骡子账户 | 73 (2.4%) |
| 嵌入的欺诈场景 | 12 |
| 覆盖的支付渠道 | 9 |
| FATF 矩阵中的司法管辖区 | 20 |
| GNN 模型参数 | 156,326 |
| 验证集 AUC (合成) | 0.98+ |
| 全图推理估计 | < 80ms |
| 并行检测器 | 6 |
| 标记的总金额 (合成) | INR 6.79 Crore |
| 隐私保护方法 | SHA-256 + 差分隐私分桶 |
### 实施阶段
| 阶段 | 周数 | 交付物 |
|---|:---:|---|
| Phase I — 基础 | 1–2 | 合成数据集,Neo4j schema,GNN 训练流水线,FastAPI 服务器,Next.js 仪表板,Docker Compose |
| Phase II — 检测引擎 | 3–4 | 6 个并行检测器,Kafka 流式流水线,Spring Boot 网关,跨渠道关联,FATF 矩阵 |
| Phase III — 合规与演示 | 5–6 | FIU-IND STR 报告生成,银行间共享 API,力导向图,可解释性层,完整文档 |
### 预期成果
| 目标 | 值 |
|---|---|
| 团伙检测延迟 | < 100ms |
| 覆盖的欺诈模式 | 12 |
| 支付渠道 | 9 条通道 |
| STR 自动生成时间 | < 1 秒 |
| GNN 验证集 AUC | 0.98+ (合成) |
| 隐私保护方法 | SHA-256 + 分桶 |
**一张图谱。所有渠道。实时。**
**拨付之前。可解释。合规。**
[](https://vitbhopal.ac.in)
[](https://github.com/akshat440/ShaktiSafe)
[](https://github.com/akshat440/ShaktiSafe)