机器学习:基于XGBoost对信用卡欺诈行为的识别

news2024/11/17 11:24:01

在这里插入图片描述

机器学习:基于XGBoost对信用卡欺诈行为的识别

作者:i阿极

作者简介:Python领域新星作者、多项比赛获奖者:博主个人首页

😊😊😊如果觉得文章不错或能帮助到你学习,可以点赞👍收藏📁评论📒+关注哦!👍👍👍

📜📜📜如果有小伙伴需要数据集和学习交流,文章下方有交流学习区!一起学习进步!💪


大家好,我i阿极。喜欢本专栏的小伙伴,请多多支持

专栏案例:机器学习案例
机器学习(一):线性回归之最小二乘法
机器学习(二):线性回归之梯度下降法
机器学习(三):基于线性回归对波士顿房价预测
机器学习(四):基于KNN算法对鸢尾花类别进行分类预测
机器学习(五):基于KNN模型对高炉发电量进行回归预测分析
机器学习(六):基于高斯贝叶斯对面部皮肤进行预测分析
机器学习(七):基于多项式贝叶斯对蘑菇毒性分类预测分析
机器学习(八):基于PCA对人脸识别数据降维并建立KNN模型检验
机器学习(十四):基于逻辑回归对超市销售活动预测分析
机器学习(十五):基于神经网络对用户评论情感分析预测
机器学习(十六):线性回归分析女性身高与体重之间的关系
机器学习(十七):基于支持向量机(SVM)进行人脸识别预测
机器学习(十八):基于逻辑回归对优惠券使用情况预测分析
机器学习(十九):基于逻辑回归对某银行客户违约预测分析
机器学习(二十):LightGBM算法原理(附案例实战)
机器学习(二十一):基于朴素贝叶斯对花瓣花萼的宽度和长度分类预测
机器学习(二十二):基于逻辑回归(Logistic Regression)对股票客户流失预测分析

文章目录

  • 机器学习:基于XGBoost对信用卡欺诈行为的识别
  • 1、XGBoost算法的介绍
  • 2、SMOTE算法思想
  • 2、XGBoost函数介绍
  • 3、SMOTE函数介绍
  • 4、实验环境
  • 5、案例实战——信用卡欺诈行为的识别
    • 5.1读取数据
    • 5.2统计交易是否为欺诈的频数
    • 5.3数据拆分为训练集和测试集
    • 5.4运用SMOTE算法实现训练数据集的平衡
    • 5.5构建XGBoost分类器
    • 5.6计算欺诈交易的概率值,用于生成ROC曲线的数据


1、XGBoost算法的介绍

XGBoost(eXtreme Gradient Boosting)是一种梯度提升树算法,它是基于决策树的集成学习方法。相对于传统的梯度提升树算法,XGBoost引入了一些创新的技术,如正则化、并行计算和缺失值处理,以提高模型的准确性和效率。下面详细讲解XGBoost算法的原理和关键步骤:

  • 梯度提升树:
    XGBoost算法基于梯度提升树,梯度提升树是一种集成学习算法,通过迭代地训练多个决策树,并将它们组合起来构建一个强大的模型。每个决策树都通过拟合残差来逐步改进模型的预测能力。

  • 损失函数:
    XGBoost使用一种灵活的损失函数来衡量模型预测结果的准确性。常用的损失函数有平方损失函数(用于回归问题)和对数损失函数(用于二分类问题)。XGBoost还支持自定义的损失函数。

  • 树的结构:
    XGBoost使用CART(Classification and Regression Trees)决策树作为基础模型。决策树通过将输入空间划分为多个区域,并在每个区域内预测目标变量的值。

  • 正则化:
    XGBoost引入了正则化项来控制模型的复杂度,防止过拟合。正则化项包括L1正则化和L2正则化,它们分别对应于权重的绝对值和平方和。正则化可以促使模型更加稀疏,削弱不重要的特征的影响。

  • 样本权重和学习率:
    XGBoost通过样本权重和学习率来控制每个样本对模型的贡献。样本权重可以根据样本的重要性进行调整,学习率则控制每次迭代的步长,避免过拟合并提高模型的稳定性。

  • 并行计算:
    XGBoost通过利用并行计算的能力,提高了训练和预测的速度。它支持在特征和样本级别上进行并行计算,以加快模型训练的速度。

  • 缺失值处理:
    XGBoost能够自动处理缺失值,无需对缺失值进行处理或填充。在决策树的划分过程中,XGBoost可以将缺失值放入左子树或右子树中,以最大程度地提高模型的准确性。

  • 特征重要性评估:
    XGBoost提供了一种方法来评估特征的重要性,这对于特征选择和模型解释非常有用。通过计算每个特征在模型中的分裂次数或分裂增益,可以得到特征的重要性排序。

2、SMOTE算法思想

SMOTE(Synthetic Minority Over-sampling Technique)是一种用于解决类别不平衡问题的算法,特别适用于处理少数类样本较少的情况。其主要思想是通过合成新的少数类样本来增加训练数据,从而达到平衡类别分布的目的。

SMOTE算法的基本思想如下:

  • 针对少数类样本,选择一个样本作为基准样本。

  • 随机选择该基准样本的若干个最近邻样本(通常是k个),这些最近邻样本必须属于同一类别。

  • 对于每个最近邻样本,计算基准样本与其之间的差值,得到一个差值向量。

  • 根据差值向量和一个介于0和1之间的随机数,合成新的样本。

  • 重复上述步骤,直到生成足够数量的新样本。

通过SMOTE算法生成的合成样本具有两个特点:

  • 新样本位于原有样本之间的线段上,因此可以认为新样本是原有样本的线性插值。

  • 生成的新样本在特征空间中均匀分布,有助于丰富少数类样本的特征表达。

SMOTE算法的目标是通过增加合成样本来改善模型在少数类样本上的学习效果。通过引入合成样本,可以使得模型更好地捕捉少数类样本的特征和边界,提高分类器的性能。

需要注意的是,SMOTE算法应该在训练集上应用,而不是在整个数据集上。这是因为合成的样本是基于少数类样本生成的,为了保持测试集的独立性,应该在测试集上不使用SMOTE。

2、XGBoost函数介绍

XGBClassifier(max_depth=3, learning_rate=0.1, n_estimators=100, silent=True, 
                      objective='binary:logistic', booster='gbtree', n_jobs=1, nthread=None, 
                      gamma=0, min_child_weight=1, max_delta_step=0, subsample=1, 
                      colsample_bytree=1, colsample_bylevel=1, reg_alpha=0, reg_lambda=1, 
                      scale_pos_weight=1, base_score=0.5, random_state=0, seed=None, missing=None)

  • max_depth:用于指定每个基础模型所包含的最大深度,默认为3层。
  • learning_rate:用于指定模型迭代的学习率或步长,默认为0.1,即对应的梯度提升模型F_T(x)可以表示为F_T(x)=F_T−1(x)+υf_t(x):,其中的υ就是该参数的指定值,默认值为1;对于较小的学习率υ而言,则需要迭代更多次的基础分类器,通常情况下需要利用交叉验证法确定合理的基础模型的个数和学习率。
  • n_estimators:用于指定基础模型的数量,默认为100个。
  • silent:bool类型参数,是否输出算法运行过程中的日志信息,默认为True。
  • booster:用于指定基础模型的类型,默认为’gbtree’,即CART模型,也可以是’gblinear’,表示基础模型为线性模型。
  • objective:用于指定目标函数中的损失函数类型,对于分类型的XGBoost算法,默认的损失函数为二分类的Logistic损失(模型返回概率值),也可以是’multi:softmax’,表示用于处理多分类的损失函数(模型返回类别值),还可以是’multi:softprob’,与’multi:softmax’相同,所不同的是模型返回各类别对应的概率值;对于预测型的XGBoost算法,默认的损失函数为线性回归损失。
  • n_jobs:用于指定XGBoost算法在并行计算时所需的CPU数量,默认为1表示仅使用1个CPU运行算法,即不使用并行运算功能。
  • nthread:用于指定XGBoost算法在运行时所使用的线程数,默认为None,表示使用计算机最大可能的线程数。
  • gamma:用于指定节点分割所需的最小损失函数下降值,即增益值Gain的阈值,默认为0。
  • min_child_weight:用于指定叶子节点中各样本点二阶导之和的最小值,即H_j的最小值,默认为1,该参数的值越小,模型越容易过拟合。
  • max_delta_step:用于指定模型在更新过程中的步长,如果为0,表示没有约束;如果取值为某个较小的正数,就会导致模型更加保守。
  • subsample:用于指定构建基础模型所使用的抽样比例,默认为1,表示使用原始数据构建每一个基础模型;当抽样比例小于1时,表示构建随机梯度提升树模型,通常会导致模型的方差降低,偏差提高。
  • colsample_bytree:用于指定每个基础模型所需的采样字段比例,默认为1,表示使用原始数据的所有字段。
  • colsample_bylevel:用于指定每个基础模型在节点分割时所需的采样字段比例,默认为1,表示使用原始数据的所有字段。
  • reg_alpha:用于指定L1正则项的系数,默认为0。
  • reg_lambda:用于指定L2正则项的系数,默认为1。
  • scale_pos_weight:当各类别样本的比例十分不平衡时,通过设定该参数设定为一个正值,可以使算法更快收敛。
  • base_score:用于指定所有样本的初始化预测得分,默认为0.5。
  • random_state:用于指定随机数生成器的种子,默认为0,表示使用默认的随机数生成器。
  • seed:同random_state参数。
  • missing:用于指定缺失值的表示方法,默认为None,表示NaN即为默认值。

3、SMOTE函数介绍

SMOTE(ratio='auto', random_state=None, k_neighbors=5, m_neighbors=10, 
      out_step=0.5, kind='regular', svm_estimator=None, n_jobs=1)
  • ratio:用于指定重抽样的比例,如果指定字符型的值,可以是’minority’(表示对少数类别的样本进行抽样)、‘majority’(表示对多数类别的样本进行抽样)、‘not minority’(表示采用欠采样方法)、‘all’(表示采用过采样方法),默认为’auto’,等同于’all’和’not minority’。如果指定字典型的值,其中键为各个类别标签,值为类别下的样本量。
  • random_state:用于指定随机数生成器的种子,默认为None,表示使用默认的随机数生成器。
  • k_neighbors:指定近邻个数,默认为5个。
  • m_neighbors:指定从近邻样本中随机挑选的样本个数,默认为10个。
  • kind:用于指定SMOTE算法在生成新样本时所使用的选项,默认为’regular’,表示对少数类别的样本进行随机采样,也可以是’borderline1’ ‘borderline2’和’svm’。
  • svm_estimator:用于指定SVM分类器,默认为sklearn.svm.SVC,该参数的目的是利用支持向量机分类器生成支持向量,然后生成新的少数类别的样本。
  • n_jobs:用于指定SMOTE算法在过采样时所需的CPU数量,默认为1表示仅使用1个CPU运行算法,即不使用并行运算功能。

4、实验环境

Python 3.9

Anaconda

Jupyter Notebook

5、案例实战——信用卡欺诈行为的识别

5.1读取数据

creditcard = pd.read_csv(r'D:\creditcard.csv')

5.2统计交易是否为欺诈的频数

import matplotlib.pyplot as plt
plt.axes(aspect = 'equal')
# 统计交易是否为欺诈的频数
counts = creditcard.Class.value_counts()
# 绘制饼图
plt.pie(x = counts, # 绘图数据
        labels=pd.Series(counts.index).map({0:'正常',1:'欺诈'}), # 添加文字标签
        autopct='%.2f%%' # 设置百分比的格式,这里保留一位小数
       )
# 显示图形
plt.show()

在这里插入图片描述

5.3数据拆分为训练集和测试集

# 删除自变量中的Time变量
from sklearn import model_selection
X = creditcard.drop(['Time','Class'], axis = 1)
y = creditcard.Class
# 数据拆分
X_train,X_test,y_train,y_test = model_selection.train_test_split(X,y,test_size = 0.3, random_state = 1234)

5.4运用SMOTE算法实现训练数据集的平衡

# 导入第三方包
from imblearn.over_sampling import SMOTE
import imblearn

# 运用SMOTE算法实现训练数据集的平衡
over_samples = SMOTE(random_state=1234) 
over_samples_X,over_samples_y = over_samples.fit_resample(X_train, y_train)

# 重抽样前的类别比例
print(y_train.value_counts()/len(y_train))
# 重抽样后的类别比例
print(pd.Series(over_samples_y).value_counts()/len(over_samples_y))

在这里插入图片描述

5.5构建XGBoost分类器

# 导入第三方包
import xgboost
from sklearn.metrics import accuracy_score
from sklearn.metrics import classification_report
import numpy as np
# 构建XGBoost分类器
xgboost = xgboost.XGBClassifier()
# 使用重抽样后的数据,对其建模
xgboost.fit(over_samples_X,over_samples_y)
# 将模型运用到测试数据集中
resample_pred = xgboost.predict(np.array(X_test))

# 返回模型的预测效果
print('模型的准确率为:\n',metrics.accuracy_score(y_test, resample_pred))
print('模型的评估报告:\n',metrics.classification_report(y_test, resample_pred))

在这里插入图片描述

5.6计算欺诈交易的概率值,用于生成ROC曲线的数据

from sklearn import metrics
y_score = xgboost.predict_proba(np.array(X_test))[:,1]
fpr,tpr,threshold = metrics.roc_curve(y_test, y_score)
# 计算AUC的值
roc_auc = metrics.auc(fpr,tpr)

# 绘制面积图
plt.stackplot(fpr, tpr, color='steelblue', alpha = 0.5, edgecolor = 'black')
# 添加边际线
plt.plot(fpr, tpr, color='black', lw = 1)
# 添加对角线
plt.plot([0,1],[0,1], color = 'red', linestyle = '--')
# 添加文本信息
plt.text(0.5,0.3,'ROC curve (area = %0.2f)' % roc_auc)
# 添加x轴与y轴标签
plt.xlabel('1-Specificity')
plt.ylabel('Sensitivity')
# 显示图形
plt.show()

在这里插入图片描述


📢文章下方有交流学习区!一起学习进步!💪💪💪
📢首发CSDN博客,创作不易,如果觉得文章不错,可以点赞👍收藏📁评论📒
📢你的支持和鼓励是我创作的动力❗❗❗

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/604828.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Kafka集群安装部署

Kafka集群安装部署 简介 Kafka是一款分布式的、去中心化的、高吞吐低延迟、订阅模式的消息队列系统。 同RabbitMQ一样,Kafka也是消息队列。不过RabbitMQ多用于后端系统,因其更加专注于消息的延迟和容错。 Kafka多用于大数据体系,因其更加…

大数据Doris(三十三):Spark集群搭建

文章目录 Spark集群搭建 一、Spark Standalone 集群搭建 1、下载Spark安装包 2、上传、

Vue+springboot老年人活动报名教育学习系统

基于java语言设计并实现了老年教育学习系统。该系统基于B/S即所谓浏览器/服务器模式,应用Springboot框架,选择MySQL作为后台数据库。系统主要包括首页、个人中心、老年人管理、负责人管理、课程教师管理、组织者管理、活动信息管理、活动申请管理、活动策…

python实现Canny算子边缘检测算法

边缘检测是一种将图片中关键信息表现出来的一种图片技术,它的结果并不是字面意思上的获取图片边缘,而是将图片有用的信息勾勒出来,类似素描的结果,但是已经去掉了很多信息。如下所示,一张原始的图片是这样的&#xff1…

HGFormer:用于领域广义语义分割的层级式分组Transformer

文章目录 HGFormer: Hierarchical Grouping Transformer for Domain Generalized Semantic Segmentation摘要本文方法实验结果 HGFormer: Hierarchical Grouping Transformer for Domain Generalized Semantic Segmentation 摘要 目前的语义分割模型在独立同分布条件下取得了…

正准备升职加薪?自动化测试框架设计原则必须要知道...

本期小编将为大家带来自动化测试方面的基础知识,正在学习及将要提升学习自动化的同学们可自行参考啦,希望大家都可以尽快升职加薪! 下面跟着小编来认识一下自动化测试框架及其原则吧! 自动化测试框架 自动化测试框架需要基于特…

Transfomer编码器中自注意力机制、前馈网络层、叠加和归一组件等讲解(图文解释)

Transformer中的编码器不止一个,而是由一组N个编码器串联而成,一个编码的输出作为下一个编码器的输入,如下图所示,每一个编码器都从下方接收数据,再输出给上方,以此类推,原句中的特征会由最后一…

Nginx网络服务——主配置文件-nginx.conf

Nginx网络服务——主配置文件-nginx.conf 一、全局配置的六个模块简介二、nginx配置文件的详解1.全局配置模块2.I/O 事件配置3.HTTP 配置4.Web 服务的监听配置5.其他设置 三、访问状态统计与控制1.访问状态统计2.基于授权的访问控制3.基于客户端的访问控制 一、全局配置的六个模…

6个音效素材库,自媒体必备~

视频剪辑、自媒体必备的6个音效素材网站,再也不用担心找不到声音素材了,赶紧收藏起来,一定对你非常有用~ 菜鸟图库 https://www.sucai999.com/audio.html?vNTYxMjky ​ 菜鸟图库是一个综合性素材网站,站内涵盖设计、图片、办公、…

Termius使用[分屏同时操作]

免费版可用ssh,tftp连接服务器,界面美观操作简洁 一 安装 官网 进入官网,登陆后进入个人页面,下载对应系统软件 安装完成后,在应用中登陆账号后即可开始使用 二 基本操作 [只针对ssh连接服务器操作] 2.1 连接服务…

MySQL_11 用户管理和权限管理

目录 一、用户管理 1.用户介绍 : 2.操作指令 : 3.代码演示 : 二、权限管理 1.MySQL常见权限汇总 : 2.相关指令 : 3.代码演示 : 一、用户管理 1.用户介绍 : MySQL中的用户都存储在系统数据库mysql中的user表中,如下图所示 : user表中&#xff0c…

银行从业——法律法规——金融基础知识

第二章 金融基础知识 第二节 货币政策 【 知识点1】 货币政策目标 制定和实施货币政策, 首先必须明确货币政策最终要达到的目的, 即货币政策的最终目标。中央银行通过货币政策工具操作直接引起操作目标的变动,操作目标的变动又通过一定的途…

深度:解密数据之力,奏响制造业智能升级的狂想曲!

‍数据智能产业创新服务媒体 ——聚焦数智 改变商业 在21世纪的今天,我们正在经历着一个伟大的变革,一个由数字技术引领的产业革命——智能制造。在这场变革中,大数据、人工智能、5G专网、工业物联网和智能机器人等尖端技术,正如…

Grounded Language-Image Pre-training(论文翻译)

文章目录 Grounded Language-Image Pre-training摘要1.介绍2.相关工作3.方法3.1统一构建3.2.语言感知深度融合3.3.使用可扩展的语义丰富数据进行预训练 4.迁移到既定的基准4.1.COCO上的zero-shot和监督迁移学习4.2.LVIS上的zero-shot 迁移学习4.3.Flickr30K实体上的 phrase gro…

Redis核心数据结构-01

1、String String 数据结构是简单的key-value类型,value其实不仅是String,也可以是数字。 常用命令:get、set、incr、decr、mget等。 应用场景:String是最常用的一种数据类型,普通的key/ value 存储都可以归为此类&…

MongoDB复杂分组聚合查询

目录 1 聚合查询1.1 MongoDB的聚合查询 2 聚合管道方法2.1 聚合流程2.1.1 详细流程 2.2 聚合语法2.2.1 参数说明2.2.2 注意事项 2.3 常用聚合管道2.3.1 与mysql聚合类比 3 使用示例3.1 统计所有数据3.2 对所有城市人数求合3.3 对城市缩写相同的城市人数求合3.4 state重复的城市…

【笔试强训选择题】Day20.习题(错题)解析

作者简介:大家好,我是未央; 博客首页:未央.303 系列专栏:笔试强训选择题 每日一句:人的一生,可以有所作为的时机只有一次,那就是现在!!!&#xff…

Splunk Enterprise 9.0.5 (macOS, Linux, Windows) 发布 - 机器数据管理和分析

Splunk Enterprise 9.0.5 (macOS, Linux, Windows) - 机器数据管理和分析 请访问原文链接:https://sysin.org/blog/splunk-9/,查看最新版。原创作品,转载请保留出处。 作者主页:sysin.org 混合世界的数据平台 快速、大规模地从…

模块的加载机制

4.1优先从缓存中加载 模块在第一次加载后会被缓存。这也意味着多次调用require()不会导致模块的代码被执行多次 注意:不论是内置模块、用户自定义模块、还是第三方模块,它们都会优先从缓存中加载,从而提高模块的加载效率 4.2内置模块的加载…

【服务器】本地搭建PHP简单Imagewheel私人图床系统

文章目录 1.前言2. Imagewheel网站搭建2.1. Imagewheel下载和安装2.2. Imagewheel网页测试2.3.cpolar的安装和注册 3.本地网页发布3.1.Cpolar临时数据隧道3.2.Cpolar稳定隧道(云端设置)3.3.Cpolar稳定隧道(本地设置) 4.公网访问测…