Abhishekthreddy/Real-Time-Fraud-Detection

GitHub: Abhishekthreddy/Real-Time-Fraud-Detection

端到端信用卡欺诈检测机器学习 pipeline,针对极端不平衡数据完成从 EDA、特征工程、SMOTE、多模型对比到 XGBoost 训练评估的完整流程。

Stars: 0 | Forks: 0

# 实时欺诈检测 Pipeline 一个用于检测信用卡欺诈交易的端到端机器学习 pipeline,基于高度不平衡的数据集(欺诈比例 0.17%)。该项目涵盖探索性数据分析、具备时间感知的特征工程、使用 SMOTE 进行类别平衡,以及使用 **AUC-PR**(针对极端类别不平衡的合适指标)进行模型评估。 ## 数据集 [信用卡欺诈检测数据集](https://www.kaggle.com/mlg-ulb/creditcardfraud) (`data/creditcard.csv`): - **284,807** 笔交易,时间跨度为 **48 小时**,其中 **492** 笔欺诈(0.173%) - `Time` — 距第一笔交易过去的秒数 - `V1`–`V28` — 匿名化的 PCA 组件 - `Amount` — 交易金额 - `Class` — 目标变量(0 = 正常,1 = 欺诈) ## 项目结构 ``` fraud_detection/ ├── data/ │ └── creditcard.csv # raw dataset ├── src/ │ ├── eda.py # exploratory data analysis │ ├── feature_engineering.py # feature engineering + temporal split + SMOTE │ ├── evaluate_auc_pr.py # 3-model AUC-PR comparison │ ├── train_xgboost.py # train + persist the XGBoost model │ └── test_xgboost.py # score the saved model on the test set ├── processed/ # generated: train.csv, val.csv, test.csv ├── models/ # generated: xgboost_model.json + metadata ├── plots/ # generated: EDA + evaluation figures ├── requirements.txt └── README.md ``` ## 配置 ``` # 创建并激活本地 virtual environment python -m venv .venv .venv\Scripts\activate # Windows (PowerShell/CMD) # source .venv/bin/activate # macOS / Linux pip install -r requirements.txt ``` ## 用法 **从项目根目录**运行每个阶段(脚本使用相对于根目录的路径): ``` python src/eda.py # 1. exploratory analysis -> plots/ python src/feature_engineering.py # 2. features + splits -> processed/ python src/evaluate_auc_pr.py # 3. 3-model comparison -> plots/ python src/train_xgboost.py # 4. train + save XGBoost -> models/ python src/test_xgboost.py # 5. final test evaluation -> plots/ ``` ## 目前进度 ### 1. 探索性数据分析 — `src/eda.py` 五步 EDA,所有图表均保存至 `plots/`: | 步骤 | 发现 | |------|---------| | 基本结构与类型 | 284,807 行 × 31 列,**零缺失值**,除 `Class` 外均为 float64 | | 类别不平衡 | 492 笔欺诈 vs 284,315 笔正常 — 每 **578** 笔交易中有 **1** 笔欺诈 | | 金额分析 | 欺诈金额中位数 **\$9.25** vs 正常 \$22;分布存在差异(Mann-Whitney p ≈ 8.6e-6) | | 时间分析 | 数据跨度恰好为 **48 小时**;欺诈高峰在 **第 19 小时**左右 | | V1–V28 概览 | 最具区分度的特征:**V3, V14, V17, V12, V10** | ### 2. 特征工程与数据集拆分 — `src/feature_engineering.py` 新增了三个工程特征: - **`hour_of_day`** = `(Time % 86400) / 3600` — 捕捉日周期 - **`time_delta`** = 距离上一笔交易的间隔秒数 - **`log_amount`** = `log1p(Amount)` — 压缩沉重的右尾 **时间序列拆分**(按 `Time` 排序,无打乱 — 防止数据泄露): | 拆分 | 行数 | 时间范围 | 欺诈 | |-------|------|------------|-------| | 训练集 | 213,605 | 0 – 38.7 h | 398 (0.186%) | | 验证集 | 42,721 | 38.7 – 43.8 h | 72 (0.169%) | | 测试集 | 28,481 | 43.8 – 48.0 h | 22 (0.077%) | 验证了无时间重叠:`train.max < val.min < val.max < test.min`。 **仅对训练集应用 SMOTE**(验证集/测试集保持自然的不平衡状态以反映真实生产环境):训练集欺诈样本从 398 过采样至 213,207 (1:1)。 输出保存至 `processed/train.csv`、`val.csv`、`test.csv`。 ### 3. AUC-PR 评估 — `src/evaluate_auc_pr.py` 在经过 SMOTE 处理的训练集上训练了三个基线模型,并在验证集/测试集上评分。决策阈值经过调整,以在验证集上最大化 F1 分数。 | 模型 | AUC-PR (验证集) | AUC-PR (测试集) | 欺诈准确率 (测试集) | 欺诈召回率 (测试集) | |-------|:---:|:---:|:---:|:---:| | 逻辑回归 | 0.8428 | 0.6483 | 0.762 | 0.727 | | 随机森林 | 0.8306 | 0.7186 | 0.800 | 0.727 | | **XGBoost** | 0.8292 | **0.7409** | **0.842** | 0.727 | 随机基线(测试集)≈ 0.0008,因此所有模型都远高于随机猜测。 **XGBoost 泛化能力最佳**(在预留的未来时间段上测试准确率和 AUC-PR 最高)。PR 曲线、AUC-PR 柱状图和混淆矩阵已保存至 `plots/auc_pr_evaluation.png`。 ### 4. XGBoost 训练 — `src/train_xgboost.py` 在经过 SMOTE 平衡的训练集上重新训练 XGBoost,并使用验证集进行基于 AUC-PR 的**早停**(由于 SMOTE 已经平衡了标签,因此 `scale_pos_weight=1`)。 - **最佳迭代次数:** 250(最大 500)— 触发早停 - **验证集 AUC-PR:** 0.8288 - **决策阈值**(验证集上最大化 F1):**0.9793** - 在该阈值下:欺诈的**准确率为 98.2% / 召回率为 76.4%**(捕获 55/72,1 次误报) 基于增益重要性的顶级特征:**V14 (0.62)**、V10、V12、V4、V17 — 此外,工程特征 `time_delta` 和 `hour_of_day` 位列前十,证实了它们能增加有效信号。模型及元数据已持久化保存至 `models/xgboost_model.json` 和 `models/xgboost_meta.json`。 ### 5. 最终测试集评估 — `src/test_xgboost.py` 加载已保存的模型,并在预留的测试集(时间上最后的 10%,训练期间从未见过)上以存储的 0.9793 阈值评估**一次**。 | 指标 | 数值 | |--------|:---:| | **AUC-PR** | **0.7370** | | ROC-AUC | 0.9575 | | 欺诈准确率 | 0.889 | | 欺诈召回率 | 0.727 | | | 预测为正常 | 预测为欺诈 | |----------------|:---:|:---:| | **真实正常** | 28,457 | 2 (误报) | | **真实欺诈** | 6 (漏报) | 16 (查获) | **22 笔欺诈中查获了 16 笔,仅有 2 次误报。** 验证集到测试集的 AUC-PR 下降(0.829 → 0.737)是时间序列拆分的预期且真实代价 — 模型是在其从未观察到的未来时期进行评判的。结果与之前的对比运行(0.741)一致,仅有早停带来的微小差异。图表已保存至 `plots/xgboost_test_evaluation.png`。 ## 下一步计划 - 树模型的超参数调优 - 基于业务成本(漏报欺诈与误报的成本对比)的阈值选择 - 使用 SHAP 分析顶级 V 特征的模型可解释性 - 将最佳模型封装为实时评分 API
标签:Apex, SMOTE, XGBoost, 数据科学, 机器学习, 欺诈检测, 特征工程, 资源验证, 逆向工具