用Python实现SVM搭建金融反诈模型(含调试运行)

1.概述

信用卡盗刷一般发生在持卡人信息被不法分子窃取后,复制卡片进行消费或信用卡被他人冒领后激活并消费等情况下。一旦发生信用卡盗刷,持卡人和银行都会遭受一定的经济损失。本节要运用支持向量机分类算法搭建一个金融反欺诈模型。

2.数据集

使用的数据集共有1000条客户信用卡的交易数据。其中,有400个欺诈样本,600个非欺诈样本。数据集中变量的详细描述如下表所示,表格中的“欺诈标签”列为目标变量,若是盗刷信用卡产生的交易则标记为1,代表欺诈,正常交易则标记为0。剩下的字段为特征变量,只选取了5个特征变量,在实际中使用的特征变量远很多,根据这些数据搭建支持向量机模型。

3、分析过程 

(1)数据读取

首先通过pandas库读取数据,代码如下:

import pandas as pd
df = pd.read_excel('信用卡交易数据.xlsx')
df.head()

通过打印df.head()查看表格的前5行,结果如下所示:

其中第1列“欺诈标签”为目标变量y,其余5列为特征变量X,接下来我们将利用这些数据搭建金融反诈识别模型。 

(2)提取特征变量和目标变量

首先将特征变量和目标变量分别提取出来,代码如下:

X = df.drop(columns='欺诈标签') 
y = df['欺诈标签']

(3)划分训练集和测试集

提取完特征变量和目标变量后,将数据划分为训练集和测试集,代码如下:

# 从 sklearn 的 model_selection 模块中导入 train_test_split 函数,用于将数据集划分为训练集和测试集
from sklearn.model_selection import train_test_split# 将数据集划分为训练集和测试集
# X_train 存储训练集的特征变量,X_test 存储测试集的特征变量
# y_train 存储训练集的目标变量,y_test 存储测试集的目标变量
# X 和 y 是之前代码中提取的特征变量和目标变量
# test_size=0.2 表示将 20% 的数据划分为测试集,80% 的数据划分为训练集
# stratify=y 确保划分后的训练集和测试集在目标变量 y 的不同类别上的比例与原始数据中的比例相同
# random_state=123 确保划分结果的可重复性
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, stratify=y,random_state=123)

①test_size=0.2表示我们希望将数据集的20%作为测试集,相应地,80% 的数据将作为训练集。

②stratify=y是一个重要的参数,当y是分类变量时,使用该参数可以确保划分后的训练集和测试集在不同类别上的比例与原始数据集的比例保持一致,这对于分类任务非常重要,避免某些类别在测试集中的比例失衡。

③random_state=123是一个随机数种子,它确保每次运行代码时,划分的结果是一致的。如果不设置这个参数,每次运行代码得到的训练集和测试集可能会有所不同,因为划分过程中涉及随机采样。设置该参数可以使结果可重复,方便代码的调试和结果的比较。

(4)模型构建

划分好训练集和测试集之后,导入sklearn中的SVM工具包,核函数采用线性核函数进行模型训练,代码如下:

# 从 sklearn 的 svm 模块中导入 SVC 类,SVC 是支持向量机分类器
from sklearn.svm import SVC # 创建一个 SVC 模型的实例,使用线性核函数
# kernel='linear' 表示使用线性核函数,适用于线性可分的数据集
svm_model = SVC(kernel='linear') # 使用训练集的特征变量 X_train 和目标变量 y_train 对 SVC 模型进行训练
svm_model.fit(X_train, y_train)

①from sklearn.svm import SVC:从scikit-learn的svm(支持向量机)模块中导入 SVC 类。SVC 是 Support Vector Classifier 的缩写,是支持向量机分类器,它可以用于分类任务。

②fit方法是scikit-learn中模型的核心训练方法,它将学习如何根据输入的训练数据来预测目标变量。对于SVC模型,它会找到最优的超平面(在使用线性核函数的情况下)或在高维空间中找到最优的决策边界,以将不同类别的数据分开。

(5)模型评估与预测

想要查看测试集的预测准确度,可以使用accuracy_score()函数,如下代码:

# 使用训练好的 svm_model 对测试集的特征变量 X_test 进行预测,得到预测结果 y_pred
y_pred = svm_model.predict(X_test)# 从 sklearn 的 metrics 模块中导入 accuracy_score 函数,用于计算预测的准确率
from sklearn.metrics import accuracy_score# 使用 accuracy_score 函数计算预测结果 y_pred 和真实结果 y_test 的准确率
score = accuracy_score(y_pred, y_test)# 打印出准确率的得分
print(score)

将score打印输出,结果为0.785,也就是说,模型对整个测试集的预测准确度为78.5%。 对于分类模型,需要关注查准率和查全率,Python可以通过如下代码计算每一个类别的查准率和查全率:

# 使用 svm_model 的 score 方法计算在测试集上的准确率
svm_model.score(X_test, y_test)# 从 sklearn 的 metrics 模块中导入 classification_report 函数,用于生成分类报告
from sklearn.metrics import classification_report# 使用 classification_report 函数对测试集的真实结果 y_test 和预测结果 y_pred 生成分类报告并打印
print(classification_report(y_test, y_pred))

 可见对于判断是否欺诈,模型的 precision(查准率)为0.82,查准率比较高,但是recall(查全率)为0.59,命中率不够高,表示有一些实际是欺诈的客户模型没能识别出来,遗漏了。因此,可以再调节模型的参数,以获得更优的预测效果。

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

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

相关文章

HunyuanVideo 文生视频模型实践

HunyuanVideo 文生视频模型实践 flyfish 运行 HunyuanVideo 模型使用文本生成视频的推荐配置(batch size 1): 模型分辨率(height/width/frame)峰值显存HunyuanVideo720px1280px129f60GHunyuanVideo544px960px129f45G 本项目适用于使用 N…

第6章 ThreadGroup详细讲解(Java高并发编程详解:多线程与系统设计)

1.ThreadGroup 与 Thread 在Java程序中, 默认情况下, 新的线程都会被加入到main线程所在的group中, main线程的group名字同线程名。如同线程存在父子关系一样, Thread Group同样也存在父子关系。图6-1就很好地说明了父子thread、父…

nginx常用配置 (含负载均衡、反向代理、限流、Gzip压缩、图片防盗链 等示例)

nginx的配置文件通常在 /etc/nginx/nginx.conf , /etc/nginx/conf.d/*.conf 中, 一般直接 改 conf.d目录下的 default.conf文件, 然后 先检测配置文件是否有错误 nginx -t 再重新加载配置文件 或 重启nginx,命令如下 nginx -s reload 或…

Python编程与在线医疗平台数据挖掘与数据应用交互性研究

一、引言 1.1 研究背景与意义 在互联网技术飞速发展的当下,在线医疗平台如雨后春笋般涌现,为人们的就医方式带来了重大变革。这些平台打破了传统医疗服务在时间和空间上的限制,使患者能够更加便捷地获取医疗资源。据相关报告显示,中国基于互联网的医疗保健行业已进入新的…

Linux网络_套接字_UDP网络_TCP网络

一.UDP网络 1.socket()创建套接字 #include<sys/socket.h> int socket(int domain, int type, int protocol);domain (地址族): AF_INET网络 AF_UNIX本地 AF_INET&#xff1a;IPv4 地址族&#xff0c;适用于 IPv4 协议。用于网络通信AF_INET6&#xff1a;IPv6 地址族&a…

1 行命令引发的 Go 应用崩溃

一、前言 不久前&#xff0c;阿里云 ARMS 团队、编译器团队、MSE 团队携手合作&#xff0c;共同发布并开源了 Go 语言的编译时自动插桩技术。该技术以其零侵入的特性&#xff0c;为 Go 应用提供了与 Java 监控能力相媲美的解决方案。开发者只需将 go build 替换为新编译命令 o…

R语言的并发编程

R语言的并发编程 引言 在现代计算中&#xff0c;如何有效地利用计算资源进行数据处理和分析已成为一个重要的研究方向。尤其在大数据时代&#xff0c;数据量的急剧增加让单线程处理方式显得力不从心。为了解决这一问题&#xff0c;各种编程语言都开展了并发编程的研究和应用。…

Flink(十):DataStream API (七) 状态

1. 状态的定义 在 Apache Flink 中&#xff0c;状态&#xff08;State&#xff09; 是指在数据流处理过程中需要持久化和追踪的中间数据&#xff0c;它允许 Flink 在处理事件时保持上下文信息&#xff0c;从而支持复杂的流式计算任务&#xff0c;如聚合、窗口计算、联接等。状…

C#项目生成时提示缺少引用

问题描述 刚从git或svn拉取下来的C#项目&#xff0c;在VS生成时提示缺少引用 解决方案 1、从“管理NuGet程序包”中下载并安装缺少的引用&#xff0c;如果引用较多逐个下载安装会比较麻烦&#xff0c;建议采用下面第2种方案处理 2、通过命令对所有缺少引用进行安装 &#…

EAMM: 通过基于音频的情感感知运动模型实现的一次性情感对话人脸合成

EAMM: 通过基于音频的情感感知运动模型实现的一次性情感对话人脸合成 1所有的材料都可以在EAMM: One-Shot Emotional Talking Face via Audio-Based Emotion-Aware Motion Model网站上找到。 摘要 尽管音频驱动的对话人脸生成技术已取得显著进展&#xff0c;但现有方法要么忽…

BeanFactory 是什么?它与 ApplicationContext 有什么区别?

谈到Spring&#xff0c;那势必要讲讲容器 BeanFactory 和 ApplicationContext。 BeanFactory是什么&#xff1f; BeanFactory&#xff0c;其实就是 Spring 容器&#xff0c;用于管理和操作 Spring 容器中的 Bean。可能此时又有初学的小伙伴会问&#xff1a;Bean 是什么&#x…

【深度学习】Huber Loss详解

文章目录 1. Huber Loss 原理详解2. Pytorch 代码详解3.与 MSELoss、MAELoss 区别及各自优缺点3.1 MSELoss 均方误差损失3.2 MAELoss 平均绝对误差损失3.3 Huber Loss 4. 总结4.1 优化平滑4.2 梯度较好4.3 为什么说 MSE 是平滑的 1. Huber Loss 原理详解 Huber Loss 是一种结合…

python实现pdf转word和excel

一、引言   在办公中&#xff0c;我们经常遇收到pdf文件格式&#xff0c;因为pdf格式文件不易修改&#xff0c;当我们需要编辑这些pdf文件时&#xff0c;经常需要开通会员或收费功能才能使用编辑功能。今天&#xff0c;我要和大家分享的&#xff0c;是如何使用python编程实现…

【PyCharm】连接Jupyter Notebook

【PyCharm】相关链接 【PyCharm】连接 Git【PyCharm】连接Jupyter Notebook【PyCharm】快捷键使用【PyCharm】远程连接Linux服务器【PyCharm】设置为中文界面 【PyCharm】连接Jupyter Notebook PyCharm连接Jupyter Notebook的过程可以根据不同的需求分为 本地连接 和 远程连…

Java锁 公平锁和非公平锁 ReentrantLock() 深入源码解析

卖票问题 我们现在有五个售票员 五个线程分别卖票 卖票 ReentrantLock(); 运行后全是 a 对象获取 非公平锁缺点之一 容易出现锁饥饿 默认是使用的非公平锁 也可以传入一个 true 参数 使其变成公平锁 生活中排队讲求先来后到 视为公平 程序中的公平性也是符合请求锁的绝对…

「刘一哥GIS」系列专栏《GRASS GIS零基础入门实验教程(配套案例数据)》专栏上线了

「刘一哥GIS」系列专栏《GRASS GIS零基础入门实验教程》全新上线了&#xff0c;欢迎广大GISer朋友关注&#xff0c;一起探索GIS奥秘&#xff0c;分享GIS价值&#xff01; 本专栏以实战案例的形式&#xff0c;深入浅出地介绍了GRASS GIS的基本使用方法&#xff0c;用一个个实例讲…

企业级NoSQL数据库Redis

1.浏览器缓存过期机制 1.1 最后修改时间 last-modified 浏览器缓存机制是优化网页加载速度和减少服务器负载的重要手段。以下是关于浏览器缓存过期机制、Last-Modified 和 ETag 的详细讲解&#xff1a; 一、Last-Modified 头部 定义&#xff1a;Last-Modified 表示服务器上资源…

使用Flask和Pydantic实现参数验证

使用Flask和Pydantic实现参数验证 1 简介 Pydantic是一个用于数据验证和解析的 Python 库&#xff0c;版本2的性能有较大提升&#xff0c;很多框架使用Pydantic做数据校验。 # 官方参考文档 https://docs.pydantic.dev/latest/# Github地址 https://github.com/pydantic/pyd…

ScratchLLMStepByStep:训练自己的Tokenizer

1. 引言 分词器是每个大语言模型必不可少的组件&#xff0c;但每个大语言模型的分词器几乎都不相同。如果要训练自己的分词器&#xff0c;可以使用huggingface的tokenizers框架&#xff0c;tokenizers包含以下主要组件&#xff1a; Tokenizer: 分词器的核心组件&#xff0c;定…

C# OpenCvSharp 部署3D人脸重建3DDFA-V3

目录 说明 效果 模型信息 landmark.onnx net_recon.onnx net_recon_mbnet.onnx retinaface_resnet50.onnx 项目 代码 下载 参考 C# OpenCvSharp 部署3D人脸重建3DDFA-V3 说明 地址&#xff1a;https://github.com/wang-zidu/3DDFA-V3 3DDFA_V3 uses the geometri…