机器学习——项目实战(交易数据异常检测——信用卡欺诈检测)

什么叫欺诈?简单点说就是一堆数据当中有不正确的值,即异常值。现在有一个csv文件,这是一个信用卡欺诈数据的csv文件,具体指标如下所示:
在这里插入图片描述
在pycharm中用pandas读取该csv文件,所得的结果有所省略,但是可以看出来,数据共有31列,出去收尾,数据从V1…V28结束,这些数据都比较特别,根本不懂是什么意思,其实,在公布数据集的时候,银行为了保护客户隐私,早就进行过数据预处理了,通过降维(如PCA)手段提取主特征信息,最终生成上述数据集。所以,针对上述数据集,我们并不需要进行数据处理,我们只需要考虑清楚如何针对自己的项目或需求进行建模操作。

通常来说,我们把值分为2类,一类是正常值,一类是异常值。分别用0和1表示,即为:

0 正常(正样本)
1 异常(负样本)

那么也就是说,我们接下来要做的就是一个分类任务,把0和1通过一个分界线分开来,即做一个经典的二分类问题。那么在上图中,究竟哪列可以作为分类标签使用呢、Time表示支付的时间,Amount表示支付的金额,Class可以表示标签,0表示正样本,1表示负样本。

一想到二分类问题,首先采用逻辑回归算法,如果逻辑回归行不通,可以采用SVM、神经网络等算法。

1、样本不均匀解决

首先,我们需要考虑一下样本数据是否均匀,如果样本数据不均匀,所得到的效果就不会是很好。现在使用matplotlib函数打印一下0和1的样本数,代码如下:

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

count_classes=pd.value_counts(data["Class"]) # 计算0和1的累加
count_classes.plot(kind="bar")  # 可以使用pandas绘制最基本的图形
print(count_classes)  #打印0和1的数值
plt.show()

运行结果:
在这里插入图片描述
可以看到,正样本数非常多,但是负样本好像从图上来看几乎为0,我们打印数值看看:
在这里插入图片描述
可以看到,正样本数是负样本数的50倍左右,样本极度不均匀,所以我们需要做一些处理,主要有2种方法,一种是上采样,一种是下采样

猜你喜欢

转载自blog.csdn.net/Daker_Huang/article/details/88351823