adrian-kabat/Bank-Transaction-Monitoring-and-Risk-Scoring-Pipeline
GitHub: adrian-kabat/Bank-Transaction-Monitoring-and-Risk-Scoring-Pipeline
一个端到端银行交易监控分析项目,通过可配置规则的风险评分和 Kimball 维度建模识别潜在可疑交易并生成多维度报表。
Stars: 0 | Forks: 0
# 银行交易监控与基于规则的风险评分 Pipeline

## 项目摘要
本项目演示了一个用于银行交易监控的端到端分析与报告 Pipeline。它模拟了一个小型分析系统,旨在帮助识别潜在可疑交易、优先处理需进一步审查的案例,并监控交易风险 KPI。
该项目包含程序化数据接入、数据清洗、特征工程、基于规则的风险评分、Kimball 维度模型、SQL KPI 查询、自动化 HTML 报告、FastAPI 模拟银行 API 以及 Power BI 仪表板。
## 业务问题
金融机构需要监控交易活动,并识别可能需要进一步审查的交易。在许多实际场景中,确认的欺诈标签往往不可用、存在延迟或不完整。因此,分析师通常需要透明的监控逻辑,以便在最终确认之前优先处理潜在可疑的交易。
本项目通过构建一个可重现的 Pipeline来解决这一场景,该 Pipeline 为每笔交易分配风险评分,并生成用于监控、报告和运营审查的分析输出。
## 业务价值
该 Pipeline 支持:
* 监控交易量和风险敞口,
* 识别潜在可疑交易,
* 优先审查高风险案例,
* 按渠道、交易类型、位置和小时分析风险模式,
* 生成可重复的 KPI 报告,
* 为 Power BI 仪表板准备结构化数据。
## 关键结果
该项目生成:
* 清洗后的交易数据,
* 风险评分后的交易数据,
* `risk_score`、`suspicious_flag`、`risk_level` 和 `risk_reasons`,
* 存储在 `config/risk_rules.yaml` 中的可配置风险评分规则,
* SQLite 分析仓库,
* Kimball 维度模型,
* SQL KPI 输出,
* 响应式 HTML 报告,
* Power BI 仪表板,
* FastAPI 模拟银行 API。
## 截图
### Power BI — 高管风险概览

### Power BI — 风险驱动因素

### Power BI — 运营监控

### 自动化 HTML 报告

### Kimball 维度模型

### FastAPI 模拟银行 API

## 核心功能
* 通过 KaggleHub 进行程序化数据接入。
* 使用 Python 进行数据清洗与特征工程的 Pipeline。
* 透明的、基于规则的交易风险评分。
* 包含事实表和维度表的 Kimball 维度模型。
* SQLite 分析仓库。
* 用于交易监控的 SQL KPI 查询。
* 自动化的响应式 HTML 报告。
* 包含三个分析页面的 Power BI 仪表板。
* FastAPI 模拟银行 API。
* 单命令 Pipeline 编排。
## 技术栈
* Python
* pandas
* KaggleHub
* SQLite
* SQL
* FastAPI
* Uvicorn
* Power BI
* Git/GitHub
## 数据源
本项目使用来自 Kaggle 的 **Bank Transaction Dataset for Fraud Detection**:
```
valakhorasani/bank-transaction-dataset-for-fraud-detection
```
数据通过 KaggleHub 以程序化方式下载。原始数据文件被排除在版本控制之外。
## 建模方法
该数据集不包含已确认的欺诈标签。因此,本项目不会将交易分类为确认的欺诈或非欺诈。
相反,本项目侧重于交易监控和基于规则的异常检测。生成的 `suspicious_flag` 应被解释为潜在可疑交易的信号,而不是确认的欺诈标签。
风险评分逻辑有意与数据清洗 Pipeline 分离,以便于未来的开发。
## Pipeline
```
KaggleHub
↓
Raw data
↓
Data cleaning and feature engineering
↓
Rule-based risk scoring
↓
Kimball dimensional model
↓
SQLite analytical warehouse
↓
SQL KPI queries
↓
Automated HTML report
↓
CSV export for Power BI
↓
Power BI dashboard
```
FastAPI 模拟 API 作为独立模块实现,可用于模拟从银行源系统接入数据。
## 仓库结构
```
financial-fraud-analytics-pipeline/
├── app/
│ ├── main.py
│ └── services/
│ ├── __init__.py
│ └── data_service.py
├── data/
│ ├── api/
│ ├── model/
│ ├── processed/
│ └── raw/
├── docs/
│ ├── dashboard_screenshots/
│ ├── kimball_dimensional_model.md
│ └── risk_scoring_method.md
├── powerbi/
│ └── transaction_monitoring_dashboard.pbix
├── reports/
├── scripts/
│ ├── 00_download_data.py
│ ├── 01_inspect_data.py
│ ├── 02_profile_data.py
│ ├── 03_clean_transactions.py
│ ├── 04_score_transactions.py
│ ├── 05_build_dimensional_model.py
│ ├── 06_test_kpi_queries.py
│ ├── 07_generate_html_report.py
│ ├── 08_export_model_tables.py
│ ├── 09_fetch_from_api.py
│ └── 10_run_pipeline.py
├── sql/
│ └── 01_kpi_queries.sql
├── warehouse/
├── .gitignore
├── README.md
└── requirements.txt
```
## 如何运行
### 1. 克隆仓库
```
git clone
cd financial-fraud-analytics-pipeline
```
### 2. 创建并激活虚拟环境
Windows:
```
python -m venv .venv
.venv\Scripts\activate
```
macOS/Linux:
```
python -m venv .venv
source .venv/bin/activate
```
### 3. 安装依赖项
```
pip install -r requirements.txt
```
### 4. 运行完整的分析 Pipeline
```
python scripts/10_run_pipeline.py
```
此命令执行核心分析工作流:
1. 从 KaggleHub 下载原始数据,
2. 检查和分析原始数据,
3. 清洗交易数据,
4. 应用基于规则的风险评分,
5. 构建 Kimball 维度模型,
6. 测试 SQL KPI 查询,
7. 生成自动化 HTML 报告,
8. 为 Power BI 导出模型表。
### 5. 打开生成的输出文件
Pipeline 完成后,主要的生成文件包括:
```
data/processed/transactions_clean.csv
data/processed/transactions_scored.csv
warehouse/transaction_monitoring.db
reports/transaction_monitoring_report.html
data/model/*.csv
```
生成的数据文件、仓库文件和 HTML 报告被排除在版本控制之外。
## 模拟银行 API
该项目包含一个基于 FastAPI 的模拟银行 API,用于公开清洗和风险评分后的交易数据。该 API 模拟了分析 Pipeline 使用的银行源系统。
### 可用 endpoints
* `GET /health`
* `GET /summary`
* `GET /transactions`
* `GET /accounts`
* `GET /merchants`
* `GET /channels`
### 在本地运行 API
该 API 需单独运行,因为它是一个长时间运行的本地服务。
```
uvicorn app.main:app --reload
```
启动 API 后,交互式 API 文档可在以下地址访问:
```
http://127.0.0.1:8000/docs
```
### 测试 API
要检查 API 是否正常运行,请打开:
```
http://127.0.0.1:8000/health
```
预期响应:
```
{"status":"ok"}
```
您也可以打开摘要 endpoint:
```
http://127.0.0.1:8000/summary
```
如果未定义 `/` endpoint,根 URL 可能会返回 `404 Not Found`。请使用 `/docs`、`/health` 或列出的 endpoints 来测试 API。
### 从 API 获取数据
在 API 运行的情况下,在第二个终端中执行以下命令:
```
python scripts/09_fetch_from_api.py
```
API 响应将本地保存至:
```
data/api/transactions_from_api.csv
```
原始 API 输出文件被排除在版本控制之外。
## Kimball 维度模型
分析层遵循 Kimball 维度建模方法。交易级别的事件存储在中心事实表中,而描述性业务上下文则被分离到维度表中。
### 事实表
```
fact_transactions
```
事实表的粒度为每笔银行交易一行。
主要度量和指标:
* `transaction_amount`
* `transaction_duration`
* `login_attempts`
* `account_balance`
* `minutes_since_previous_transaction`
* `transaction_count`
* `risk_score`
* `suspicious_flag`
* `risk_level`
* `risk_reasons`
### 维度表
```
dim_account
dim_date
dim_merchant
dim_channel
dim_location
dim_device
dim_transaction_type
```
所有关系均遵循从维度表到事实表的一对多结构。
详细文档可在以下位置找到:
```
docs/kimball_dimensional_model.md
```
## 风险评分方法
本项目使用透明的、基于规则的风险评分来识别可能需要进一步审查的交易。由于数据集不包含已确认的欺诈标签,因此生成的指标不应被解释为已确认的欺诈预测。
每笔交易都会获得四个主要的风险相关变量:
| 变量 | 描述 |
| ----------------- | --------------------------------------------------------------------- |
| `risk_score` | 根据基于规则的指标计算得出的 0 到 100 之间的数值风险评分。 |
| `suspicious_flag` | 二元标志,指示交易是否超过了可疑阈值。 |
| `risk_level` | 分类风险级别:`Low`、`Medium` 或 `High`。 |
| `risk_reasons` | 可解释的原因代码,解释交易收到风险点的原因。 |
风险原因代码示例包括:
| 原因代码 | 解释 |
| ------------------------------------------- | --------------------------------------------------- |
| `high_amount_p95` | 交易金额等于或高于第 95 百分位数。 |
| `very_high_amount_p99` | 交易金额等于或高于第 99 百分位数。 |
| `multiple_login_attempts` | 该交易关联了多次登录尝试。 |
| `long_transaction_duration` | 交易持续时间异常长。 |
| `low_account_balance` | 账户余额等于或低于第 5 百分位数。 |
| `night_transaction` | 交易发生在夜间时段。 |
| `short_interval_since_previous_transaction` | 交易发生在上一笔交易后不久。 |
风险评分规则存储在:
```
config/risk_rules.yaml
```
这使得评分逻辑透明,且无需修改 Python 源代码即可轻松调整。
配置文件片段示例:
```
amount:
high_amount_quantile: 0.95
high_amount_points: 30
very_high_amount_quantile: 0.99
very_high_amount_points: 20
classification:
suspicious_threshold: 60
max_risk_score: 100
low_risk_max: 29
medium_risk_max: 59
```
评分逻辑有意与数据清洗阶段分离。这使得 Pipeline 更易于维护,并允许未来的扩展,例如无监督异常检测模型。
详细文档可在以下位置找到:
```
docs/risk_scoring_method.md
```
## SQL KPI 查询
SQL 查询存储在:
```
sql/01_kpi_queries.sql
```
这些查询涵盖:
* 交易量,
* 交易金额,
* 可疑交易数量,
* 可疑交易率,
* 按渠道分析风险,
* 按交易类型分析风险,
* 按位置分析风险,
* 按小时分析风险,
* 排名靠前的高风险交易。
## 自动化 HTML 报告
自动化报告由以下程序生成:
```
python scripts/07_generate_html_report.py
```
生成的报告保存至:
```
reports/transaction_monitoring_report.html
```
该报告包括:
* 高管 KPI 摘要,
* 风险级别分布,
* 按渠道分析风险,
* 按交易类型分析风险,
* 按位置分析风险,
* 高风险交易审查表,
* 按一天中的小时分析风险。
## Power BI 仪表板
Power BI 仪表板包含三个分析页面:
1. **高管风险概览**
交易量、可疑活动和风险敞口的高层级摘要。
2. **风险驱动因素**
分析跨渠道、交易类型、位置和时间模式的风险指标。
3. **运营监控**
针对高风险细分市场和需要进一步审查的交易的运营视图。
Power BI 文件存储在:
```
powerbi/transaction_monitoring_dashboard.pbix
```
仪表板截图可存储在:
```
docs/dashboard_screenshots/
```
## 项目产出
本项目生成以下本地产物:
| 产出 | 路径 | 描述 |
| ------------------------ | ----------------------------------------------- | ------------------------------------------------------------------------------------------------- |
| 清洗后的数据集 | `data/processed/transactions_clean.csv` | 经过标准化、日期解析、验证、去重和特征工程后的清洗交易数据。 |
| 评分后的数据集 | `data/processed/transactions_scored.csv` | 包含 `risk_score`、`suspicious_flag`、`risk_level` 和 `risk_reasons` 的丰富后交易数据。 |
| 风险规则配置 | `config/risk_rules.yaml` | 包含评分阈值、分位数、积分和分类阈值的 YAML 配置文件。 |
| SQLite 仓库 | `warehouse/transaction_monitoring.db` | 包含事实表和维度表的本地分析仓库。 |
| HTML 报告 | `reports/transaction_monitoring_report.html` | 从 SQLite 仓库生成的自动化 KPI 报告。 |
| Power BI 导出 | `data/model/*.csv` | 为 Power BI 导出的模型表。 |
| API 输出 | `data/api/transactions_from_api.csv` | 从本地 FastAPI 模拟银行 API 获取的数据。 |
| Power BI 仪表板 | `powerbi/transaction_monitoring_dashboard.pbix` | 包含高管、风险驱动因素和运营监控页面的交互式 Power BI 仪表板。 |
## 版本控制说明
该仓库排除了生成的本地文件,例如:
* 原始数据文件,
* 处理后的数据文件,
* 导出的模型 CSV 文件,
* SQLite 仓库文件,
* 生成的 HTML 报告,
* API 输出文件,
* 虚拟环境,
* 本地 IDE 设置。
这使得仓库保持轻量级且可重现。
## 局限性
该数据集不包含已确认的欺诈标签。因此,本项目不实施有监督的欺诈分类。
生成的 `suspicious_flag` 是一种交易监控信号,不应被解释为确认的欺诈。当前的 `risk_score` 基于启发式的规则方法,旨在用于分析和组合目的。
## 未来改进
潜在的扩展包括:
* 可配置的风险评分规则,
* 将评分阈值移至 YAML 或 JSON 配置文件中,
* 添加风险原因代码,
* 比较基于规则的评分与无监督异常检测,
* 添加 Isolation Forest 模型,
* 添加 Docker 支持,
* 添加自动化测试,
* 添加 Streamlit 仪表板,
* 通过轻量级云部署发布 API 或报告。
## 作品集摘要
本项目展示了设计和实施端到端分析工作流的能力,包括数据接入、数据准备、维度建模、SQL 分析、报告自动化、API 开发以及 Power BI 仪表板制作。
标签:AV绕过, ETL流水线, FastAPI, Python, 代码示例, 多线程, 数据仓库, 数据分析, 无后门, 逆向工具, 金融风控