机器学习:基于Sklearn,使用随机森林分类器RandomForestClassifier检测信用卡欺诈

前言

系列专栏:机器学习:高级应用与实践【项目实战100+】【2024】✨︎
在本专栏中不仅包含一些适合初学者的最新机器学习项目,每个项目都处理一组不同的问题,包括监督和无监督学习、分类、回归和聚类,而且涉及创建深度学习模型、处理非结构化数据以及指导复杂的模型,如卷积神经网络、门控递归单元、大型语言模型和强化学习模型

本文旨在实现一个机器学习模型,该模型可以使信用卡公司能够识别欺诈性信用卡交易,这样客户就不会被收取未购买的物品的费用。

信用卡欺诈检测涉及的主要挑战是:

  1. 每天都要处理大量数据,模型构建必须足够快才能及时响应骗局。
  2. 数据不平衡,即大多数交易(99.8%)不是欺诈性的,这使得很难检测到欺诈交易。
  3. 数据可用性,因为数据大多是私有的。
  4. 错误分类的数据可能是另一个主要问题,因为并非每笔欺诈交易都会被发现并且报告。
  5. 诈骗者对模型使用的自适应技术。

如何应对这些挑战?

  1. 使用的模型必须足够简单和快速,以便尽快检测异常并将其归类为欺诈易。
  2. 不平衡可以通过正确使用一些方法来解决,我们将在下一段中讨论
  3. 为了保护用户的隐私,可以降低数据的维度。
  4. 必须采用更可靠的来源来仔细检查数据,至少对于训练模型是这样。
  5. 我们可以使模型简单且可解释,这样当骗子只需进行一些调整即可适应它时,我们就可以启动并运行一个新模型进行部署。

目录

  • 1. 相关库和数据集
    • 1.1 相关库介绍
    • 1.2 数据集介绍
    • 1.3 数据处理
  • 2. 数据探索分析(可视化)
    • 2.1 绘制相关矩阵
  • 3. 数据建模(RandomForestClassifier)
    • 3.1 数据准备(拆分为训练集和测试集)
    • 3.2 构建随机森林模型(RandomForestClassifier)
    • 3.3 构建各种评估参数
    • 3.4 模型评估(可视化混淆矩阵)

1. 相关库和数据集

1.1 相关库介绍

Python 库使我们能够非常轻松地处理数据并使用一行代码执行典型和复杂的任务。

  • Pandas – 该库有助于以 2D 数组格式加载数据框,并具有多种功能,可一次性执行分析任务。
  • Numpy – Numpy 数组速度非常快,可以在很短的时间内执行大型计算。
  • Matplotlib/Seaborn – 此库用于绘制可视化效果。
  • Sklearn – 包含多个库,这些库具有预实现的功能,用于执行从数据预处理到模型开发和评估的任务。
import numpy as np 
import pandas as pd 
import matplotlib.pyplot as plt 
import seaborn as sns 
from matplotlib import gridspec 

from sklearn.model_selection import train_test_split 
from sklearn.ensemble import RandomForestClassifier 
from sklearn.metrics import classification_report, accuracy_score 
from sklearn.metrics import precision_score, recall_score 
from sklearn.metrics import f1_score, matthews_corrcoef 
from sklearn.metrics import confusion_matrix 

import warnings
warnings.filterwarnings('ignore')

1.2 数据集介绍

该数据集显示了两天内发生的交易,其中 284,807 笔交易中有 492 起欺诈。数据集高度不平衡,正类(欺诈)占所有交易的 0.172%。

它仅包含数值输入变量,这些变量是 PCA 转换的结果。很遗憾,由于保密问题,我们无法提供有关数据的原始特征和更多背景信息。特点 V1、V2、…V28 是使用 PCA 获得的主要组件,唯一未使用 PCA 转换的特征是“时间”和“数量”。特征“时间”包含数据集中每个事务与第一个事务之间经过的秒数。“金额”功能是交易金额,此功能可用于与成本相关的学习。特征“类”是响应变量,在欺诈的情况下取值 1,否则取值 0。

考虑到类别不平衡比,我们建议使用精度召回曲线下面积 (AUPRC) 测量准确度。混淆矩阵的准确性对于不平衡分类没有意义。

# Load the dataset from the csv file using pandas 
data = pd.read_csv("creditcard.csv") 
# Grab a peek at the data 
data.head() 

在这里插入图片描述

1.3 数据处理

确定数据集中的欺诈案件数量

# Determine number of fraud cases in dataset 
fraud = data[data['Class'] == 1] 
valid = data[data['Class'] == 0] 
outlierFraction = len(fraud)/float(len(valid)) 
print(outlierFraction) 
print('Fraud Cases: {}'.format(len(data[data['Class'] == 1]))) 
print('Valid Transactions: {}'.format(len(data[data['Class'] == 0]))) 

输出

0.0017304750013189597
Fraud Cases: 492
Valid Transactions: 284315

在所有交易中,只有0.17%的欺诈交易,数据高度不平衡。让我们首先在不平衡的情况下应用我们的模型,如果我们没有得到很好的准确性,那么我们可以找到一种方法来平衡这个数据集。

打印欺诈交易的金额明细

print('Amount details of the fraudulent transaction') 
fraud.Amount.describe() 

输出

Amount details of the fraudulent transaction
count     492.000000
mean      122.211321
std       256.683288
min         0.000000
25%         1.000000
50%         9.250000
75%       105.890000
max      2125.870000
Name: Amount, dtype: float64

打印正常交易的金额明细

print('details of valid transaction') 
valid.Amount.describe() 

输出

details of valid transaction
count    284315.000000
mean         88.291022
std         250.105092
min           0.000000
25%           5.650000
50%          22.000000
75%          77.050000
max       25691.160000
Name: Amount, dtype: float64

从中我们可以清楚地注意到,欺诈者的平均货币交易更多。这使得这个问题变得至关重要。

2. 数据探索分析(可视化)

2.1 绘制相关矩阵

相关矩阵以图形方式让我们了解特征如何相互关联,并可以帮助我们预测最相关的特征。

# Correlation matrix 
corrmat = data.corr() 
fig = plt.figure(figsize = (12, 9)) 
sns.heatmap(corrmat, vmax = .8, square = True) 
plt.show() 

在这里插入图片描述
在热图中,我们可以清楚地看到,大多数特征与其他特征不相关,但有些特征彼此之间具有正相关或负相关。例如,V2V5 与名为 Amount 的特征高度负相关。我们还看到了与 V20Amount 的一些相关性。这使我们能够更深入地了解我们可用的数据。

3. 数据建模(RandomForestClassifier)

3.1 数据准备(拆分为训练集和测试集)

# dividing the X and the Y from the dataset 
X = data.drop(['Class'], axis = 1) 
Y = data["Class"] 
print(X.shape) 
print(Y.shape) 
# getting just the values for the sake of processing 
# (its a numpy array with no columns) 
xData = X.values 
yData = Y.values 

我们将数据集分为两大组。一个用于训练模型,另一个用于测试训练模型的性能。

# Split the data into training and testing sets 
xTrain, xTest, yTrain, yTest = train_test_split( 
		xData, yData, test_size = 0.2, random_state = 42) 

3.2 构建随机森林模型(RandomForestClassifier)

# random forest model creation 
rfc = RandomForestClassifier() 
rfc.fit(xTrain, yTrain) 
# predictions 
yPred = rfc.predict(xTest) 

3.3 构建各种评估参数

# Evaluating the classifier 
# printing every score of the classifier 
# scoring in anything 

n_outliers = len(fraud) 
n_errors = (yPred != yTest).sum() 
print("The model used is Random Forest classifier") 

acc = accuracy_score(yTest, yPred) 
print("The accuracy is {}".format(acc)) 

prec = precision_score(yTest, yPred) 
print("The precision is {}".format(prec)) 

rec = recall_score(yTest, yPred) 
print("The recall is {}".format(rec)) 

f1 = f1_score(yTest, yPred) 
print("The F1-Score is {}".format(f1)) 

MCC = matthews_corrcoef(yTest, yPred) 
print("The Matthews correlation coefficient is{}".format(MCC)) 

输出

The model used is Random Forest classifier
The accuracy is 0.9995962220427653
The precision is 0.9746835443037974
The recall is 0.7857142857142857
The F1-Score is 0.8700564971751412
The Matthews correlation coefficient is0.8749276812909632

3.4 模型评估(可视化混淆矩阵)

# printing the confusion matrix 
LABELS = ['Normal', 'Fraud'] 
conf_matrix = confusion_matrix(yTest, yPred) 
plt.figure(figsize =(7, 6)) 
sns.heatmap(conf_matrix, xticklabels = LABELS, 
			yticklabels = LABELS, annot = True, fmt ="d"); 
plt.title("Confusion matrix") 
plt.ylabel('True class') 
plt.xlabel('Predicted class') 
plt.show() 

在这里插入图片描述
与其他算法进行比较,而无需处理数据的不平衡。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

分享一份物联网 SAAS 平台架构设计

一、架构图**** 二、Nginx**** 用于做服务的反向代理。 三、网关**** PaaS平台所有服务统一入口,包含token鉴权功能。 四、开放平台**** 对第三方平台开放的服务入口。 五、MQTT**** MQTT用于设备消息通信、内部服务消息通信。 六、Netty**** Socket通信设…

IoTDB 入门教程①——时序数据库为什么选IoTDB ?

文章目录 一、前文二、性能排行第一三、完全开源四、数据文件TsFile五、乱序数据高写入六、其他七、参考 一、前文 IoTDB入门教程——导读 关注博主的同学都知道,博主在物联网领域深耕多年。 时序数据库,博主已经用过很多,从最早的InfluxDB&a…

正点原子[第二期]Linux之ARM(MX6U)裸机篇学习笔记-9.1-LED灯(模仿STM32驱动开发实验)

前言: 本文是根据哔哩哔哩网站上“正点原子[第二期]Linux之ARM(MX6U)裸机篇”视频的学习笔记,在这里会记录下正点原子 I.MX6ULL 开发板的配套视频教程所作的实验和学习笔记内容。本文大量引用了正点原子教学视频和链接中的内容。…

IDEA:Server‘s certificate is not trusted(服务器的证书不受信任)

IDEA:Server‘s certificate is not trusted(服务器的证书不受信任) 打开idea,发现一个莫名其妙的证书弹出来,还关不掉发现组织名是 Doctorcom LTD.百度了下 不知道是什么东西 这也不是下面这种破解了idea的情况 30069…

Ajax.

目录 1. 服务器相关的基础概念 1.1 服务器 1.2 客户端 1.3 服务器对外提供的资源 1.4 数据也是资源 1.5 资源与 URL 地址 1.6 什么是 Ajax 2. Ajax 的基础用法 2.1 POST 请求 2.2 GET 请求 2.3 DELETE 请求 2.4 PUT 请求 2.5 PATCH 请求 3. axios 3.1 axios 的基…

IoTDB 入门教程 问题篇①——内存不足导致datanode服务无法启动

文章目录 一、前文二、问题三、分析四、继续分析五、解决问题 一、前文 IoTDB入门教程——导读 二、问题 执行启动命令,但是datanode服务却无法启动,查询不到6667端口 bash sbin/start-standalone.sh 进而导致数据库连接也同样失败 [rootiZ2ze30dygwd6…

Go 语言(三)【面向对象编程】

1、OOP 首先,Go 语言并不是面向对象的语言,只是可以通过一些方法来模拟面向对象。 1.1、封装 Go 语言是通过结构体(struct)来实现封装的。 1.2、继承 继承主要由下面这三种方式实现: 1.2.1、嵌套匿名字段 //Add…

实操——使用uploadify插件(php版和Java版) 与 Dropzone.js插件分别实现附件上传

实操——使用uploadify插件(php版和Java版)与 Dropzone.js插件分别实现附件上传 1. 使用uploadify插件上传1.1 简介1.1.1 简介1.1.2 参考GitHub 1.2 后端PHP版本的uploadify1.2.1 下载项目的目录结构1.2.2 测试看界面效果1.2.3 附页面代码 和 PHP代码 1.…

ctfshow——SQL注入

文章目录 SQL注入基本流程普通SQL注入布尔盲注时间盲注报错注入——extractvalue()报错注入——updataxml()Sqlmap的用法 web 171——正常联合查询web 172——查看源代码、联合查询web 173——查看源代码、联合查询web 174——布尔盲注web 176web 177——过滤空格web 178——过…

LLM 构建Data Multi-Agents 赋能数据分析平台的实践之③:数据分析之二(大小模型协同)

一、概述 随着新一代信息技术在产业数字化中的应用,产生了大量多源多模态信息以及响应的信息处理模式,数据孤岛、模型林立的问题也随之产生,使得业务系统臃肿、信息处理和决策效率低下,面对复杂任务及应用场景问题求解效率低。针…

【iOS】消息流程分析

文章目录 前言动态类型动态绑定动态语言消息发送objc_msgSendSEL(selector)IMP(implementation)IMP高级用法 MethodSEL、IMP、Method总结流程概述 快速查找消息发送快速查找的总结buckets 慢速查找动态方法解析resolveInstanceMet…

如何远程访问服务器?

在现代信息技术的快速发展下,远程访问服务器已成为越来越多用户的需求。远程访问服务器能够让用户随时随地通过网络连接服务器,实现数据的传输和操作。本文将介绍远程访问服务器的概念,以及一种广泛应用于不同行业的远程访问解决方案——【天…

软考之零碎片段记录(二十九)+复习巩固(十七、十八)

学习 1. 后缀式(逆波兰式) 2. c/c语言编译 类型检查是语义分析 词法分析。分析单词。如单词的字符拼写等语法分析。分析句子。如标点符号、括号位置等语言上的错误语义分析。分析运算符、运算对象类型是否合法 3. java语言特质 即时编译堆空间分配j…

2024抖音AI图文带货班:在这个赛道上 乘风破浪 拿到好效果

课程目录 1-1.1 AI图文学习指南 1.mp4 2-1.2 图文带货的新机会 1.mp4 3-1.3 2024年优质图文新标准 1.mp4 4-1.4 图文如何避免违规 1.mp4 5-1.5 优质图文模板解析 1.mp4 6-2.1 老号重启 快速破局 1.mp4 7-2.2 新号起号 不走弯路 1.mp4 8-2.3 找准对标 弯道超车 1.mp4 9…

深度学习之基于Tensorflow卷积神经网络公共区域行人人流密度可视化系统

欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景 在公共区域,如商场、火车站、地铁站等,人流密度的监控和管理对于确保公共安全…

anaconda的安装和Jupyter Notebook修改默认路径

anaconda的安装 就一个注意事项:在结尾时候记得配置系统环境变量 要是没有配置这个环境变量,后面就不能cmd启动Jupyter Notebook Jupyter Notebook修改默认路径 我们要找到Jupyter Notebook的配置文件 输入下面指令 jupyter notebook --generate-config就可以找到存放配置文…

Linux图形化界面怎么进入?CentOS 7图形界面切换

CentOS 7默认只安装命令行界面。要切换到图形界面,需要先检查系统是否安装图形界面,在终端输入以下命令: systemctl get-default若是返回结果是“multi-user.target”表示系统没有安装图形界面;若是返回结果是“graphical.target…

上传jar到github仓库,作为maven依赖存储库

记录上传maven依赖包到github仓库问题 利用GitHubPackages作为依赖的存储库踩坑1 仓库地址问题踩坑2 Personal access tokens正确姿势一、创建一个普通仓库,比如我这里是fork的腾讯Shadow到本地。地址是:https://github.com/dhs964057117/Shadow二、生成…

【分享】如何将word格式文档转化为PDF格式

在日常的办公和学习中,我们经常需要将Word文档转换为PDF格式。PDF作为一种通用的文件格式,具有跨平台、易读性高等优点,因此在许多场合下都更为适用。那么,如何实现Word转PDF呢?本文将介绍几种常用的方法,帮…

Git推送本地项目到gitee远程仓库

Git 是一个功能强大的分布式版本控制系统,它允许多人协作开发项目,同时有效管理代码的历史版本。开发者可以克隆一个公共仓库到本地,进行更改后将更新推送回服务器,或从服务器拉取他人更改,实现代码的同步和版本控制。…