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

news/2024/11/8 12:32:53/

在这里插入图片描述

机器学习:基于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.ppmy.cn/news/185328.html

相关文章

超薄本在未连接网线怎么查看本地mac地址

正常的情况下我们查看mac地址的时候,直接在winR,输入cmd,调出操作窗口输入ipconfig/all命令就行了。但是我们在未插入转接头的时候,是查看不到本地mac地址的,只有无线网和虚拟的mac地址,查看不到本地的mac地…

超薄笔记本电脑回收站里面的文件清理了怎么找回

回收站文件清空了是很正常的一件事,毕竟里面如果放了很多的文件看着也不舒服,这时候我们就会开始清理电脑上回收站的文件,因为工作的时候电脑上会有很多的文件误删进去回收站中,删除之后就忘记拿出来了,清理完回收站的…

java编程选游戏本还是轻薄本,编程用什么笔记本,超薄本还是游戏本

cpu内存硬盘越大越快越好,游戏编程需要好的显卡。 理由很简单: 1、可能要用很多ide,我经常用的ide就有4个,都是大型软件,同时开要跑得起来。 2、机器上不可避免的要安装数据库,也要跑得起来。 3、做虚拟机跑…

s40-10报价 宏碁swift_3:2屏经典回归:宏碁发布 Swift 3(SF313-52/G)超薄笔记本电脑...

3:2屏经典回归:宏碁发布 Swift 3(SF313-52/G)超薄笔记本电脑699美元(约4850)元 2020-01-08 10:32:14 16点赞 32收藏 20评论 还记得之前我们曾报道过的3:2长宽比屏笔记本吗?现在,它来了,acer(宏碁)官方正式发布了这款颇…

欣赏ThinkPad X1超薄本

CONEY 刚换了T410,看到这款X1,表示兴趣很大,下面让我们领略一下这款超薄本的魅力吧~ 联想即将要推出迄今为止最薄的ThinkPad X1 笔记本。这款笔记本将采用新的电池技术。 X1的电池将是用户无法更换的,但这块电池能够带来更好的性…

环境搭建第二弹--超薄本ubuntu和开发板共享文件

前言: 开发板是超薄本,没有物理网卡,只有内置无线网卡。 网上买了个USB转网口,设置虚机网卡桥接选择USB网口,仍然不能使得ubuntu和开发板互ping通。只得借助路由器。 使用的是小米路由器。 环境搭建 小米路由器设置 小米路由器恢复出厂设置 IP设置为DHCP,IP会被分配为…

macbook air m1性能加倍超长续航超薄本

苹果对于M1的自信非常强,虽然没有在性能最强的Mac中使用,但是MacBookAir和MacBook Pro中使用,这两类产品的用户群体是Mac中最大的,所以说苹果对于M1的性能表现绝对是满意的。苹果的MacBook Air自问世以来,以轻薄便携而…

笔记本跑linux续航,大年初一发售 System76推15.6吋超薄长续航Linux笔记本Darter Pro

操作系统:Pop!_OS 18.04 LTS (64-bit), Pop!_OS 18.10 (64-bit)或者Ubuntu 18.04 LTS (64-bit) 处理器:1.英特尔第八代Core i5-8265U:1.6至3.90 GHz时钟频率 - 6MB高速缓存 - 4核 - 8个线程 2.英特尔第八代Core i7-8565U:1.8至…