waywithin/Credit-Card-Fraud-Detection
GitHub: waywithin/Credit-Card-Fraud-Detection
基于公开信用卡交易数据集构建的多模型欺诈检测项目,通过SMOTE过采样、多种机器学习算法对比及超参数调优,最终选用XGBoost模型来识别欺诈交易。
Stars: 0 | Forks: 0
# 信用卡欺诈检测
## 项目概述
- 本项目关于欺诈检测。这很重要,因为保护用户的账户对于建立对金融机构的信任是必不可少的。
因此,我构建了一个用于预测欺诈交易的欺诈检测模型。
## 问题描述
- 金融机构需要在识别欺诈交易的同时尽量减少误报。
## 数据集信息
- 数据集中的总记录数为 284807
- 数据集中的总特征数为 31
- 在数据集中,目标变量是欺诈
- 数据集中的类别分布高度不平衡
## 探索性数据分析
- 我调查发现,欺诈类别和正常类别高度不平衡。
- 欺诈交易金额通常较小。一种可能的解释是,欺诈者可能倾向于较小的交易以避免被发现、验证卡片的有效性,或者利用人们不太容易注意到低价值的未授权扣款这一心理。
- 相关性分析显示,没有特征与目标变量(class)存在强线性关系。
- 尽管所有特征都表现出一定的关联性,但相关性的绝对值相对较低。这表明欺诈交易不能仅靠单一特征来解释。相反,分类模型必须学习多个变量之间的复杂交互,才能有效区分欺诈交易与合法交易。
- 在该数据集中,与正常交易相比,欺诈交易非常少,表明模型的数据是高度不平衡的。
## 数据预处理
- 我检查了缺失值,令人惊讶的是,该数据集不包含任何缺失值。
- 我仅对 Logistic Regression 和 KNN 模型进行了特征缩放。
- 在训练模型之前,我进行了训练集与测试集的划分。
- 我在训练数据集上应用了 SMOTE,以使数据集达到平衡。
- 在使用 SMOTE 之前,训练数据集中正常交易的总数为 227451,欺诈交易为 394。
- 使用 SMOTE 之后,训练数据集中正常交易的总数为 227451,欺诈交易也达到了 227451。
## 已训练模型
- Logistic Regression
- Decision Tree
- Random Forest
- XGBoost
- Graadient Boosting
- Adaboost
- KNN
## 模型评估
**用于评估模型性能的指标包括:**
- 准确率
- 召回率
- 精确率
- F1 score
- ROC-AUC
- 混淆矩阵
在所有这些指标中,召回率对于欺诈检测最为重要。召回率百分比的下降意味着模型产生了更多的假阴性,表明模型未能识别出更多的欺诈行为。相反,召回率百分比的提升意味着模型的假阴性减少,表明模型识别出了更多的欺诈交易。然而,我们必须在精确率和召回率之间保持平衡,因为假阳性依然很重要。
## 超参数调优
- 超参数调优是在 XGBoost 和 KNN 上进行的,因为它们具有较高的召回率,并且即使在进行超参数调优之前,也能在精确率和召回率之间保持适度的平衡。这就是为什么选择它们进行最终比较并进行进一步调优的原因。
- 曾尝试对 KNN 进行超参数调优,但由于数据集较大以及计算能力的限制,在最终比较中保留了 KNN 的基线配置。
- 我使用了 RandomizedSearchCV 进行超参数调优。
- 为了减少过拟合问题,我还对 XGBoost 和 KNN 两个模型采用了较小调优数据集的方法。
## 最终模型选择
- 选用 XGBoost 作为本项目的最终模型。
**选用哪个 XGBoost?**
- 在执行了较小调优数据集方法后的模型被选为最终模型。
## **为什么?**
## **为什么不选择较小调优数据集之前或超参数调优之后的 XGBoost 模型?**
## **为什么不选择 KNN?**
## 主要发现
## 未来改进
- 模型部署
- 实时欺诈监控
## 作者
Nubula H,数据科学与机器学习学习者。
标签:Apex, 分类模型, 数据科学, 数据预处理, 机器学习, 欺诈检测, 资源验证, 逆向工具, 金融风控