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, 分类模型, 数据科学, 数据预处理, 机器学习, 欺诈检测, 资源验证, 逆向工具, 金融风控