python之机器学习案例实战:信用卡欺诈异常值检测

2023-05-16

案例背景:

有些人利用信用卡进行诈骗活动,如何根据用户的行为,来判断该用户的信用卡账单是否属于欺诈呢?想获取数据集请点此处。在这个数据集中,由于原始的用户数据具有一定的隐私,因此,每一列(即特征)的名称并没有给出,而是使用V1,V2等代替。目标是进行异常值的检测。数据集中有一列值class,要么为0,表示正常,要么为1,表示异常。

案例实战:

第一步:首先导入数据分析所需用的第三方库numpy、pandas,以及可视化库matplotlib

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

# 将matplotlib的图表直接嵌入到Notebook之中,inline表示将图表嵌入到Notebook中
%matplotlib inline

第二步:读取数据,以及基本信息

data = pd.read_csv("creditcard.csv")
data.info()

data.head()

运行结果:

第三步: 根据基本信息分析数据

最后一列"Class"只有0 或者是1,且是 0 的样本很多,1 的样本很少,符合正常情况:少数人利用信用卡欺诈

可视化展现一下,这里提一下,pandas也是可以作图的噢。

count_classes = pd.value_counts(data['Class'], sort = True).sort_index()
print(count_classes)

# pandas画条形图
count_classes.plot(kind = 'bar')
plt.title("Fraud class histogram")
plt.xlabel("Class")
plt.ylabel("Frequency")

运行截图:

由于数据极不均衡,如果直接拿来做训练,在机器学习中,它会默认为数据量大的那一类别占的比重大,会很大影响最终的结果,考虑进行数据的均衡化处理。主要有两种思路:下采样和过采样。

下采样:在数据量比较多的那部分数据中,选取和其余数据数量差不多的部分。 即:“同样少”

过采样:对数据量比较少的那部分数据采取一定的策略,进行生成数据。 即:“同样多”

在进行采样处理之前,观察数据,发现除了Amount之外,其他列的数据都在-1~1,而Amount的数据值特别大。因此在采样之前,先进行标准化处理:

#标准化
from sklearn.preprocessing import StandardScaler

# Series数据类型没有reshape函数
# 将values方法把Series对象转化成numpy的ndarray,再用ndarray的reshape方法
# DataFrame像一张表,Series是指表里的某一行数据或某一列数据

data['normAmount'] = StandardScaler().fit_transform(data['Amount'].values.reshape(-1, 1))

data.head()

注意:使用reshape方法之前,要先使用values方法,否则会提示:Series数据类型没有reshape函数。使用values方法把Series对象转化成numpy的ndarray,再用ndarray的reshape方法 。reshape(-1,1)转换成1列。

开始进行采样:

#  下采样
# X是非标签值,Y是标签值
X = data.ix[:, data.columns != 'Class']
Y = data.ix[:, data.columns == 'Class']

#数量少的那部分的数目
number_records_fraud = len(data[data.Class == 1])

fraud_indices = np.array(data[data.Class == 1].index)

normal_indices = data[data.Class == 0].index

random_normal_indices = np.random.choice(normal_indices, number_records_fraud, replace = False)
random_normal_indices = np.array(random_normal_indices)

# 合并数据
under_sample_indices = np.concatenate([fraud_indices,random_normal_indices])

#下采样数据集
under_sample_data = data.iloc[under_sample_indices]

X_undersample = under_sample_data.ix[:, under_sample_data.columns != 'Class']
Y_undersample = under_sample_data.ix[:, under_sample_data.columns == 'Class']

# 打印比率
print("Percentage of normal transactions: ",len(under_sample_data[under_sample_data.Class == 0])/len(under_sample_data))
print("Percentage of fraud transactions: ",len(under_sample_data[under_sample_data.Class == 1])/len(under_sample_data))
print("Total number of transactions in resampled data:", len(under_sample_data))

运行截图:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python之机器学习案例实战:信用卡欺诈异常值检测 的相关文章

随机推荐

  • 听说你会Promise? 那么如何控制请求并发数呢?

    前言 现在面试过程当中 xff0c 手写题必然是少不了的 xff0c 其中碰到比较多的无非就是当属 请求并发控制了 现在基本上前端项目都是通过axios来实现异步请求的封装 xff0c 因此这其实是考你对Promise以及异步编程的理解了
  • [ROS]在VS Code下编写代码,汇总问题及解决办法

    Linux xff1a Ubuntu18 04 ROS xff1a melodic 在VS Code下编写代码 xff0c 汇总问题及解决办法 问题1 xff1a 编译C 43 43 代码可通过 xff0c 但抛出错误警告以及代码补全异常
  • 基本类型与包装(装箱)类型的区别

    Java的类型分为两部分 xff0c 一个是基本类型 xff08 primitive xff09 xff0c 如int double等八种基本数据类型 xff1b 另一个是引用类型 xff08 reference type xff09 xf
  • 学习笔记------关于字符串结束符'\0'、字符串定义方法

    字符串定义方法 有2种方法 xff1a 1 xff09 字符数组 2 xff09 字符指针 初始化 1 xff09 字符数组方式初始化大致3种 xff1a 1 char str 10 61 34 12345 34 或者char str 10
  • 树莓派连接vnc教程

    1 输入 sudo raspi config 进入到系统设置中开启vnc服务 2 进入后选择 Interfacing Options 进入 3 选择 VNC 进入 4 yes 下载软件 xff1a VNC Viewer 5 连接vnc xf
  • ubuntu 22.04设置root密码,与开启sshd服务

    1 sudo passwd root 直接输入两次密码即可完成 2 安装sshd服务 xff1a apt install ssh 3 启动ssh服务 systemctl start sshd 4 设置开机启动 xff1a systemctl
  • Python+Flask+Docker+Vue实现简单的股票数据统计

    闲暇时间实现了一个简单的股票数据统计功能 数据是从网上爬下来的 xff0c 页面支持按照股票名称 股票代码 股票类型 股价 市值等搜索并展示在下方列表 除了股票的基本信息以外 xff0c 还会显示其他炒股软件上不会展示的信息如流动比率 速动
  • [2020-07-23]备战考博的一点点经历

    首先声明 xff0c 博主只是个普通人 xff0c 不是北清复交那种天才选手 xff0c 本硕都是普通一本 xff0c 像个不断前进的蜗牛一样 xff0c 好不容易还有继续往上爬的机会 xff0c 所以博主只会从一个普通学生的视角去讲自己的
  • 遇见Java

    Java是一门面向对象的编程语言 xff0c 不仅吸收了C 43 43 语言的各种优点 xff0c 还摒弃了C 43 43 里难以理解的多继承 指针等概念 xff0c 因此Java语言具有功能强大和简单易用两个特征 Java语言作为静态面向
  • STM32F103移植FreeRTOS警告记录

    1 xff1a 新建MDK工程 xff0c 选择文件存放路径 xff0c 选择芯片型号 xff0c 创建一个USER文件 xff0c 复制自动创建的文件到USER文件中 xff0c 关闭程序 创建一个OBJ目标文件夹 xff0c 打开软件选
  • tensorflow实现简单的卷积神经网络

    1 卷积神经网络 xff08 Convolutional Neural Network xff0c CNN xff09 优点 xff1a xff08 1 xff09 直接使用图像的原始像素作为输入 xff0c 不必先使用SIFT等算法提取特
  • zabbix4.0学习八:JMX有能监控哪些监控项详说

    zabbix4 0学习八 xff1a JMX有能监控哪些监控项详说 文章目录 zabbix4 0学习八 xff1a JMX有能监控哪些监控项详说 前言远程连接tomcat远程连接java 前言 在使用jmx监控tomcat时一直好奇MBea
  • 排序算法之冒泡排序、选择排序、插入排序的区别与联系

    冒泡排序 xff08 1 xff09 算法 xff1a 假如有N项数据 第一趟 xff0c 将首项与第二项比较 xff0c 较小者放在前面 xff0c 较大者放后面 xff0c 然后比较第二项和第三项 xff0c 依次进行 xff0c 第一
  • 排序算法之快速排序算法

    核心思想 xff1a xff08 1 xff09 要排序的一组数据中取一个数为 基准数 xff08 2 xff09 通过一趟排序将要排序的数据分割成独立的两部分 xff0c 其中左边的数据都比 基准数 小 xff0c 右边的数据都比 基准数
  • 数据结构之树知识汇总——思维导图

  • Linux基础学习与VMWare的安装和使用

    一 Linux入门概述 1 1 概述 Linux内核最初只是由芬兰人林纳斯 托瓦兹 xff08 Linus Torvalds xff09 在赫尔辛基大学上学时出于个人爱好而编写的 Linux是一套免费使用和自由传播的类Unix操作系统 xf
  • OJ刷题之1035:列车长的烦恼

    OJ刷题之1035 xff1a 列车长的烦恼 1 题目以及要求2 题目解析3 代码思路 1 题目以及要求 description John是个小列车站的站长 xff0c 每次列车在这里重新编组时他就很烦恼 因为站上只有一个人字形的编组轨道
  • python数据可视化之matplotlib学习

    python数据可视化 xff1a Matplotlib的scatter函数详解 scatter 函数参数详解 xff1a scatter x y s 61 None c 61 None marker 61 None cmap 61 Non
  • Ubuntu16.04使用sudo apt-get install ,报错E: 无法获得锁 /var/lib/dpkg/lock-frontend - open (11: 资源暂时不可用)

    Ubuntu16 04 使用sudo apt get install git 安装git服务器 xff0c 结果出现下面的错误 E 无法获得锁 var lib dpkg lock frontend open 11 资源暂时不可用 E Una
  • python之机器学习案例实战:信用卡欺诈异常值检测

    案例背景 xff1a 有些人利用信用卡进行诈骗活动 xff0c 如何根据用户的行为 xff0c 来判断该用户的信用卡账单是否属于欺诈呢 xff1f 想获取数据集请点此处 在这个数据集中 xff0c 由于原始的用户数据具有一定的隐私 xff0