ArayikGevorgyan/AML_System
GitHub: ArayikGevorgyan/AML_System
一个基于规则的 AML 交易监控系统,结合机器学习,用于检测可疑金融活动并支持案件管理与制裁筛查。
Stars: 0 | Forks: 0
# AML 交易监控系统
## 目录
- [概述](#overview)
- [功能特性](#features)
- [技术栈](#tech-stack)
- [系统架构](#system-architecture)
- [模块](#modules)
- [AML 检测规则](#aml-detection-rules)
- [制裁筛查算法](#sanctions-screening-algorithm)
- [机器学习模型](#ml-models)
- [快速开始](#quick-start)
- [演示凭据](#demo-credentials)
- [API 文档](#api-documentation)
- [项目结构](#project-structure)
## 概述
本系统模拟了一个真实的 AML(反洗钱)交易监控平台,供金融机构用于检测、调查和报告可疑金融活动。它实现了基于规则的检测、对 OFAC SDN 清单和 UN 合并清单的模糊制裁筛查、告警生成、案件管理、基于机器学习的异常检测以及完整的审计追踪。
## 功能特性
- **JWT 认证**:基于角色的访问控制(管理员 / 分析员 / 监督员)
- **用户注册**:带邮箱验证码的注册
- **客户与账户管理**:风险画像与 PEP 标记
- **交易监控**:自动风险评分
- **9 规则 AML 检测引擎**:基于 BSA、FATF 与 FinCEN 类型学
- **微交易检测**:高频小额重复交易
- **告警生成**:分级(低 / 中 / 高 / 严重)
- **案件管理**:调查流程与 SAR 提交支持
- **OFAC SDN + UN 合并清单筛查**:使用令牌回溯 Jaro-Winkler 模糊匹配
- **可搜索的下拉框**:类型(86 个项目)、项目(196 个国家)
- **机器学习异常检测**:每个客户基于 Isolation Forest 的行为模型
- **机器学习风险预测**:基于 Gradient Boosting 的 SAR 概率预测(未来 90 天)
- **批量筛查 CLI**:对 CSV 中的名单/ID 进行制裁库筛查
- **健康检查 CLI**:系统级状态检查与监控退出码
- **合规报告生成器**:指定日期范围的文本与 CSV 报告
- **交互式仪表板**:KPI、图表与实时统计
- **完整审计追踪**:所有操作的可追溯记录
- **深色 / 浅色模式**:可持久化偏好设置
## 技术栈
| 层级 | 技术 |
|------|------|
| 前端 | React 18、React Router v6、Recharts、React Icons、Axios |
| 后端 | Python 3.13、FastAPI、SQLAlchemy ORM、Pydantic v2 |
| 数据库 | SQLite(WAL 模式,启用外键) |
| 认证 | JWT(python-jose)、bcrypt 密码哈希 |
| 制裁数据 | OFAC SDN 高级 XML + UN 合并清单 XML |
| 模糊匹配 | jellyfish(Jaro-Winkler)、SQL ILIKE 子串预过滤 |
| XML 解析 | lxml iterparse(流式处理,内存高效) |
| 机器学习 / 统计 | scikit-learn、numpy(Isolation Forest、Gradient Boosting) |
| 邮件 | 通过 Brevo 的 SMTP(或开发环境终端回退) |
## 系统架构
```
┌─────────────────────────────────────────────────────────┐
│ React Frontend (Port 3000) │
│ Dashboard │ Customers │ Transactions │ Alerts │ Cases │
│ Sanctions │ Rules │ Audit │ Login │ Register │
└──────────────────────────┬──────────────────────────────┘
│ HTTP/REST (Axios + JWT)
┌──────────────────────────▼──────────────────────────────┐
│ FastAPI Backend (Port 8000) │
│ /api/v1/auth │ /customers │ /transactions │ /alerts │
│ /cases │ /rules │ /sanctions │ /dashboard │ /audit │
└──────────┬───────────────┬────────────────┬─────────────┘
│ │ │
┌──────▼──────┐ ┌──────▼──────┐ ┌──────▼──────┐
│ SQLite DB │ │ Rules Engine│ │ Sanctions │
│ (aml.db) │ │ (9+ rules) │ │ Screener │
└─────────────┘ └─────────────┘ └──────┬──────┘
│
┌──────▼──────┐
│ OFAC SDN │
│ + UN List │
└─────────────┘
```
## 模块
| 模块 | 描述 |
|------|------|
| **认证** | JWT 登录/注销,注册邮箱验证,3 种角色 |
| **客户** | 客户档案、风险等级(低/中/高/严重)、PEP 状态、制裁标记 |
| **账户** | 与客户绑定的银行账户,自动生成账号 |
| **交易** | 创建与监控交易,提交时自动风险评分 |
| **规则引擎** | 9+ 条可配置 AML 检测规则,带阈值与时间窗口 |
| **告警** | 规则匹配自动生成,级别分类,状态流转 |
| **案件** | 调查管理、笔记线程、状态跟踪、SAR 提交 |
| **制裁筛查** | 对 OFAC SDN 与 UN 合并清单的模糊名称搜索 |
| **黑名单** | 自定义 IP、国家、实体、邮箱、账号黑白名单 |
| **风险评分** | 复合风险分(画像 + 交易行为 + 告警历史) |
| **机器学习模型** | Isolation Forest 异常检测 + Gradient Boosting SAR 预测 |
| **分析** | 交易趋势、风险分布、制裁统计 |
| **仪表板** | KPI 卡片、趋势图表、告警分布、案件统计 |
| **审计日志** | 完整不可变的审计追踪,含前后 JSON 快照 |
## AML 检测规则
所有规则均基于官方监管指引:**银行保密法(BSA)**、**FATF 建议** 与 **FinCEN 类型学**。
| # | 规则 | 监管依据 | 描述 |
|---|------|----------|------|
| 1 | **大额交易** | BSA / 31 USC §5313 | 单笔交易超过 $10,000 报告阈值 |
| 2 | **分拆(Smurfing)** | 31 USC §5324 | 多笔交易略低于阈值以规避 CTR 报告 |
| 3 | **高频交易** | FATF 建议 20 | 24 小时内异常高交易笔数 |
| 4 | **高速流动** | FinCEN 提醒 | 短时间内大额资金累计进出 |
| 5 | **高风险国家** | FATF / OFAC | 涉及 OFAC 清单或 FATF 高风险司法管辖区 |
| 6 | **快速转移** | FinCEN Pass-Through | 数小时内收进转出(分层指示) |
| 7 | **整数金额** | FATF 指引 | 可疑的整数金额(如 $5,000.00) |
| 8 | **PEP 交易** | FATF 建议 12 | 涉及政治公众人物 |
| 9 | **微交易** | FinCEN 指引 | 高频小额(账户测试指示) |
## 制裁筛查算法
制裁筛查器采用多阶段流水线,搜索 OFAC SDN 高级 XML 与 UN 合并清单。结果按别名逐行展示,匹配 OFAC 官方展示模型。
```
Input Name
│
▼
Normalize (lowercase, unicode→ASCII, remove honorifics, keep Arabic particles)
│
▼
SQL ILIKE Substring Pre-filter (candidate retrieval — fast DB-level filter)
│
▼
Composite Score per alias:
Token Recall (per-token best Jaro-Winkler) × 0.60
+ Full-string Jaro-Winkler × 0.25
+ Token Jaccard Overlap × 0.15
│
▼
Exact token subset → Score 100 (matches OFAC "Min Score = 100" rule)
│
▼
Filter by min_score → Sort by score desc → Return Results
```
**匹配强度**:精确(100)| 强(≥85)| 可能(≥70)| 弱(<70)
**支持的清单**:
| 清单 | 来源 | 条目数 |
|------|------|--------|
| OFAC SDN | sdn_advanced.xml(官方 OFAC) | 约 18,000+ |
| UN 安理会清单 | consolidatedLegacyByNAME.xml(联合国安理会) | 约 1,000+ |
## 机器学习模型
### 异常检测器(`ml/anomaly_detector.py`)
- **算法**:Isolation Forest(无监督)
- **目的**:基于客户自身历史行为检测统计异常交易,捕捉规则未覆盖的新型欺诈模式
- **特征**:log(金额)、小时、星期几、是否国际、是否整数金额、交易类型、渠道
- **输出**:异常分(0–100)、是否异常(bool)、原因
### 客户风险预测器(`ml/risk_model.py`)
- **算法**:梯度提升分类器(sklearn)
- **目的**:预测客户在未来 90 天内生成 SAR 的概率
- **特征**:14 项特征,包括交易速度、标记比例、告警严重分、PEP/制裁状态、国家风险、账户年龄
- **输出**:SAR 概率(0–1)、风险等级、关键因素
### 特征工程(`ml/feature_engineering.py`)
集中化流水线,为每个客户提取 30+ 项特征,涵盖 5 组:金额统计、速度窗口、时间模式、地理风险与告警历史。
### 模型评估器(`ml/model_evaluator.py`)
评估套件包含精确率、召回率、F1、ROC-AUC、混淆矩阵、阈值分析、K 折交叉验证与并排模型对比。召回率被设为最重要的 AML 指标。
## 快速开始
### 先条件
- Python 3.13+
- Node.js 18+
- OFAC SDN 高级 XML 文件(`sdn_advanced.xml`)
- UN 合并清单 XML 文件(`consolidatedLegacyByNAME.xml`)*(可选)*
### 1. 后端设置
```
cd backend
# 创建并激活虚拟环境
python3 -m venv venv
source venv/bin/activate # macOS/Linux
# venv\Scripts\activate # Windows
# 安装依赖
pip install -r requirements.txt
# 导入数据库(用户、规则、客户、交易)
python scripts/seed_data.py
# 导入 OFAC SDN 制裁名单
python scripts/import_sanctions.py
# 导入联合国综合清单(可选)
python scripts/import_un_sanctions.py
# 配置电子邮件(可选 — 如果未配置,代码将打印到终端)
cp .env.example .env
# 编辑 .env 并填写 SMTP 凭据
# 启动 API 服务器
uvicorn main:app --reload --port 8000
```
### 2. 前端设置
```
cd frontend
npm install
npm start
```
在浏览器中打开 `http://localhost:3000`。
### 3. CLI 工具
```
# 批量筛查 CSV 中的名称与制裁名单
python scripts/bulk_screen.py --input customers.csv --output results.csv
# 系统健康检查
python scripts/health_check.py
# 生成合规报告(最近 30 天)
python scripts/generate_report.py --days 30 --format text
# 训练 ML 风险模型
python ml/train.py
```
### 4. 运行测试
```
cd backend
pytest tests/ -v
```
## 演示凭据
| 用户名 | 密码 | 角色 |
|--------|------|------|
| `admin` | `Admin@123` | 管理员 |
| `ArayikAnalyst` | `Analyst@123` | 分析员 |
| `ArayikSupervisor` | `Super@123` | 监督员 |
## API 文档
交互式 Swagger UI 地址:`http://localhost:8000/docs`
| 端点 | 描述 |
|------|------|
| `POST /api/v1/auth/login` | 认证并获取 JWT 令牌 |
| `POST /api/v1/auth/send-verification` | 发送邮箱验证码 |
| `POST /api/v1/auth/register` | 注册新用户账户 |
| `GET /api/v1/dashboard` | 获取所有仪表板 KPI 与图表 |
| `GET /api/v1/customers` | 列出所有客户 |
| `POST /api/v1/transactions` | 创建交易(触发规则引擎) |
| `GET /api/v1/alerts` | 列出告警(支持筛选) |
| `POST /api/v1/sanctions/search` | 模糊搜索 OFAC SDN + UN 列表 |
| `GET /api/v1/sanctions/stats` | 制裁库统计信息 |
| `GET /api/v1/audit` | 检索审计日志条目 |
## 项目结构
```
AML/
├── backend/
│ ├── main.py # FastAPI app entry point
│ ├── config.py # Settings and environment variables
│ ├── database.py # SQLAlchemy engine and session
│ ├── requirements.txt
│ ├── .env.example
│ ├── models/ # SQLAlchemy ORM models
│ │ ├── user.py
│ │ ├── customer.py
│ │ ├── account.py
│ │ ├── transaction.py
│ │ ├── rule.py
│ │ ├── alert.py
│ │ ├── case.py
│ │ ├── sanctions.py
│ │ ├── blacklist.py
│ │ └── audit_log.py
│ ├── routers/ # FastAPI route handlers
│ │ ├── auth.py
│ │ ├── customers.py
│ │ ├── transactions.py
│ │ ├── rules.py
│ │ ├── alerts.py
│ │ ├── cases.py
│ │ ├── sanctions.py
│ │ ├── blacklist.py
│ │ ├── dashboard.py
│ │ ├── reporting.py
│ │ ├── risk_scoring.py
│ │ └── audit.py
│ ├── services/ # Business logic
│ │ ├── rules_engine.py # AML detection engine (9 rules)
│ │ ├── sanctions_screener.py # Jaro-Winkler fuzzy screener
│ │ ├── alert_service.py
│ │ ├── case_service.py
│ │ ├── transaction_service.py
│ │ ├── customer_service.py
│ │ ├── risk_scoring_service.py
│ │ ├── blacklist_service.py
│ │ ├── dashboard_service.py
│ │ ├── auth_service.py
│ │ ├── audit_service.py
│ │ ├── escalation_service.py
│ │ ├── reporting_service.py
│ │ ├── predictive_risk_service.py
│ │ └── email_service.py
│ ├── ml/ # Machine learning models
│ │ ├── anomaly_detector.py # Isolation Forest per-customer
│ │ ├── risk_model.py # Gradient Boosting SAR predictor
│ │ ├── feature_engineering.py # Centralised feature pipeline
│ │ ├── model_evaluator.py # Metrics, threshold analysis
│ │ └── train.py # Training script
│ ├── analysis/ # Data analysis modules
│ │ ├── transaction_analysis.py
│ │ ├── risk_distribution.py
│ │ └── sanctions_stats.py
│ ├── tests/ # Unit tests (pytest)
│ │ ├── test_sanctions_screener.py
│ │ ├── test_risk_scoring.py
│ │ ├── test_rules_engine.py
│ │ ├── test_auth_service.py
│ │ ├── test_alert_service.py
│ │ ├── test_transaction_service.py
│ │ └── test_blacklist_service.py
│ ├── core/
│ │ ├── security.py # JWT and bcrypt
│ │ ├── dependencies.py # FastAPI dependencies / RBAC
│ │ └── enums.py
│ └── scripts/
│ ├── seed_data.py # Demo data seeder
│ ├── import_sanctions.py # OFAC XML importer
│ ├── import_un_sanctions.py # UN Consolidated List importer
│ ├── bulk_screen.py # CLI: bulk sanctions screening
│ ├── health_check.py # CLI: system health check
│ └── generate_report.py # CLI: compliance report generator
│
├── frontend/
│ ├── public/
│ └── src/
│ ├── App.js
│ ├── index.css # Global dark/light theme variables
│ ├── api/
│ │ └── client.js # Axios instance with JWT interceptor
│ ├── context/
│ │ ├── AuthContext.js
│ │ └── ThemeContext.js # Dark/light mode
│ ├── components/layout/
│ │ ├── Layout.js
│ │ ├── Sidebar.js
│ │ └── Topbar.js
│ └── pages/
│ ├── Login.js
│ ├── Register.js
│ ├── Dashboard.js
│ ├── Customers.js
│ ├── Transactions.js
│ ├── Alerts.js
│ ├── Cases.js
│ ├── Sanctions.js # Searchable Type/Program/Country dropdowns
│ ├── Rules.js
│ └── Audit.js
│
└── docs/
├── REQUIREMENTS.md
└── USER_STORIES.md
```
标签:196国家, 86项目, AML, BSA, CLI, Country, CRITICAL, FATF, FinCEN, HIGH, Jaro-Winkler, JWT认证, LOW, MEDIUM, ML风险预测, OFAC制裁筛查, PEP, Program, RBAC, RegTech, SAR, SAR预测, SDN, TCP/UDP协议, Type, WiFi技术, 九规则, 云计算, 交易监控, 交易监测, 健康检查, 区块链审计, 反洗钱, 可疑活动报告, 合规平台, 告警分级, 审计追踪, 客户管理, 尽职调查, 异常检测, 微交易检测, 批量筛查, 搜索筛选, 数据溯源, 时间序列, 梯度提升, 检测规则, 模块化设计, 模糊匹配, 用户注册, 监管科技, 系统架构, 网络资产发现, 联合国制裁名单, 自动化修复, 规则引擎, 角色权限, 账户管理, 逆向工具, 邮箱验证码, 金融安全, 金融监管, 隔离森林, 风险画像, 风险评分, 高频小额