首页 > 编程语言 >用Python实现SVM搭建金融反诈模型(含调试运行)

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

时间:2025-01-19 23:31:31浏览次数:3  
标签:SVM 变量 Python 反诈 SVC train 测试 test score

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,命中率不够高,表示有一些实际是欺诈的客户模型没能识别出来,遗漏了。因此,可以再调节模型的参数,以获得更优的预测效果。

标签:SVM,变量,Python,反诈,SVC,train,测试,test,score
From: https://blog.csdn.net/ALISHENGYA/article/details/145249353

相关文章

  • 【新人系列】Python 入门(二十七):Python 库
    ✍个人博客:https://blog.csdn.net/Newin2020?type=blog......
  • 第11篇:从入门到精通:掌握python特殊方法与运算符重载
    第11篇:特殊方法与运算符重载内容简介本篇文章将深入探讨Python中的特殊方法(魔术方法)与运算符重载。您将学习如何使用魔术方法(如__init__、__str__、__repr__等)来定义对象的基本行为,掌握运算符重载的技巧,实现自定义对象的比较与运算。通过丰富的代码示例,您将能够灵活地扩展......
  • Unraid 安装 WindowsServer2019 及 NGINX、PHP、Python 环境
    一、安装虚拟机使用Unraid安装。项目值初始内存:4096MB最大值内存:6144MB机器:i440fx-7.2BIOS:OVMF启用USB启动引导:NoHyper-V:是USB控制器:2.0(EHCI)操作系统安装ISO:windows_server_2019.iso操作系统安装光盘总线:......
  • 图解 Python 编程(5) | Python流程控制
    ......
  • 极简python编程 CH0--python的下载与环境配置
    写在前面    本教程是一篇极简python教程,旨在使读者能够在最短的时间内掌握python的基础语法并能进行简单的数据处理工作。    由于本教程的目标读者是所有水平的编程初学者,因此所涉及的内容必然都是最简单的,且必然会有一定疏漏,希望各位大佬多多包涵orz。 ......
  • Python与Excel:开启自动化办公新时代 
    引言 在当今数字化办公的大环境下,日常工作中处理Excel表格的任务愈发频繁且繁杂。传统的手动操作不仅耗时费力,还容易出错。而Python作为一门功能强大且应用广泛的编程语言,为我们实现Excel办公自动化提供了高效的解决方案。借助Python的丰富库和简洁语法,能够轻松完成诸如数......
  • 【华为OD-E卷 - 第k个排列 100分(python、java、c++、js、c)】
    【华为OD-E卷-第k个排列100分(python、java、c++、js、c)】题目给定参数n,从1到n会有n个整数:1,2,3,…,n,这n个数字共有n!种排列。按大小顺序升序列出所有排列的情况,并一一标记,当n=3时,所有排列如下:“123”“132”“213”“231”“312”“321”给......
  • python图书管理系统
    效果展示概述本教程将引导你构建一个基于Python的图书管理系统,该系统使用Tkinter作为图形用户界面(GUI),并利用SQLite数据库存储和管理图书信息。通过本教程,你将学习如何实现添加、编辑、删除以及查询图书的功能。准备工作确保你的计算机上安装了Python3.x版本。由于我们......
  • 【华为OD-E卷 - 最长连续子序列 100分(python、java、c++、js、c)】
    【华为OD-E卷-最长连续子序列100分(python、java、c++、js、c)】题目有N个正整数组成的一个序列。给定整数sum,求长度最长的连续子序列,使他们的和等于sum,返回此子序列的长度,如果没有满足要求的序列,返回-1输入描述第一行输入是:N个正整数组成的一个序列第二行输入是:给定......
  • 【华为OD-E卷 - 找出两个整数数组中同时出现的整数 100分(python、java、c++、js、c)】
    【华为OD-E卷-找出两个整数数组中同时出现的整数100分(python、java、c++、js、c)】题目现有两个整数数组,需要你找出两个数组中同时出现的整数,并按照如下要求输出:有同时出现的整数时,先按照同时出现次数(整数在两个数组中都出现并目出现次数较少的那个)进行归类,然后按照出......