机器学习运用-信用卡交易诈骗预测

简介

本项目应用XGBoost算法对数据进行分析并建模预测信用卡交易是否具有欺骗性,属于机器学习相关的二分类任务。

XGboost

XGBoost是一个优化的分布式梯度提升库,旨在实现高效、灵活和便携。XGBoost 不仅提供了一个强大的机器学习算法,也提供了一个高度灵活的接口,可以对算法进行详细的控制。

  • 正则化:引入了正则化参数,有助于防止模型过拟合。这使得 XGBoost 的性能通常优于其他梯度提升算法。
  • 并行处理:并行处理能够更快地构建模型。这是通过在每一次迭代中,利用所有可用的 CPU 核心来计算决策树的节点。
  • 灵活性:允许用户自定义优化目标和评估标准。
  • 处理缺失值:XGBoost 有内置的方法来处理缺失值。
  • 剪枝:与 GBM 不同,XGBoost 中的树是深度优先生成的,然后通过剪枝来防止过拟合。

关于 model_xgb.feature_importances_

feature_importances_ 是 XGBoost 模型的一个属性,它返回一个数组.

表示每个特征在模型中的重要性(权重)。这个重要性是通过计算每个特征在模型中所有树的决策中的平均贡献来得到的。

这个属性可以帮助你理解模型的决策过程,也可以帮助你选择和优化特征。例如,你可以使用 feature_importances_ 来识别和删除那些对模型贡献不大的特征,从而简化模型并可能提高其性能。

逻辑回归

逻辑回归是一种统计模型,用于预测二元或多元分类问题的概率。

在二元逻辑回归中,模型预测的是某个事件发生的概率。

例如,一个电子邮件是垃圾邮件的概率,或者一个患者有某种疾病的概率。

逻辑回归的主要优点:

它不仅可以预测一个事件是否会发生(即,分类),还可以预测事件发生的概率。这使得逻辑回归在许多领域,如医学、经济学和社会科学中,都有广泛的应用。

逻辑回归的工作原理:

它使用**逻辑函数(也称为 sigmoid 函数)将线性回归的输出转换为介于 0 和 1 之间的概率。**然后,这个概率可以用来做出预测。例如,如果预测的概率大于 0.5,我们可以预测事件会发生;如果预测的概率小于 0.5,我们可以预测事件不会发生。

逻辑回归重要特性:

它可以使用一种称为**“最大似然估计”**的方法来估计模型参数。这种方法的目标是找到一组参数,使得给定这组参数,观察到的数据出现的概率最大。

逻辑回归还有一些其他的优点,例如,它可以处理分类和连续的特征,可以容易地更新模型以包含新的数据,而且它的输出可以很容易地解释。


代码

导入相关工具包

import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
from imblearn.over_sampling import SMOTE
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression as LR
from sklearn.model_selection import cross_val_score as CVS
from xgboost import XGBClassifier as XGBC
from sklearn.metrics import accuracy_score, recall_score, precision_score, f1_score

import warnings
warnings.filterwarnings('ignore')

Seaborn

Seaborn 基于 matplotlib 的 Python 数据可视化库。它提供了一种高度交互式界面,方便用户无需复杂代码即可制作出具有吸引力的统计图形

  • 主要优点是能够处理 pandas 数据框,并且其可视化操作更接近于实际数据的形式。

  • 也提供了大量的可视化类型,包括箱线图、kde图、自动拟合和绘制线性回归模型的能力、热力图、时间序列数据的可视化等。


数据读取及预处理

df=pd.read_csv('./card_transdata.csv')
#数据探索
df.head()
print('数据维度为:\n',df.shape)
print('缺失值为:\n',df.isnull().sum()) #缺失值检验
print('重复值\n',df.duplicated().sum())  #重复值检验
df.describe()                           #特征数值统计

在这里插入图片描述


探索性分析

#数据分布详情
plt.rcParams['font.sans-serif']=['Microsoft YaHei']   #设置matplotlib的字体
plt.rcParams['axes.unicode_minus']=False 
n_sample=df.shape[0]
n_0_sample=df.fraud.value_counts()[0]
n_1_sample=df.fraud.value_counts()[1]
print('样本个数:{};0占{};1占{}'.format(n_sample,n_0_sample/n_sample,n_1_sample/n_sample))

样本个数:1000000;0占0.912597;1占0.087403

df_t=df.fraud.value_counts().reset_index()
df_t.replace({0:'非欺诈',1:'欺诈'},inplace=True)

fig=plt.figure(figsize=(10,4))
ax1=fig.add_subplot(1,2,1)
ax1.spines['top'].set_visible(False)
ax1.spines['right'].set_visible(False)
sns.barplot(x='index',y='fraud',data=df_t)
plt.xlabel('')
plt.ylabel('count',fontdict={'fontsize':12})
ax2=fig.add_subplot(1,2,2)
plt.pie(x=df_t['fraud'],labels=df_t['index'],autopct='%1.1f%%',explode=[0.1,0],startangle=90,counterclock=False,wedgeprops={'linewidth':1,'edgecolor':"black"})
plt.axis('square')
plt.show()

在这里插入图片描述

#数据内部相关性热力图
correlation_matrix=df.corr()
sns.heatmap(correlation_matrix,annot=True,cmap='coolwarm',linewidths=0.5)

在这里插入图片描述

#对目标变量进行过采样
X=df.iloc[:,:-1]
y=df.iloc[:,-1]

smote=SMOTE()
X_resampled,y_resampled=smote.fit_resample(X,y)

n_sample_new=X_resampled.shape[0]
n_0_sample_new=y_resampled.value_counts()[0]
n_1_sample_new=y_resampled.value_counts()[1]

print('样本个数:{};0占{};1占{}'.format(n_sample_new,n_0_sample_new/n_sample_new,n_1_sample_new/n_sample_new))



划分训练集和测试集

X_train,X_test,y_train,y_test=train_test_split(X_resampled,y_resampled,test_size=0.2,random_state=1025)

逻辑回归和XGboost

model_LR=LR(penalty="l2")                #l2正则化
model_LR.fit(X_train,y_train)
model_LR.score(X_test,y_test)

CVS(model_LR,X_train,y_train,cv=5).mean()         #五次交叉验证,取平均值

model_xgb=XGBC(n_estimators=100,max_depth=3)
model_xgb.fit(X_train,y_train)
model_xgb.score(X_test,y_test)

CVS(model_xgb,X_train,y_train,cv=5).mean()        #使用xgboost原理同上
y_test_pred=model_xgb.predict(X_test)

评价

auc=accuracy_score(y_test,y_test_pred)
print(f"准确率为:{format(auc)}")

recall=recall_score(y_test,y_test_pred)
print(f"召回率为:{format(recall)}")

pre=precision_score(y_test,y_test_pred)
print(f"精确度为:{format(pre)}")

f1=f1_score(y_test,y_test_pred)
print(f"F1-SCORE为:{format(f1)}")

model_xgb.feature_importances_

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

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

相关文章

笔试强训未触及题目(个人向)

NC398 腐烂的苹果 1.题目 2.解析 这是一个广度优先搜索问题,我们可以先找到所有的烂苹果,把它加入到队列中,然后再同时让这几个苹果向外面腐蚀,我们可以用一个boolean数组来表示是否被腐蚀,也可以直接在原数组中将这…

李宏毅2022机器学习/深度学习 个人笔记(2)

本系列用于推导、记录该系列视频中本人不熟悉、或认为有价值的知识点 本篇记录第一讲(选修):神奇宝贝分类(续) 如图,boundary变为直线,结果也有上升 我们不一定采用高斯几率模型,…

npm 重要知识

1. npm config ls -l 此命令可以查看npm当前所有配置信息 2. .npmrc是npm重要的配置文件 位置在:C:\Users\{用户名} , 如下图 参考下文链接: https://www.cnblogs.com/zhuoss/p/17830408.html

cocos creator 3.6 发布web手机端 加载进度条添加

cocos creator 升级到3.x之后加载进度条取消了,测试了多个3.x版本最终以creator 3.6.3版本,构建了简单的进度加载 参考链接: https://forum.cocos.org/t/topic/137113 打包web-mobile后,没有进度条。加载的时候只显示一个黑屏。…

MYSQL之增删改查(下)

前言: 以下是MySQL最基本的增删改查语句,很多IT工作者都必须要会的命令,也 是IT行业面试最常考的知识点,由于是入门级基础命令,所有所有操作都建立在单表 上,未涉及多表操作。 4.3 高级查询 4.3.1 聚合函…

【Unity学习笔记】第十三 · tag与layer(运行时创建tag和layer)

参考: Unity手册 标签Unity手册 LayersIs it possible to create a tag programmatically?脚本自动添加tag和Layer 注:本文使用Unity版本是2022.3.23f1 转载引用请注明出处:🔗https://blog.csdn.net/weixin_44013533/article/de…

利用OpenCV4.9制作自己的线性滤波器!

返回:OpenCV系列文章目录(持续更新中......) 上一篇:OpenCV4.9使用 inRange 的阈值操作 下一篇 :OpenCV系列文章目录(持续更新中......) 目标 在本教程中,您将学习如何: 使用 OpenCV 函数 f…

Jenkins和gitlab实现CICD

1 背景 在开发TracerBackend服务的时候,每次更改代码之后需要推送到gitlab,然后ssh登录到Ubuntu的服务器上部署新的代码。服务成功启动之后,在本地执行测试用例,觉得这一套操作流程还是挺复杂的。想起公司的代码发布流程&#xf…

git工具简单使用

文章目录 git上传克隆README.gitignore常用指令冲突 git 进行版本控制的版本控制器。安装git yum install -y git 配置git git config --global user.email "youexample.com" 告诉git你的邮箱是什么?最好输入你的gitee的注册邮箱git config --global …

面向对象(封装,继承,多态)

1.封装【encapsulation】 【/ɪnˌkpsjuˈleɪʃ(ə)n/】 在面向对象程式设计方法中,封装(英语:Encapsulation)是指一种将抽象性函式接口的实现细节部分包装、隐藏起来的方法。 封装可以被认为是一个保护屏障,防止该…

Day60 单调栈 part03

Day60 单调栈 part03 最后一天啦!完结撒花~ 84.柱状图中最大的矩形 我的思路: 感觉和接雨水差不多,只需要多考虑一些情况 双指针 lheight 和 rheight 分别是用来存储每个柱子的左边界和右边界的数组。 解答: class Solutio…

vue element ui 打开弹窗出现黑框问题

文章目录 问题描述解决方案 问题描述 大家好!今天是2024年4月20日 | 农历三月十二,周六的我又做在公司里面写起了代码 今天在做项目的时候遇到一个奇怪的问题,如下图所示: 因为这个页面我做了两个弹框,先弹出来第一个弹…

前端工程化01-复习jQuery当中的AJAX

4.1、基础概念 什么是服务器 一台存储网站内容、网站文件的电脑 什么是资源 网站中使用的文件(html、css、图片、…)这些东西就叫做资源数据也是服务器上的资源,而且是一个网站的灵魂 客户端 客户端应该指上网的设备但是在前端开发中&a…

SQLite 的命令行 Shell(三十一)

返回:SQLite—系列文章目录 上一篇:SQLite FTS5 扩展(三十) 下一篇:SQLite—系列文章目录 1. 入门 SQLite 项目提供了一个名为 sqlite3(或 Windows 上的sqlite3.exe)的简单命令行程序 …

密码学 | 承诺:绑定性 + 隐藏性

🥑原文:承诺方案(Commitment)学习笔记 🥑写在前面: 本文属搬运博客,自己留存学习。本文只会讲承诺的两个安全属性,不会再讲解承诺的定义。 正文 承诺方案需要满足两个安全属性&…

【Pytorch】Yolov5中CPU转GPU过程报错完善留档归纳

Yolov5 从CPU转GPU Python多版本切换 Conda包处理 文章目录 Yolov5 从CPU转GPU Python多版本切换 Conda包处理1.Pytorch套件中存在版本不匹配2.numpy停留在3.8没跟上pytorch2.2.23.ModuleNotFoundError: No module named pandas._libs.interval4.ImportError: cannot imp…

SpringBoot启动流程深度解析

写在前面: 由于该系统是底层系统,以微服务形式对外暴露dubbo服务,所以本流程中SpringBoot不基于jetty或者tomcat等容器启动方式发布服务,而是以执行程序方式启动来发布(参考下图keepRunning方法)。 本文以调试一个实际的SpringBoo…

【做一名健康的CSDNer】

程序员由于工作性质,常常需要长时间面对电脑,这可能对身心健康带来挑战。以下是一些实用的建议,帮助程序员保持身心健康: 规律生活:建立健康的生活习惯,包括规律的作息时间和固定的饮食时间,保证…

书生·浦语大模型实战营Day04OpenXLab 部署

书生浦语大模型实战营Day04OpenXLab 部署 如何在 OpenXLab 部署一个 InternLM2-7B chat 的应用。 OpenXLab浦源平台介绍 OpenXLab 浦源平台以开源为核心,旨在构建开源开放的人工智能生态,促进学术成果的开放共享。OpenXLab面向 AI 研究员和开发者提供…

【python】使用python和selenium实现某平台自动化上传作品的全步骤

第一,我们需要下载python并安装 下载地址:https://www.python.org/downloads/release/python-3123/ 3.x版本的python自带pip工具,因此不需要额外下载。 ModuleNotFoundError: No module named seleniumpip用于下载python适用的各类模块&…