hadiyahasan13/projectModelEngineering

GitHub: hadiyahasan13/projectModelEngineering

基于 Random Forest 和 XGBoost 对高度不平衡的信用卡交易数据进行欺诈检测,通过系统比较多种重采样策略和超参数调优方案,在欺诈类上实现 F1 达 0.98 的检测效果。

Stars: 0 | Forks: 0

# 项目模型工程 # 🔍 信用卡欺诈检测 — 模型工程 **课程:** 模型工程 | 数据科学硕士,IU 国际应用科学大学 **作者:** Hadiya Hasan | [GitHub: hadiyahasan13](https://github.com/hadiyahasan13) **提交日期:** 2025 年 4 月 ## 概述 本项目旨在解决金融数据科学中最关键的挑战之一:**在高度不平衡的数据集中检测欺诈性信用卡交易**。使用 ULB 信用卡欺诈检测数据集(284,807 笔交易,欺诈仅占 0.172%),本案例研究在多种重采样策略和超参数调优配置下,实现、优化并比较了两种机器学习分类器——**Random Forest** 和 **XGBoost**。 本项目重点关注现实世界中的约束条件:类别不平衡、旨在防止数据泄露的 Pipeline 设计,以及在欺诈检测中真正重要的评估指标(Precision、Recall、F1-Score)。 ## 核心结果 | 模型 | 配置 | Precision | Recall | F1-Score | |---|---|---|---|---| | Random Forest | 基线 | 0.87 | 0.76 | 0.81 | | Random Forest | + 超参数调优 | 0.94 | 0.77 | 0.85 | | **Random Forest** | **+ 随机欠采样 (RUS)** | **1.00** | **0.97** | **0.98** | | Random Forest | + SMOTE | 0.80 | 0.82 | 0.81 | | XGBoost | 基线 | 0.94 | 0.78 | 0.85 | | XGBoost | + 超参数调优 | 0.95 | 0.78 | 0.86 | | XGBoost | + SMOTE | 0.79 | 0.83 | 0.81 | ## 数据集 - **来源:** [Kaggle — ULB 信用卡欺诈检测](https://www.kaggle.com/datasets/mlg-ulb/creditcardfraud) - **规模:** 2 天内的 284,807 笔交易(2013 年 9 月,欧洲持卡人) - **特征:** 28 个 PCA 转换后的特征(V1–V28)+ `Time`、`Amount`、`Class` - **类别不平衡:** 492 个欺诈案例(0.172%)对比 284,315 笔合法交易 ## 方法论 ### 数据预处理 - 检查并确认无缺失值 - 移除重复行 - 使用 `StandardScaler` 对 `Amount` 列进行标准化 - 删除 `Time` 列(与欺诈类别无预测相关性) ### 处理类别不平衡 在两种分类器中比较了以下两种策略: - **随机欠采样 (RUS):** 减少多数类以匹配少数类。在交叉验证折叠内部应用以防止数据泄露。与 Random Forest 结合使用。 - **SMOTE (合成少数类过采样技术):** 通过插值生成合成欺诈样本。同时与 Random Forest 和 XGBoost 结合使用以进行比较。 ### 交叉验证 - 全程使用**分层 5 折交叉验证 (Stratified 5-Fold Cross-Validation)** — 确保在每个折叠中保持类别比例,这对于不平衡数据至关重要。 ### 超参数优化 - 两种模型均使用 **RandomizedSearchCV**(10 次迭代)— 在有效探索广泛参数空间的同时,比网格搜索更快。 - 调优的参数:`n_estimators`、`max_depth`、`min_samples_split`、`min_samples_leaf` (Random Forest);`learning_rate`、`subsample`、`colsample_bytree` (XGBoost)。 ### Pipeline 所有预处理(重采样)和模型训练步骤均封装在 `imblearn.pipeline.Pipeline` 中,以确保: - 训练集和验证集之间无数据泄露 - 交叉验证折叠间的可复现性 - 简洁、模块化的代码结构 实现了三个 Pipeline: ``` Pipeline A: RandomUnderSampler → RandomForestClassifier Pipeline B: SMOTE → RandomForestClassifier Pipeline C: SMOTE → XGBClassifier ``` 全部使用 `RandomizedSearchCV` 封装,实现端到端的超参数调优。 ## 模型 ### Random Forest 基于 Bootstrap 样本训练的决策树集成。隐式处理特征选择,与重采样配合使用时对类别不平衡具有鲁棒性。与 RUS 结合使用时取得了最佳的欺诈检测性能(F1 = 0.98),但由于激进的欠采样,存在过拟合的风险。 ### XGBoost 具有内置正则化的梯度提升决策树。非常适合大型、不平衡的数据集。与 SMOTE 结合使用时,达到了比 RF+SMOTE 更高的 Recall(0.83),且训练时间更短——使其在实际部署中更具实用性。 ## 评估指标 对于不平衡数据集,标准的准确率具有误导性。本项目使用: - **Precision** — 在所有被标记为欺诈的交易中,有多少是真正的欺诈? - **Recall** — 在所有实际的欺诈中,模型捕获了多少? - **F1-Score** — Precision 和 Recall 的调和平均值;这是此项目的主要指标。 在欺诈检测中,Recall 尤为重要——漏掉一个欺诈(假阴性)通常比误报(假阳性)的代价更高。 ## 技术栈 | 工具 | 用途 | |---|---| | Python | 核心语言 | | scikit-learn | ML 模型、Pipeline、交叉验证、指标 | | imbalanced-learn | SMOTE、RandomUnderSampler、ImbPipeline | | XGBoost | XGBClassifier | | pandas / numpy | 数据处理 | | matplotlib / seaborn | 可视化 | | Jupyter Notebook | 开发环境 | ## 仓库结构 ``` projectModelEngineering/ │ ├── modelengg.ipynb # Full notebook: EDA, preprocessing, RF + XGBoost experiments ├── rf.ipynb # Focused Random Forest implementation with RUS and SMOTE └── README.md ``` ## 核心要点 - 在进行重采样时,**Pipeline 设计是不可妥协的** — 在划分数据前应用 SMOTE 会导致数据泄露和虚高的指标。 - **Stratified K-Fold** 对于不平衡分类至关重要;标准的 K-Fold 可能会产生完全没有欺诈样本的折叠。 - **随机欠采样 + Random Forest** 取得了最佳的欺诈 Recall,但存在过拟合的风险;分层交叉验证可缓解此问题。 - **SMOTE + XGBoost** 是更接近生产环境的组合 — 性能均衡、训练更快且泛化能力更好。 - “正确”的模型取决于部署环境:如果假阴性的代价非常高(实时欺诈预防),则应最大化 Recall。如果假阳性的代价很高(客户体验),则应最大化 Precision。
标签:Apex, BSD, F1-Score, IU应用科学大学, Kaggle数据集, NoSQL, PCA降维, Python, Random Forest, RUS, SMOTE, XGBoost, 不平衡学习, 二分类, 信用卡欺诈检测, 分类模型, 召回率, 异常检测, 数据挖掘, 数据泄露防护, 数据科学, 数据科学硕士, 数据预处理, 无后门, 机器学习, 模型工程, 欠采样, 精准率, 网络探测, 资源验证, 超参数调优, 过采样, 逆向工具, 金融风控, 随机森林, 随机欠采样, 预测模型, 风控算法