当前位置: 首页 > article >正文

用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.kler.cn/a/511113.html

相关文章:

  • C#中System.Text.Json:从入门到精通的实用指南
  • vue+高德API搭建前端3D交通页面
  • 【Django开发】django美多商城项目完整开发4.0第12篇:商品部分,表结构【附代码文档】
  • owasp SQL 注入-03 (原理)
  • 国产编辑器EverEdit -重复行
  • 【算法】算法基础课模板大全——第一篇
  • C++的auto_ptr智能指针:从诞生到被弃用的历程
  • 蓝桥杯小白备考指南
  • AI Agent智能体的分类-类型有哪些?
  • MCU、MPU、SOC、ECU、CPU、GPU的区别到底是什么
  • 第17章:Python TDD回顾与总结货币类开发
  • 渗透测试之XEE[外部实体注入]漏洞 原理 攻击手法 xml语言结构 防御手法
  • C语言初阶--函数
  • MCP(Model Context Protocol)模型上下文协议 进阶篇4 - 发展计划
  • FPGA 时钟约束
  • MySQL union和union all
  • 算法随笔_12:最短无序子数组
  • 基于Spring Boot的车间调度管理系统
  • 前端TS 时间格式化函数
  • VSCode+EIDE 环境搭建
  • 仿 RabbitMQ 的消息队列1(实战项目)
  • HTML5 教程(下)
  • 第12章:Python TDD完善货币加法运算(一)
  • Linux操作系统的灵魂,深度解析MMU内存管理
  • 为AI聊天工具添加一个知识系统 之49 “‘之47’和蒙板有关的术语”的腾讯云 AI 代码助手答问(部分)
  • 【版图设计】2025年 最新 Cadence Virtuoso IC617 虚拟机环境配置全过程 集成电路版图设计环境配置