pgupta26dec/sentinel-e2e-financial-anamoly-detection
GitHub: pgupta26dec/sentinel-e2e-financial-anamoly-detection
一个基于本地现代数据栈的无监督金融异常检测项目,旨在以低误报率识别欺诈交易。
Stars: 0 | Forks: 0
# 🛡️ 项目哨兵:端到端金融异常检测
**一个使用 DuckDB、dbt、单类 SVM 和 Airflow 3.0 构建的生产级本地欺诈检测流水线。**
## 📌 摘要
在金融服务中,欺诈是“ haystack 中的针”,通常仅占总交易的 0.2% 以下。本项目实现了一个 **无监督异常检测** 框架,通过学习正常交易的“边界”来识别欺诈者。
为了优先考虑迭代速度并消除云计算成本,该项目绕过了传统的云数据仓库(如 Snowflake)。相反,它实现了一个高度优化的 **本地现代数据栈(MDS)** 架构,能够在几秒钟内本地处理超过 284,000 笔交易。
## 🏗️ 架构与数据流
该流水线是完全自动化并在本地编排的:
1. **数据摄取**:原始交易日志(卡内基大学信用卡数据集)直接查询到本地 **DuckDB** 数据库中。
2. **转换(dbt)**:
* `stg_transactions`:数据清洗、模式强制和时间戳标准化。
* `fct_transaction_features`:使用高级 SQL 窗口函数(`LAG`、`ROWS BETWEEN`)来构建行为特征,例如 `seconds_since_last_txn`、`rolling_avg_amount_last_10` 和 `is_volume_spike`。
3. **建模(Python & Scikit-Learn)**:
* **算法**:带 RBF 核的单类支持向量机(OC-SVM)。
* **特征**:构建的金融指标与 28 个匿名化 PCA 交互特征(`v1`-`v28`)相结合。
* **调优**:超参数优化(`nu=0.02`,`gamma=0.01`),以平衡严格性与边界形状。
4. **可视化(Streamlit)**:标记的异常被推送到一个实时交互式仪表盘,供欺诈分析师手动审查。
5. **编排(Apache Airflow 3.0)**:整个流程(dbt 模型 ➔ 机器学习推理)通过每日 DAG 自动执行。
## 🛠️ 技术栈
| 层 | 工具 |
| :--- | :--- |
| **数据仓库** | DuckDB(嵌入式,本地) |
| **转换** | dbt(数据构建工具) |
| **语言** | Python 3.9+ |
| **机器学习** | Scikit-Learn(单类 SVM、StandardScaler) |
| **编排** | Apache Airflow 3.0 |
| **可视化** | Streamlit |
## 📊 业务影响与模型性能
无监督模型必须在检测真实欺诈与误报带来的运营成本(客户摩擦)之间取得平衡。
**最终模型结果(在 284,806 笔交易上测试):**
* **召回率(捕获率)**:`81.71%`(成功盲检 492 笔真实欺诈中的 402 笔)。
* **全局误报率**:`1.8%`(仅标记了总正常交易量的极小部分)。
* *业务背景*:该模型作为一个高度有效的初级防御层,在需要人工审核或短信验证的交易量不到 2% 的情况下,阻止了超过 80% 的欺诈。
## 🗂️ 仓库结构
```
├── dags/ # Airflow 3.0 orchestration
│ └── sentinel_dag.py # DAG linking dbt runs and ML inference
├── dbt/ # dbt models for DuckDB transformations
│ ├── models/
│ │ ├── staging/ # Cleaning raw data
│ │ └── marts/ # Feature engineering (Window functions)
├── src/ # Python source code
│ ├── anomaly_detector.py # Training and inference for the OC-SVM
│ └── app.py # Streamlit UI Command Center
├── data/ # Raw CSVs and sentinel.duckdb (git-ignored)
├── project_description.md # Detailed project narrative and case study
└── README.md # Project overview
```
## 🚀 如何在本地运行
1. **激活虚拟环境**:
```bash
source venv/bin/activate
```
2. **启动 Airflow 3.0 流水线(需要 3 个终端)**:
```bash
export AIRFLOW_HOME=$(pwd)/airflow_home
export AIRFLOW__CORE__AUTH_MANAGER="airflow.providers.fab.auth_manager.fab_auth_manager.FabAuthManager"
export AIRFLOW__CORE__DAGS_FOLDER=$(pwd)/dags
# 终端 1
airflow api-server -p 8080
# 终端 2
airflow scheduler
# 终端 3
airflow dag-processor
```
访问 `http://localhost:8080` 以触发 `project_sentinel_pipeline`。
3. **启动 Streamlit 仪表盘**:
```bash
streamlit run src/app.py
```
标签:Apache Airflow, dbt, DuckDB, gamma=0.01, Kaggle, Kubernetes, MDS, nu=0.02, One-Class SVM, PCA, RBF核, Streamlit, 交易监控, 代码示例, 反欺诈, 异常检测, 成本优化, 数据分析, 数据工程, 数据管道, 无监督学习, 时间序列特征, 本地数据栈, 本地计算, 欺诈检测, 滚动窗口, 特征工程, 秒级处理, 自动化DAG, 访问控制, 超参数调优, 软件工程, 逆向工具, 金融