kaggle实战2信用卡反欺诈逻辑回归模型案例1

news2024/11/30 8:55:43

信用卡欺诈案例
数据集下载地址
https://storage.googleapis.com/download.tensorflow.org/data/creditcard.csv
参考不平衡数据的分类

文章目录

    • 只进行特征衍生,未进行数据标准化、上才样处理数据不平衡问题,得到的准确率和召回率居然很高
    • 如果不处理数据不平衡问题,进行过采样,召回率只有0.64了结果如下
    • 使用上采样处理数据不平衡问题,数据标准化处理,得到的准确率反而没那么高了
    • 交叉验证,接着以上代码
    • 测评数据的评估
    • 混淆矩阵和召回率

只进行特征衍生,未进行数据标准化、上才样处理数据不平衡问题,得到的准确率和召回率居然很高

import pandas as pd 
pd.set_option('display.float_format',lambda x: '%.2f' %x)
data = pd.read_csv('C:/Users/Administrator/Downloads/creditcard.csv')
data.head()

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

如果不处理数据不平衡问题,进行过采样,召回率只有0.64了结果如下

import pandas as pd 
pd.set_option('display.float_format',lambda x: '%.2f' %x)
data = pd.read_csv('C:/Users/Administrator/Downloads/creditcard.csv')
data['Hour'] = data['Time'].apply(lambda x : divmod(x,3600)[0])
feature = list(data.columns)
feature.remove('Class')
feature.remove('Time')
X = data[feature]
y = data['Class']
display(X.head(),y.head())
from sklearn.linear_model import LogisticRegression
model = LogisticRegression()
model.fit(X,y)
y_ = model.predict(X)
from sklearn.metrics import auc,roc_auc_score,roc_curve,recall_score,accuracy_score,classification_report,confusion_matrix
print('LogisticRegression准确率是:',accuracy_score(y,y_))
cm = confusion_matrix(y,y_)
recall = cm[1,1]/(cm[1,1]+cm[1,0])
print('LogisticRegression召回率率是:',recall)

proba_ = model.predict_proba(X)[:,1] #表示获取类别1的样本阳性,行用卡盗刷
fpr,tpr,thresholds = roc_curve(y,proba_)
roc_auc = auc(fpr,tpr) #曲线下的面积

import matplotlib.pyplot as plt
plt.title=('Receiver Operating Characteristic')
plt.plot(fpr,tpr,'b',label='AUC = %0.5f'% roc_auc)
plt.legend(loc='lower right')
plt.plot([0,1],[0,1],'r--')
plt.xlim([-0.1,1.0])
plt.ylim([-0.1,1.0])
plt.ylabel('True Positive Rate')
plt.xlabel('False Positive Rate')

在这里插入图片描述
在这里插入图片描述

使用上采样处理数据不平衡问题,数据标准化处理,得到的准确率反而没那么高了

import pandas as pd 
pd.set_option('display.float_format',lambda x: '%.2f' %x)
data = pd.read_csv('C:/Users/Administrator/Downloads/creditcard.csv')
data['Hour'] = data['Time'].apply(lambda x : divmod(x,3600)[0]) #特征衍生

#标准化
from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
col = ['Amount','Hour']
data[col] = sc.fit_transform(data[col])

feature = list(data.columns)
feature.remove('Class') #剔除标签列
feature.remove('Time') #特征清洗
X = data[feature]  #特征列
y = data['Class']  #目标值列

display(X.head(),y.head())

#过采样或者称上才采样,使用 最近邻插值(Nearest Neighbor Interpolation):直接使用最接近的像素值作为新的像素值
from imblearn.over_sampling import SMOTE
smote = SMOTE()
X,y = smote.fit_resample(X,y)
y.value_counts()

#模型训练
from sklearn.linear_model import LogisticRegression
model = LogisticRegression()
model.fit(X,y)
y_ = model.predict(X)
from sklearn.metrics import auc,roc_auc_score,roc_curve,recall_score,accuracy_score,classification_report,confusion_matrix
print('LogisticRegression准确率是:',accuracy_score(y,y_))
cm = confusion_matrix(y,y_) #获得混淆矩阵
recall = cm[1,1]/(cm[1,1]+cm[1,0])
print('LogisticRegression召回率率是:',recall)

proba_ = model.predict_proba(X)[:,1] #表示获取类别1的样本阳性,行用卡盗刷
fpr,tpr,thresholds = roc_curve(y,proba_)
roc_auc = auc(fpr,tpr) #曲线下的面积

import matplotlib.pyplot as plt
plt.title=('Receiver Operating Characteristic')
plt.plot(fpr,tpr,'b',label='AUC = %0.5f'% roc_auc)
plt.legend(loc='lower right')
plt.plot([0,1],[0,1],'r--')
plt.xlim([-0.1,1.0])
plt.ylim([-0.1,1.0])
plt.ylabel('True Positive Rate')
plt.xlabel('False Positive Rate')

在这里插入图片描述
在这里插入图片描述

交叉验证,接着以上代码

%%time
from sklearn.model_selection import GridSearchCV, train_test_split
#交叉验证, 筛选合适的参数
X_train, X_test, y_train, y_test = train_test_split(X,y,test_size = 0.2)
#构建参数组合
param_grid = {'C': [0.01,0.1,1,10,100,1000,], 'penalty': ['l2']}
grid_search = GridSearchCV(LogisticRegression(),param_grid,cv=10)
grid_search.fit(X_train,y_train) #使用训练集学习散发

报以下错误
在这里插入图片描述
将l1去掉,重跑一次,运行无报错,结果如下
在这里插入图片描述

#查看最佳参数
results = pd.DataFrame(grid_search.cv_results_)
display(results)
print("Best parammeters:{}".format(grid_search.best_params_))
print("Best cross-validation score: {:.5f}".format(grid_search.best_score_))

在这里插入图片描述

测评数据的评估

在这里插入图片描述

混淆矩阵和召回率

def plot_confusion_matrix(cm,classes,title, cmap=plt.cm.Blues):
    plt.imshow(cm,interpolation='nearest', cmap=cmap)
   # plt.title(title)
    plt.colorbar()
    tick_marks = np.arange(len(classes))
    plt.xticks(tick_marks, classes, rotation=0)
    plt.yticks(tick_marks, classes)

    thresh = cm.max()/2.
    for i, j in itertools.product(range(cm.shape[0]),range(cm.shape[1])):
        plt.text(j, i , cm[i, j],
                 horizontalalignment="center",
                 color="white" if cm[i,j] > thresh else "black")
    plt.tight_layout()
    plt.ylabel('True label')
    plt.xlabel('Predicted label')
import itertools
cnf_matrix = confusion_matrix(y_test,y_pred) #获得混淆矩阵
recall1 = cnf_matrix[1,1]/(cnf_matrix[1,1]+cnf_matrix[1,0])
print('LogisticRegression召回率率是:',recall1)
#绘制模型优化后的混淆矩阵
class_names=[0,1]
plt.figure()
plot_confusion_matrix(cnf_matrix
                      , classes=class_names
                      , title = 'Confusion matrix'
                      )

在这里插入图片描述

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

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

相关文章

李宏毅 X 苹果书 自注意力机制 学习笔记上

self attention 是一种network架构使用场景:输入一组向量,这组向量的性质:数量有变化,序列长度不一 模型输入 文字处理: 模型输入:句子(句子的长度,单词都不一样)&am…

qt QMainWindow 自定义标题栏

可以使用setMenuWidget 来将自定义的标题栏 QWidget 设置进去就可以, 用来替代setMenu 菜单栏单一,自定义不高的问题

node_exporter使用textfile collector收集业务数据

上一篇文章讲了使用Pushgateway收集业务数据的方法,今天讲另外一种方式textfile collector The textfile collector is similar to the Pushgateway, in that it allows exporting of statistics from batch jobs. The Pushgateway should be used for service-leve…

解决ModuleNotFoundError: No module named ‘torchcrf‘

运行深度学习程序时候,出现报错:ModuleNotFoundError: No module named torchcrf 将 from torchcrf import CRF 改为 from TorchCRF import CRF

无设计器简单实例

目录 1、界面设计Qt5元对象系统1. **QObject 类**2. **QMetaObject**3. **信号和槽机制**4. **宏:Q_OBJECT**5. **动态属性**6. **反射机制**7. **元对象编译器(MOC)** 2、完成程序功能 1、界面设计 不点创建界面 在dialog.h中 #ifndef DIA…

树莓派5里使用protobuf

由于现在protobuf越来越复杂了,自己去编译,还是比较麻烦。 比如最新的V28版本,就会要求使用cmake或者bazel来编译了。 如果不要求使用最新的版本,直接使用系统里带的版本也是可以的。 可以进行如下操作: sudo apt …

【算法系列-链表】交换链表节点(反转 + 交换)

【算法系列-链表】交换链表节点(反转 交换) 文章目录 【算法系列-链表】交换链表节点(反转 交换)1. 反转链表1.1 思路分析🎯1.2 解题过程🎬1.3 代码示例🌰 2. 两两交换链表中的节点2.1 思路分析🎯2.2 解题过程🎬2.3 …

电器自动化入门08:隔离变压器、行程开关介绍及选型

视频链接:3.4 电工知识:三相交流异步电动机自动往返行程控制及控制变压器选型_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1PJ41117PW?p8&vd_sourceb5775c3a4ea16a5306db9c7c1c1486b5 1.隔离(控制)变压器 2.行程开…

C++_智能指针详解

什么是智能指针?为什么要有智能指针?到目前为止,我们编写的程序所使用的对象都有着严格定义的生命周期。比如说,全局对象在程序启动时分配,在程序结束时销毁;再比如说局部static对象在第一次使用前分配&…

4.5章节python中的break和continue语句的作用

在Python中,break 和 continue 是两个用于控制循环流程的关键字。它们提供了在特定条件下提前退出循环或跳过当前迭代并进入下一次迭代的机制。 一、break语句 break 语句用于立即终止当前的循环(无论是 for 循环还是 while 循环)&#xff…

最佳人力资源管理工具,6款热门产品功能对比

文章介绍了ZohoPeople、北森、i人事等六款主流人力资源管理系统,涵盖招聘、培训、考勤等功能,各有特点,适合不同规模企业需求。建议企业试用后选择,提高管理效率。 一、Zoho People Zoho People是一款强大的云端人力资源管理系统…

看Threejs好玩示例,学习创新与技术(LiquidRaymarching)

今天的示例有点超出我的想象,首先会科普下WGSL这种新的着色器脚本,然后说说示例《Liquid Raymarching Scene with Three.js Shading Language | Codrops (tympanus.net)》的技术流程。本示例最终呈现的效果如下。可以看到他跟QQ那个消息拖拽消灭的效果非…

Flink 03 | 数据流基本操作

Flink数据流结构 DataStream 转换 通常我们需要分析的业务数据可能存在如下问题: 数据中包含一些我们不需要的数据 数据格式不方面分析 因此我们需要对原始数据流进行加工,比如过滤、转换等操作才可以进行数据分析。 “ Flink DataStream 转换主要作…

C++ -引用-详解

博客主页:【夜泉_ly】 本文专栏:【C】 欢迎点赞👍收藏⭐关注❤️ C -引用-详解 1.引用基础1.1是什么1.2特点 2.引用的意义3.引用的应用场景3.1作为参数3.2作为返回值传值返回引用返回 4.权限问题5.与指针的区别6.总结 1.引用基础 1.1是什么 …

SpringBoot整合异步任务执行

同步任务: 同步任务是在单线程中按顺序执行,每次只有一个任务在执行,不会引发线程安全和数据一致性等 并发问题 同步任务需要等待任务执行完成后才能执行下一个任务,无法同时处理多个任务,响应慢,影响…

小红书三面被问 RAG 原理,秒挂…

最近这一两周看到不少互联网公司都已经开始秋招发放Offer。 不同以往的是,当前职场环境已不再是那个双向奔赴时代了。求职者在变多,HC 在变少,岗位要求还更高了。 最近,我们又陆续整理了很多大厂的面试题,帮助一些球…

MySQL高阶2082-富有客户的数量

目录 题目 准备数据 分析数据 题目 编写解决方案找出 至少有一个 订单的金额 严格大于 500 的客户的数量。 准备数据 Create table If Not Exists Store (bill_id int, customer_id int, amount int)Truncate table Storeinsert into Store (bill_id, customer_id, amoun…

openpnp - 图像传送方向要在高级校正之前设置好

文章目录 openpnp - 图像传送方向要在高级校正之前设置好笔记END openpnp - 图像传送方向要在高级校正之前设置好 笔记 图像传送方向和JOG面板的移动控制和实际设备的顶部摄像头/底部摄像头要一致,这样才能和贴板子时的实际操作方向对应起来。 设备标定完&#xf…

(C语言贪吃蛇)16.贪吃蛇食物位置随机(完结撒花)

目录 前言 修改方向 修改内容 效果展示 两个新的问题🙋 1.问题1 2.问题2 代码如下: 前言 我们上一节实现了贪吃蛇吃食物身体节点变长,但是食物的刷新位置不是随机的,并且初始化几次后食物就刷不见了,本节我们就来…

【Linux】进程地址空间、环境变量:从理论到实践(三)

🌈 个人主页:Zfox_ 🔥 系列专栏:Linux 目录 🚀 前言一:🔥 环境变量 🥝 基本概念🥝 常见环境变量🥝 查看环境变量方法 二:🔥 测试 &…