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, 不平衡数据处理, 二分类, 信用卡欺诈检测, 反欺诈, 异常检测, 数据科学, 数据管道, 无后门, 机器学习, 模型评估, 深度学习, 特征工程, 监督学习, 神经网络, 资源验证, 软件工程, 逆向工具, 逻辑回归, 金融风控, 随机森林