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 ![Python 测试](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/85fa4f4b9e035913.svg) ## 项目摘要 本项目演示了一个用于银行交易监控的端到端分析与报告 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 — 高管风险概览 ![高管风险概览](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/c408b4426a035920.png) ### Power BI — 风险驱动因素 ![风险驱动因素](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/c61292cb98035927.png) ### Power BI — 运营监控 ![运营监控](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/367a0ab441035933.png) ### 自动化 HTML 报告 ![HTML 报告](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/e3c086df03035940.png) ### Kimball 维度模型 ![Kimball 模型](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/002321cee4035946.png) ### FastAPI 模拟银行 API ![FastAPI 文档](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/2611cdbbc1035953.png) ## 核心功能 * 通过 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, 代码示例, 多线程, 数据仓库, 数据分析, 无后门, 逆向工具, 金融风控