信用卡欺诈检测案例 -- 机器学习项目基础篇(2)

news2024/10/6 12:33:51

这个案例面临的挑战是识别欺诈性信用卡交易,以便信用卡公司的客户不会因为他们没有购买的物品而被收取费用。

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

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

如何应对这些挑战?

  1. 使用的模型必须足够简单和快速,以检测异常并尽快将其分类为欺诈交易。
  2. 不平衡可以通过适当地使用一些方法来处理,我们将在下一段中讨论这些方法。
  3. 为了保护用户的隐私,可以减少数据的维度。
  4. 必须采用更可靠的来源,对数据进行双重检查,至少用于训练模型。
  5. 我们可以让模型变得简单和可解释,这样当骗子通过一些调整来适应它时,我们就可以有一个新的模型来部署。

以下代码均在jupyter notebook中工作。
您可以从此链接下载数据集 https://www.kaggle.com/datasets/mlg-ulb/creditcardfraud

导入所有必要的库

# import the necessary packages
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from matplotlib import gridspec

加载数据

data = pd.read_csv("credit.csv")

展示数据

data.head()

在这里插入图片描述

描述数据

print(data.shape)
print(data.describe())

在这里插入图片描述
是时候解释我们正在处理的数据了。

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.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()
Amount 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

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

绘制相关矩阵

相关性矩阵以图形方式为我们提供了特征如何相互关联的概念,并可以帮助我们预测哪些特征与预测最相关。

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

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

分隔X和Y值

将数据划分为输入参数和输出值格式

# 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

输出:

(284807, 30)
(284807, )

训练和测试数据划分

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

# Using Scikit-learn to split data into training and testing sets
from sklearn.model_selection import train_test_split
# Split the data into training and testing sets
xTrain, xTest, yTrain, yTest = train_test_split(
        xData, yData, test_size = 0.2, random_state = 42)

使用scikit learn构建随机森林模型

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

建立各种评价参数

# Evaluating the classifier
# printing every score of the classifier
# scoring in anything
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
  
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.9995611109160493
The precision is 0.9866666666666667
The recall is 0.7551020408163265
The F1-Score is 0.8554913294797689
The Matthews correlation coefficient is0.8629589216367891

可视化混淆矩阵

# printing the confusion matrix
LABELS = ['Normal', 'Fraud']
conf_matrix = confusion_matrix(yTest, yPred)
plt.figure(figsize =(12, 12))
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()

在这里插入图片描述
与其他算法进行比较,不处理数据的不平衡性。
在这里插入图片描述
正如你可以看到我们的随机森林模型,我们得到了一个更好的结果,即使是最棘手的召回部分。

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

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

相关文章

Edge解决默认Bing搜索跳转到国内版的问题

近期BingGPT申请通过以后,每次用PC端Edge去跳转的时候不管是否念Proxy咒都会进入国内版本Bing,排查得到默认Bing参数如下 因此,在edge://settings/searchEngines内添加搜索引擎,具体参数如下: 搜索引擎:必应…

嵌入式硬件系统的基本组成

嵌入式硬件系统的基本组成 嵌入式系统的硬件是以包含嵌入式微处理器的SOC为核心,主要由SOC、总线、存储器、输入/输出接口和设备组成。 嵌入式微处理器 每个嵌入式系统至少包含一个嵌入式微处理器 嵌入式微处理器体系结构可采用冯.诺依曼(Von Neumann&…

算法之快速排序

快速排序广泛应用的主要原因是高效,核心算法是分而治之。Java标准库中Arrays类的sort方法里源码也正是使用了优化后的快速排序。 原理 快速排序的核心思想是分治:选择数组中某个数作为基数,通过一躺排序将要排序的数据分割成独立的两部分&a…

第十三届蓝桥杯复盘及未来规划

2022年4月28日 第十三届蓝桥杯结果揭晓 面对这份成绩,心里有些沉重 qwq 心里五味杂陈 当看到距离省1只差4个名额,当看到清晰又刺眼的’二等奖‘,当看到社群里面好多小伙伴拿到了省1的同时分享着喜悦,当想起自己从12月中旬开始写算…

密码学的一些常识

1,对称密码、公钥密码、消息认证、数字签名的对比 对称密码公钥密码发送者共享秘钥加密公钥加密接收者共享秘钥解密私钥解密秘钥配送问题存在不存在,但需要CA认证公钥机密性√√ 消息认证数字签名发送者共享秘钥计算MAC使用私钥对文本HASH值做签名接收者…

Linux 常用命令(快速复习)

基础命令 linux只有一个顶级目录/ ls命令 功能:列出文件夹信息 语法: ls [-l -h -a] [参数] 参数:被查看的文件夹,不提供参数,表示查看当前工作目录 -l,以列表形式查看 -h,配合-l,以…

如何手写一个@Async异步注解

如何手写一个Async异步注解 一、自定义注解二、编写AOP切面类三、编写测试类四、总结 一、自定义注解 自定义一个MyAsync注解,可以照抄Async Target({ElementType.METHOD, ElementType.TYPE}) Retention(RetentionPolicy.RUNTIME) Documented public interface My…

【计算机视觉|人脸建模】深度学习时代的3D人脸重建调查报告

本系列博文为深度学习/计算机视觉论文笔记,转载请注明出处 标题:3D Face Reconstruction in Deep Learning Era: A Survey 链接:3D Face Reconstruction in Deep Learning Era: A Survey - PubMed (nih.gov) 摘要 随着深度学习的出现和图形…

ARM裸机-8

1、ARM的编程模式和工作模式 1.1、ARM的基本设定 ARM采用的是32位架构 ARM约定: - Byte:8 bits - Halfword :16 bits (2 byte) - Word:32 bits (4 byte) 大部分ARM core 提供: - ARM 指令集 (32-bit) - Thumb 指令集 …

TiProxy 原理和实现

说明 在上篇《TiProxy 尝鲜》 中做了一些实验,比如加减tidb节点后tiproxy可以做到自动负载均衡,如果遇到会话有未提交的事务则等待事务结束才迁移。 本次主要研究这样的功能在tiproxy中是如何实现的,本次分享内容主要为以下几部分&#xff…

数据结构基础知识、名词概述

1.1 基本概念和术语1.1.1 数据、 数据元素、 数据项和数据对象1.1.2 数据结构1.1.3 数据类型和抽象数据类型 1.2 抽象数据类型的表示与实现1.3 算法与算法分析(1)1.4 算法与算法分析(2)1.5 算法与算法分析(3&#xff0…

gti 远程操作

目录 一. 分布式版本控制管理系统 1. 理解分布式版本控制管理系统 二. 创建远程仓库 ​编辑 ​编辑 三. 克隆远程仓库_HTTP 四. 克隆远程仓库_SSH 配置公钥 添加公钥 五. git 向远程仓库推送 六. 拉取远程仓库 七. 忽略特殊文件 八. 配置别名 一. 分布式版本控制管理…

JVM内存分配机制详解

文章目录 一、对象的创建流程1、类加载检查2、分配内存3、初始化4、设置对象头5、执行方法 二、对象内存分配1、栈上分配2、对象在Eden区分配3、大对象直接进入老年代4、长期存活的对象进入老年代5、对象动态年龄判断6、老年代空间分配担保机制 三、对象内存回收1、引用计数法2…

别再分库分表了,试试TiDB!

什么是NewSQL 传统SQL的问题 升级服务器硬件 数据分片 NoSQL 的问题 优点 缺点 NewSQL 特性 NewSQL 的主要特性 三种SQL的对比 TiDB怎么来的 TiDB社区版和企业版 TIDB核心特性 水平弹性扩展 分布式事务支持 金融级高可用 实时 HTAP 云原生的分布式数据库 高度兼…

RT1052 的四定时器

文章目录 1 Quad Timer,简称:QTMR2 单个通道的框图3 QTMR配置3.1 QTMR1 时钟使能。3.2 初始化 QTMR1。3.2.1 QTMR_Init 3.3 设置 QTMR1 通道 0 的定时周期。3.3.1QTMR_SetTimerPeriod 3.4 使能 QTMR1 通道 0 的比较中断。3.4.1 QTMR_EnableInterrupts 3.…

14. Spring AOP 的组成和实现

目录 1. Spring AOP 简介 2. AOP 的组成 2.1 切面(Aspect) 2.2 连接点(Join Point) 2.3 切点(Pointcut) 2.4 通知(Advice) 3. Spring AOP的实现 3.1 新建项目 3.2 添加 AOP …

Zebec Card 将在亚洲、拉美等地区推出,生态全球化加速

随着以Visa、特斯拉、BNY Mellon、BlackRock、Mastercard、Gucci等为代表的传统商业机构巨头,以及萨尔瓦多、中非共和国等为代表的国家不断的向加密货币领域布局,越来越多的投资者开始以新的眼光来看待加密货币,仅在2022年,加密货…

1400*B. I Hate 1111(思维+数学)

Example input 3 33 144 69 output YES YES NO 题意: 问一个数字是否可以由 11,111,1111,11111...... 任意倍数加和所得。 解析: 可以观察到 1111%110,11111%1110,而后面更大的11111111…

C++部署学习

gcc -E src/main.c -o src/main.i gcc -S src/main.c -o src/main.s gcc -C src/main.c -o src/main.o gcc src/main.c -o exec ./exec

Vue2第八节 收集表单数据

&#xff08;1&#xff09;文本类型/密码类型 v-model收集的是value值 用户输入的就是value值 <input type"text" v-model"usrInfo.account"> <input type"password" v-model"usrInfo.password"> &#xff08;2&#xf…