pnehete23/credit-card-fraud-detection
GitHub: pnehete23/credit-card-fraud-detection
基于 CRISP-DM 方法论的信用卡欺诈检测端到端 ML/DL Pipeline,在极端类别不平衡场景下实现 77.6% 召回率和 0.007% 误报率。
Stars: 0 | Forks: 0
# 信用卡欺诈检测 — 端到端 ML/DL Pipeline
**团队:** Nadezhda Shiroglazova, Prathamesh Nehete, Sheng Hu
**课程:** MSDS 422 — 实用机器学习 (Practical Machine Learning)
**日期:** 2026年2月
**方法论:** CRISP-DM
## 问题陈述
信用卡欺诈每年在全球范围内造成数十亿美元的损失。本项目旨在针对一个高度不平衡的数据集(欺诈率为 0.172%)构建自动化的实时欺诈检测 Pipeline,重点关注切合实际的评估协议和面向业务的建议。
**答案:** 是的 — XGBoost 捕获了 77.6% 的欺诈行为,同时对合法交易产生的误报率仅为 0.007%,在每年 1000 万笔交易的业务量下,预计每年可带来约 484 万美元的净收益。
## 数据集
**Kaggle 信用卡欺诈检测数据集**
- 来自欧洲持卡人的 284,807 笔交易(2013年9月,2天)
- 492 笔欺诈交易(0.172% — 极端的类别不平衡)
- 28 个 PCA 转换后的匿名特征 (V1–V28) + `Time` + `Amount`
- 下载地址:https://www.kaggle.com/datasets/mlg-ulb/creditcardfraud
## 实施的模型
| # | 模型 | 类型 | 不平衡策略 | 调优方法 |
|---|-------|------|--------------------|---------------|
| 1 | Logistic Regression | 线性基线 | `class_weight='balanced'` | GridSearchCV (5折, 24组参数) |
| 2 | Random Forest | 集成 (Bagging) | `class_weight='balanced'` | RandomizedSearchCV (5折, 20次迭代) |
| 3 | XGBoost | 集成 (Boosting) | `scale_pos_weight ≈ 577` | RandomizedSearchCV (5折, 20次迭代) |
| 4 | Neural Network (BCE) | Deep Learning | `class_weight={0:1, 1:50}` | 验证集 PR-AUC 早停 |
| 5 | Neural Network (Focal) | Deep Learning | Focal Loss γ=2, α=0.65 | 验证集 PR-AUC 早停 |
## 最佳模型结果
**XGBoost** — 根据验证集 PR-AUC (0.8072) 选出,并在留出测试集上确认:
| 指标 | 验证集 | 测试集 |
|--------|-----------|----------|
| PR-AUC (主要) | 0.8072 | **0.8823** |
| F1-Score | 0.8372 | 0.8539 |
| Recall (捕获的欺诈) | 73.5% | **77.6% (76/98)** |
| Precision | 97.3% | 95.0% |
| ROC-AUC | 0.9737 | 0.9809 |
| MCC | 0.8453 | 0.8581 |
| 误报率 | — | **0.007%** 的合法交易 |
| 决策阈值 | — | 0.988 |
**为什么选择 XGBoost 而非其他方案:**
- 最高的 PR-AUC,且 CV 到验证集的差距最小 (0.055)
- 推理速度 < 1 毫秒/笔交易(可实时部署)
- 训练速度比 Random Forest 快 9 倍 (83秒 vs 727秒)
- 支持 SHAP 可解释性,满足监管合规要求
## Notebook 结构
分析包含在一个 Jupyter notebook (`CreditCard_Fraud_Final_v2.ipynb`) 中,组织结构如下:
| 章节 | 内容 |
|---------|---------|
| **Executive Summary (执行摘要)** | 管理层关注的结果、最佳模型、核心收益、建议 |
| **Problem Statement (问题陈述)** | 研究问题、数据集描述、4 个具体目标 |
| **Literature Review (文献综述)** | 6 篇关于欺诈检测、类别不平衡、树模型/DL 方法的论文 |
| **1. Setup & Data Loading** | `kagglehub` 下载,初始形状/dtype 检查 |
| **Tooling & Environment** | Python 3.11,库版本,CPU 硬件,可复现性 |
| **2. Initial EDA** | 类别分布,Amount/Time 分布,偏度/峰度 |
| **3. Expanded EDA** | V 特征类别分离,相关矩阵,异常值分析,假设 |
| **4. Data Preparation** | 70/10/20 分层划分,特征工程,缩尾处理,缩放 |
| **5. Original vs Prepared** | 预处理前后的视觉对比 |
| **6. Data Leakage Checklist** | 9 点核查,确保无泄漏 |
| **7. Data Ready** | 最终数据集形状和预处理摘要 |
| **8. Baseline Model** | Dummy classifier 证明准确率无意义 (99.83%,零欺诈捕获) |
| **9. Random Forest** | RandomizedSearchCV,5 折 CV,验证集评估 |
| **10. Logistic Regression** | GridSearchCV,5 折 CV,正则化敏感性 |
| **11. XGBoost** | RandomizedSearchCV,5 折 CV,CV 过拟合分析 |
| **12. Neural Network** | BCE vs Focal Loss 对比,架构搜索,早停 |
| **13. Model Comparison** | 多指标条形图,PR 曲线,precision-recall 散点图,CV-val 差距表 |
| **→ CSV Export** | 用于 Power BI 的 `model_comparison.csv` (验证集 + 测试集 + 每折 CV 行) |
| **14. Final Test Evaluation** | 对 XGBoost 的单次留出测试集评估 |
| **15. Findings & Conclusions** | 关键发现,业务影响 ($4.84M/年),过拟合分析,部署策略 |
| **Lessons Learned** | 6 条方法论教训,后续步骤,第三方数据集建议 |
| **References** | 10 条芝加哥格式引用 |
## 特征工程
从两个可解释的原始特征(`Time`, `Amount`)中设计了六个新特征。V1–V28 保持原样(已通过 PCA 标准化):
| 特征 | 公式 | 理由 |
|---------|---------|-----------|
| `Hour_Sin` | sin(2π × hour / 24) | 周期性时间编码 — 23 点 ≈ 0 点 |
| `Hour_Cos` | cos(2π × hour / 24) | 周期性时间编码(正交分量) |
| `Is_Night` | 1 if 23:00–06:00 | 欺诈集中在非高峰时段 |
| `Log_Amount` | log1p(Amount) | 减少极端右偏(偏度 16) |
| `Amount_Bin_Small` | 1 if Amount ≤ €5 | 捕获用于测试卡片的微额交易 |
| `Amount_Bin_Large` | 1 if Amount > €500 | 标记异常大额交易 |
**预处理 Pipeline:**
1. 70/10/20 分层划分(在任何转换之前)
2. 特征工程(逐元素,无需拟合)
3. `Amount` 的缩尾处理(仅基于训练数据的 0.1th–99.9th 百分位截断)
4. 对 `Amount`, `Time`, `Log_Amount` 进行 `RobustScaler` 缩放(仅在训练集上拟合)
5. V1–V28:不缩放(已 PCA 标准化且正交)
## 评估协议
- **主要指标:** PR-AUC (Average Precision) — 0.172% 的欺诈率使得准确率和 ROC-AUC 具有误导性的乐观
- **次要指标:** F1-Score, Recall, Precision, MCC, ROC-AUC
- **阈值:** 在验证集上优化(最大化 F1);操作上由成本矩阵设定
- **CV 策略:** StratifiedKFold (5 折),在每折中保持 0.172% 的欺诈率
- **测试集:** 全程留出;仅对最终选定的模型进行一次评估
## 工具、环境与硬件
| 组件 | 详情 |
|-----------|--------|
| 语言 | Python 3.11 |
| 环境 | Jupyter Notebook (Anaconda) |
| 数据加载 | `kagglehub` (自动下载数据集) |
| ML 库 | scikit-learn 1.4 |
| Boosting | XGBoost 2.0 |
| Deep learning | TensorFlow / Keras 2.15 |
| 数据 | NumPy 1.26, Pandas 2.1 |
| 可视化 | Matplotlib 3.8, Seaborn 0.13 |
| 硬件 | 本地 CPU (无需 GPU) |
| 随机种子 | 全程 `random_state=42` |
## 项目结构
```
├── CreditCard_Fraud_Final_v2.ipynb # Full end-to-end notebook (EDA → modeling → conclusions)
├── model_comparison.csv # Power BI export: validation + test + CV per-fold metrics
├── fraud_model_dashboard.html # Standalone interactive dashboard (open in any browser)
├── README.md # This file
└── creditcard.csv # Dataset (auto-downloaded via kagglehub, or place here)
```
## 快速开始
```
# 安装依赖项
pip install kagglehub pandas numpy matplotlib seaborn scikit-learn xgboost tensorflow
# 打开 notebook
jupyter notebook CreditCard_Fraud_Final_v2.ipynb
# 运行所有单元格(数据集通过 kagglehub 自动下载)
# 总运行时间:CPU 上约 20–30 分钟(RF search 是瓶颈,约需 12 分钟)
# 在浏览器中打开 fraud_model_dashboard.html 查看交互式 dashboard
```
## 关键发现
1. **XGBoost 是推荐的生产模型** — 最佳 PR-AUC,最小泛化差距,训练最快,支持 SHAP 可解释性
2. **准确率作为 KPI 具有积极危险性** — dummy baseline 得分为 99.83% 却捕获了零欺诈
3. **PR-AUC 必须作为主要指标** — ROC-AUC 在 0.172% 欺诈率下误导性地乐观;我们的 Logistic Regression ROC-AUC 为 0.966,但 PR-AUC 最差 (0.665)
4. **V14, V17, V12, V10, V3** 是主要的欺诈判别因子(类别分离度 > 2σ)
5. **决策阈值至关重要** — XGBoost 的最佳阈值是 0.988,而不是默认的 0.5
6. **预计年度净收益** — 在 1000 万笔交易/年的业务量下约 484 万美元(77.6% recall,0.007% 误报率)
## 部署策略(摘要)
- **服务:** XGBoost 作为 REST API 微服务;每笔交易推理时间 < 1 ms
- **阈值:** 0.988(验证集优化);使用成本矩阵每季度重新校准
- **审核层级:** Level 1 自动规则 → Level 2 分析师(5 分钟,prob > 0.998)→ Level 3 软拦截(2 小时,prob 0.988–0.998)
- **监控:** 每月对 V 特征分布进行 KS 检验;每周跟踪标记率和确认率
- **重训:** 定期每季度;针对确认的新欺诈模式进行 72 小时紧急重训
## 参考文献
1. Alarfaj et al. (2022) — CNN architectures for fraud detection. *IEEE Access* 10: 39700–39715.
2. Dal Pozzolo et al. (2015) — Calibrating probability with undersampling. *IEEE SSCI*, 159–166.
3. Fariha et al. (2025) — Behavioral feature engineering for fraud detection. *IEEE Access* 13: 14872–14890.
4. Karunya et al. (2025) — Probability-based kNN for imbalanced fraud data. *IJIT* 17: 1219–1226.
5. LexisNexis Risk Solutions (2023) — *True Cost of Fraud Study*. Atlanta.
6. Marazqah Btoush et al. (2023) — Systematic review of ML/DL fraud detection. *IEEE Access* 11: 112607–112629.
7. Mienye & Jere (2024) — Deep learning approaches for fraud detection. *MAKE* 6(1): 516–537.
8. Nilson Report (2022) — Global card fraud losses. Issue 1209.
9. Popova & Gardi (2024) — Hybrid sampling strategies for fraud detection. *JFC* 31(3): 890–908.
10. Saito & Rehmsmeier (2015) — Precision-Recall vs ROC for imbalanced datasets. *PLoS ONE* 10(3): e0118432.
11. ULB Machine Learning Group & Worldline (2018) — Credit Card Fraud Detection. Kaggle. https://www.kaggle.com/datasets/mlg-ulb/creditcardfraud
标签:Apex, CRISP-DM, Focal Loss, Kaggle, MSDS 422, NoSQL, PR-AUC, Python, XGBoost, 不平衡数据处理, 二分类, 信用卡欺诈检测, 反欺诈, 异常检测, 数据科学, 数据管道, 无后门, 机器学习, 模型评估, 深度学习, 特征工程, 监督学习, 神经网络, 资源验证, 软件工程, 逆向工具, 逻辑回归, 金融风控, 随机森林