siddheshpatil3637-git/safebank-fraud-detection

GitHub: siddheshpatil3637-git/safebank-fraud-detection

一个端到端的银行交易欺诈检测机器学习平台,融合有监督分类与无监督异常检测,通过 Streamlit 仪表板实现实时风险监控与分析。

Stars: 0 | Forks: 0

# 🛡️ SafeBank 交易异常检测平台 一个端到端的银行安全平台,能够检测异常的交易行为, 并通过有监督机器学习和无监督异常检测来预测潜在的欺诈行为, 结果通过交互式的 Streamlit 仪表板进行展示。 ## 1. 项目概述 | | | |---|---| | **行业** | 银行 / 金融服务 | | **问题类型** | 二分类欺诈分类 + 无监督异常检测 | | **数据** | 由 `generate_synthetic_data.py` 生成的合成银行交易数据集(120,000 笔交易 / 3,000 名客户)—— 随时可替换为具有相同 schema 的真实数据集 | | **欺诈率** | ~1.4%(符合真实情况的不平衡比例) | | **输出** | 每笔交易的风险评分 (0–100) + 风险等级(低/中/高/严重),并在实时仪表板中展示 | 该平台融合了两种互补的检测策略: 1. **有监督分类器** (Logistic Regression, Decision Tree, Random Forest, XGBoost) —— 从已标记的历史数据中学习*已知*的欺诈模式。 2. **无监督异常检测器** (Isolation Forest, Local Outlier Factor, One-Class SVM) —— 标记与任何已标记模式都不匹配的*新型*交易行为,完全不需要欺诈标签。 这两种信号被融合为一个单一的**风险评分** (`src/risk_scoring.py`),用于驱动仪表板的警报、客户风险画像以及实时模拟。 ## 2. 文件夹结构 ``` SafeBank-Fraud-Detection/ ├── data/ │ ├── raw/ │ │ └── banking_transactions.csv # synthetic source data │ └── processed/ │ ├── transactions_clean.csv # after preprocessing │ ├── transactions_features.csv # after feature engineering │ ├── transactions_with_anomaly_scores.csv │ ├── transactions_scored.csv # final: fraud prob + risk score │ └── customer_risk_profiles.csv # customer-level aggregates ├── src/ │ ├── utils.py # shared paths & helpers │ ├── data_preprocessing.py # Requirement 1 │ ├── feature_engineering.py # Requirement 1 (feature engineering) │ ├── eda.py # Requirement 2 │ ├── train_supervised_models.py # Requirement 3 (supervised) + 4 (evaluation) │ ├── train_anomaly_models.py # Requirement 3 (anomaly detection) │ ├── model_evaluation.py # Requirement 4 (consolidated report) │ └── risk_scoring.py # Requirement 6 (risk scoring engine) ├── dashboard/ │ └── app.py # Requirement 5 + 6 (Streamlit dashboard) ├── models/ # saved .joblib models & encoders ├── reports/ │ ├── figures/ # all EDA / evaluation PNGs │ └── metrics/ # CSV/JSON/Markdown evaluation reports ├── docs/ │ ├── ARCHITECTURE.md │ └── DEPLOYMENT.md ├── generate_synthetic_data.py # synthetic dataset generator ├── run_pipeline.py # one-command full pipeline runner ├── requirements.txt └── README.md ``` ## 3. 快速开始 ``` # 1. Clone / unzip the project, then create a virtual environment python -m venv venv source venv/bin/activate # Windows: venv\Scripts\activate # 2. Install dependencies pip install -r requirements.txt # 3. Run the full pipeline (generates data if missing, then preprocesses, # engineers features, runs EDA, trains all 7 models, scores risk) python run_pipeline.py # 4. Launch the interactive dashboard streamlit run dashboard/app.py ``` 仪表板将在 `http://localhost:8501` 打开。 ### 单独运行步骤 ``` python generate_synthetic_data.py --n_customers 3000 --n_transactions 120000 python src/data_preprocessing.py python src/feature_engineering.py python src/eda.py python src/train_supervised_models.py python src/train_anomaly_models.py python src/model_evaluation.py python src/risk_scoring.py streamlit run dashboard/app.py ``` ### 使用您自己的数据集 将 `data/raw/banking_transactions.csv` 替换为一个包含(至少) 以下列的 CSV 文件,然后运行 `python run_pipeline.py`(它会检测并重用 现有的原始文件): ``` Transaction_ID, Customer_ID, Transaction_Amount, Transaction_Type, Transaction_Date, Merchant_Category, Location, Device_Type, Account_Balance, Transaction_Status, Fraud_Label (optional) ``` 如果缺少 `Fraud_Label`,请跳过 `train_supervised_models.py` 并依赖 异常检测模型以及 `risk_scoring.py` 中基于规则的回退机制 (关于推荐的适配方案,请参阅 `docs/ARCHITECTURE.md`)。 ## 4. 数据预处理 (`src/data_preprocessing.py`) - **缺失值** —— 数值列使用按交易类型计算的中位数进行填充;类别列使用众数进行填充。 - **重复项** —— 通过 `Transaction_ID` 和整行匹配进行删除。 - **异常值** —— 对 `Transaction_Amount` 和 `Account_Balance` 进行基于 IQR 的缩尾处理 (3× IQR),并保留 `Is__Outlier` 标志作为特征,而不是删除该行(异常值通常是欺诈的*信号*,而非噪音)。 - **编码** —— 对所有类别字段进行 Label encoding(拟合后的编码器保存至 `models/label_encoders.joblib`)。 - **缩放** —— 对数值字段应用 `StandardScaler`(保存至 `models/scaler.joblib`)。 ## 5. 特征工程 (`src/feature_engineering.py`) 添加驱动模型大部分预测能力的基于行为的特征: | 特征 | 描述 | |---|---| | `Amount_Deviation_Ratio` | 交易金额 ÷ 客户历史平均值 | | `Amount_Zscore_vs_Customer` | 该笔交易偏离客户常规的标准差倍数 | | `Amount_to_Balance_Ratio` | 交易金额 ÷ 当前账户余额 | | `Minutes_Since_Last_Txn` / `Is_Rapid_Repeat_Txn` | 速度 —— 快速的重复交易是典型的欺诈信号 | | `Is_Night_Txn`, `Is_Weekend`, `Txn_Hour` | 基于时间的风险特征 | | `Is_High_Risk_Location`, `Customer_Location_Diversity` | 地理风险 | | `Is_Cash_Category` | 用于洗钱的提现 / 资金转账 / 珠宝等类别 | ## 6. EDA (`src/eda.py`) 生成 10 张图表并存入 `reports/figures/`,涵盖金额分布、 欺诈与合法交易的对比、客户行为、交易频率、 地理模式、小时/周/日时间趋势以及相关性热力图。 ## 7. 建模 ### 有监督模型 (`src/train_supervised_models.py`) Logistic Regression, Decision Tree, Random Forest, XGBoost —— 所有模型均在训练时 进行了类别平衡处理 (`class_weight="balanced"` / `scale_pos_weight`),以应对 约 1.4% 的欺诈 prevalence。混淆矩阵、ROC 曲线和特征重要性 图表被保存到 `reports/figures/`。 ### 异常检测 (`src/train_anomaly_models.py`) Isolation Forest(完整数据集),Local Outlier Factor 和 One-Class SVM (为便于处理而采用的 4 万分层抽样)。PCA 散点图可视化了 每个模型检测到的异常。 ### 为什么同时使用两者? 有监督模型在处理*已知*欺诈类型方面表现强劲,但对新型的 攻击模式视而不见。异常检测器无需标签,能够捕捉数据偏移/新兴 模式,代价是会产生更多的误报。将两者融合(见下文)可以防范 任一模型的盲区 —— 这是生产级欺诈 系统中的标准做法。 ## 8. 评估 (`src/model_evaluation.py`) **准确率被有意淡化** —— 在 1.4% 的欺诈率下,一个 每次都预测为“合法”的模型能达到约 98.6% 的准确率,但 抓不到任何欺诈。报告和仪表板转而将重点放在 **Precision, Recall, F1 和 ROC-AUC** 上。完整指标请见:`reports/metrics/model_evaluation_report.md`。 ## 9. 风险评分 (`src/risk_scoring.py`) ``` Risk Score = 0.6 × scaled(fraud_probability) + 0.4 × scaled(anomaly_score) ``` | 风险评分 | 等级 | |---|---| | 0–34 | 低 | | 35–59 | 中 | | 60–79 | 高 | | 80–100 | 严重 | 客户级别的风险画像汇总了每个客户的交易级别评分。 ## 10. 仪表板 (`dashboard/app.py`) 包含四个页面,可通过侧边栏进行导航: 1. **📊 交易监控** —— KPI(总交易量、可疑交易数、高风险客户数、欺诈占比),每日交易量/欺诈趋势,风险等级分布,类型/类别交易量。 2. **🔍 异常可视化** —— 风险评分分布,欺诈概率与异常分数散点图,金额与风险散点图,小时×星期的风险热力图,地理风险条形图。 3. **⚠️ 风险分析** —— 高风险交易警报表(可下载 CSV),客户风险画像浏览器,单笔交易的欺诈概率仪表盘。 4. **⚡ 实时模拟** —— 通过实时加载的模型,配合进度条和即时警报,逐一传输采样的交易流,模拟生产环境中的监控数据流。 侧边栏中的所有过滤器(日期范围、风险等级、地点、商户类别)均在所有页面上全局生效。 ## 11. 部署方式 详情请参阅 `docs/DEPLOYMENT.md`。摘要如下: - **Streamlit Community Cloud**(最快路径):将此代码库推送到 GitHub,在 share.streamlit.io 进行连接,将应用入口设置为 `dashboard/app.py`。免费额度已足够用于演示/作品集部署。 - **Docker + 任意云 VM / ECS / Cloud Run**:`docs/DEPLOYMENT.md` 中提供了 `Dockerfile` 模式,用于在您自己的域名和身份验证层之后进行容器化部署。 - **Flask API 替代方案**:对于需要无头评分 API(而不是仪表板)来替代或配合 Streamlit 的团队,可以将 `src/risk_scoring.py` 的评分逻辑封装在 Flask 的 `/score` endpoint 中 —— `docs/DEPLOYMENT.md` 中包含了一个入门级的代码片段。 对于真实的银行业务场景,交易数据和模型工件必须置于 身份验证、静态/传输加密以及审计日志的保护之下 —— 本项目 文件夹只是一个功能性原型,而非符合合规性要求的系统(参见未来 改进)。 ## 12. 未来改进 - **实时流数据摄取** (Kafka / AWS Kinesis),取代批量 CSV 评分,使得风险评分在交易发布的瞬间即可更新。 - **基于图的特征** —— 对账户间的资金流进行建模(例如使用 NetworkX 或图数据库),以捕获单笔交易特征无法发现的 结构化/分层欺诈团伙。 - **模型监控与漂移检测** —— 随时间推移追踪特征和预测漂移,并触发自动重新训练。 - **SHAP 可解释性** —— 附加单笔交易的 SHAP 值,让欺诈分析师了解交易*为什么*被标记,而不仅仅是看分数。 - **反馈循环** —— 让分析师将警报标记为真/假阳性,并将其反馈到定期的模型重新训练中。 - **仪表板上的身份验证与 RBAC**,以及用于生产级银行部署的加密和 PII 掩码。 - **A/B 测试框架**,用于在推广更改之前比较风险评分的混合权重。 ## 13. 技术栈 Python · Pandas · NumPy · Scikit-learn · XGBoost · Matplotlib · Seaborn · Plotly · Streamlit · Joblib
标签:Apex, Kubernetes, Streamlit, XGBoost, 反欺诈检测, 异常检测, 机器学习, 访问控制, 逆向工具, 金融科技