isamaliya16/credit-fraud-detection-supervised-learning
GitHub: isamaliya16/credit-fraud-detection-supervised-learning
基于监督学习算法构建的信用卡欺诈检测系统,针对极端类别不平衡数据集提供完整的模型训练、阈值优化与业务成本效益分析流水线。
Stars: 0 | Forks: 0

[](#) [](#) [](#) [](#)
      
## 🎬 视频演示
[](https://drive.google.com/file/d/150itvJmGsxarcgh0zWCcIcss0Uf7hHXQ/view?usp=sharing)
🎥 项目的完整端到端视频讲解 —— 涵盖探索性数据分析 (EDA)、特征工程、类别不平衡处理(SMOTE、欠采样和类别权重)、Logistic Regression、Random Forest 和 XGBoost 模型构建、超参数调优、PR-AUC 评估、阈值优化、商业成本效益分析,以及信用卡欺诈检测系统的最终部署建议。
## 🧠 这是什么项目?
本项目在真实的 Kaggle 信用卡欺诈数据集上构建了一个完整的、生产级的**欺诈检测 pipeline** —— 这是工业界 ML 中最极端的类别不平衡基准测试之一。重点不仅限于构建模型:它还展示了**阈值优化**、**成本效益分析**以及对结果的清晰业务沟通。
```
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
284,807 Total Transactions
─────────────────────────────────────────────────
99.83% Legitimate ███████████████████████████░
0.17% Fraud ░░░░░░░░░░░░░░░░░░░░░░░░░░░
─────────────────────────────────────────────────
Most extreme imbalance benchmark in industry ML
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
```
## 🎯 学习目标
| ### 📐 核心 ML 概念 - 为什么在欺诈检测中**准确率是一个具有误导性的指标** - **Precision-Recall 权衡**和混淆矩阵分析 - **PR-AUC vs ROC-AUC** —— 哪一个更适合极端不平衡情况 - 超越默认 0.5 截断点的**阈值调优** | ### 🏢 业务技能 - 为模型错误分配**真实货币价值** - 使用混淆矩阵输出进行**成本效益分析** - 向**非技术背景的风险经理**传达结果 - 理解什么时候**业务最优 ≠ F1最优** |
## 🗺️ 完整项目 Pipeline
| 步骤 | 重点 | 关键交付物 |
|:---:|:---|:---|
| 🧩 **第 1 步** | 理论与问题定义 | 5 个 Markdown 单元格,解释准确率失效、PR 权衡、不平衡处理策略、PR-AUC 以及 FP 和 FN 的业务影响 |
| 📊 **第 2 步** | 数据集加载与 EDA | 4 个图表:类别分布、Amount 分布、Time/Hour 分析、V1–V10 相关性热力图 |
| 🔧 **第 3 步** | 预处理与特征工程 | Amount_log、Hour 提取、StandardScaler、训练集与测试集划分、3 种不平衡处理策略 |
| 🤖 **第 4 步** | Logistic Regression 与 Random Forest | LR × 3 种变体比较、带有 PR 曲线和特征重要性的 RF |
| ⚡ **第 5 步** | XGBoost —— 完整调优 | 基础模型 → RandomizedSearchCV → 阈值优化(F1最优 + Recall≥0.90) |
| 📈 **第 6 步** | 最终模型比较 | 6 行对比表、所有 PR 曲线汇总至一张图、部署建议 |
| 💰 **第 7 步** | 业务成本效益 | 带有 INR 价值的阈值敏感性表、净收益分析 |
| 🚀 **第 8 步** | Pipeline 与部署 | sklearn Pipeline → joblib 保存 → 加载并对 10 笔交易进行测试 |
## 📊 核心结果一览
|
### 🏆 最佳模型
**XGBoost (调优后)**
RandomizedSearchCV 优化 |
### 🎯 F1-Score
**0.9375**
在最优阈值 0.644 下 |
### 📐 PR-AUC
**0.9297**
对比 LR 基线 0.813 |
### ✅ Precision
**1.0000**
零误报标记 |
## 📈 模型对比表
| 模型 | 阈值 | Precision | Recall | F1-Score | PR-AUC |
|:---|:---:|:---:|:---:|:---:|:---:|
| Logistic Regression (SMOTE) | 0.50 | 0.309 | 1.000 | 0.472 | 0.813 |
| Random Forest (SMOTE) | 0.50 | 0.933 | 0.824 | 0.875 | 0.875 |
| XGBoost 基础模型 | 0.50 | 1.000 | 0.824 | 0.903 | 0.897 |
| XGBoost 调优后 | 0.50 | 1.000 | 0.882 | 0.938 | 0.930 |
| **XGBoost 调优后 (F1最优)** | **0.644** | **1.000** | **0.882** | **0.938** | **0.930** |
| XGBoost 调优后 (Recall≥0.90) | 0.007 | 0.457 | 0.941 | 0.615 | 0.930 |
## 💰 成本效益分析
|
### 💚 挽回金额
**₹67,500**
15 起欺诈案件 × ₹4,500 |
### 🔵 调查成本
**₹2,250**
15 笔标记交易 × ₹150 |
### 💛 净收益
**₹65,250**
每 10,000 笔交易 |
| 阈值 | TP | FP | FN | 挽回金额 | 调查成本 | 损失金额 | 净收益 |
|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|
| 0.10 | 15 | 3 | 2 | ₹67,500 | ₹2,700 | ₹9,000 | ₹64,800 |
| 0.20 | 15 | 2 | 2 | ₹67,500 | ₹2,550 | ₹9,000 | ₹64,950 |
| 0.30 | 15 | 1 | 2 | ₹67,500 | ₹2,400 | ₹9,000 | ₹65,100 |
| 0.50 | 15 | 0 | 2 | ₹67,500 | ₹2,250 | ₹9,000 | ₹65,250 |
| **0.644 (F1最优)** | **15** | **0** | **2** | **₹67,500** | **₹2,250** | **₹9,000** | **₹65,250** |
## 🧪 涵盖的理论
📖 点击展开 —— 第 1 步的的理论笔记
**为什么准确率在欺诈检测中会失效** - 一个将所有交易预测为合法的模型可以获得 99.83% 的准确率 —— 但它抓不到任何欺诈 - 欺诈类别的 Precision 和 Recall 均为 0 —— 尽管准确率很高,但该模型完全无用 - PR-AUC 和 F1-Score 必须取代准确率作为主要评估指标 **Precision-Recall 权衡** - 降低阈值(0.5 → 0.2)会将更多交易标记为欺诈 —— Recall 上升,Precision 下降 - 提高阈值会减少标记数量 —— Precision 改善,但会漏掉更多真实的欺诈 - 最优阈值取决于每种错误类型的业务成本 **三种不平衡处理策略** - **Class Weights(类别权重):** 简单,不修改数据 —— 但模型看到的欺诈样本仍然很少 - **SMOTE:** 生成合成欺诈样本 —— 为模型提供更多样化的欺诈模式进行学习 - **Undersampling(欠采样):** 移除多数类行 —— 速度快,但会丢失信息 **PR-AUC vs ROC-AUC** - 在极端不平衡的情况下,ROC-AUC 会被大量的 True Negatives 抬高 - PR-AUC 完全关注少数类 —— 无法通过将所有样本预测为合法来作弊 **False Positive vs False Negative 的业务影响** - FP = 合法客户被拦截 → ₹150 调查成本 + 客户不满 - FN = 漏掉欺诈 → 损失全部交易金额(平均 ₹4,500)+ 拒付(chargeback)+ 监管风险 - **False Negatives 的代价要高昂得多** → Recall 是优先考虑的指标
## ⚖️ 不平衡处理策略详解
|
### 🏋️ Class Weights
告诉模型欺诈 = 重要 580 倍
✅ 不修改数据 ❌ 模型看到的欺诈样本仍然很少 |
### 🧬 SMOTE
生成合成欺诈样本
✅ 模型能学习更多欺诈模式 ❌ 合成数据 ≠ 真实欺诈 |
### ✂️ Undersampling
移除多数类行
✅ 快速且简单 ❌ 丢弃了真实信息 |
**针对此数据集的赢家:SMOTE** 在 Logistic Regression 中提供了最佳的 F1-Score 和 PR-AUC。
## 🔍 EDA 关键发现
| 分析内容 | 发现 |
|---|---|
| 📊 类别分布 | 99.83% 为合法 vs 0.17% 为欺诈 —— 必须使用对数刻度进行可视化 |
| 💵 交易金额 | 欺诈分布范围很广 —— 并非都是小额交易;需要进行对数转换 |
| 🕒 一天中的时间段 | 欺诈集中在深夜 / 凌晨时段(0–4 AM) |
| 🔗 V 特征相关性 | V10、V7、V3 与欺诈的相关性最高;V8 和 V6 几乎不相关 |
| 🌳 特征重要性 (RF) | V14 最重要 (20%),其次是 V10、V17、V12V11 |
## 🚀 部署细节
| 组件 | 详情 |
|---|---|
| 📦 Pipeline | 封装了 StandardScaler + XGBoost 调优模型的 sklearn Pipeline |
| 💾 保存的模型 | fraud_detection_model.pkl —— 通过 joblib 序列化 |
| 🎯 最优阈值 | 0.644 (F1最优) —— 与 pipeline 存储在一起 |
| 🧪 测试对象 | 从 pickle 加载的 10 笔样本交易 —— 已验证预测结果 |
| 📋 输入特征 | V1–V28 (PCA), Amount_log (对数转换), Hour (从 Time 提取) |
## 📁 仓库结构 ``` credit-fraud-detection-supervised-learning/ │ ├── 📓 FraudDetection_SupervisedLearning.ipynb ← Fully executed notebook (91 cells) ├── 🤖 fraud_detection_model.pkl ← Saved sklearn Pipeline ├── 📄 summary_report.md ← Business summary (~400 words) ├── 📋 requirements.txt ← All dependencies └── 📖 README.md ← This file ```
## 📦 环境依赖 ``` pandas numpy matplotlib seaborn scikit-learn imbalanced-learn xgboost joblib jupyter ```
## 👨💻 作者
### **Ayush Isamaliya**
*Data Science 与有抱负的 ML 工程师*
[](https://github.com/isamaliya16)
[](https://www.linkedin.com/in/ayush-isamaliya-686533312/)

**作为 Red & White Skill Education 的 Python Data Science 学习路线的一部分而构建**
*用 ❤️ 制作 | 欺诈检测 —— 实操考试 C 卷 | 不平衡分类 | FinTech 分析*
标签:Apex, Scikit-Learn, XGBoost, 不平衡分类, 信用卡欺诈检测, 数据科学, 机器学习, 资源验证, 逆向工具