内容目录
1、数据探索
查看数据
查看类别分布
探索交易时间分布
探索交易金额分布
2. 数据预处理
标准化
如何平衡样本
不平衡样本
使用SMOTE平衡样本
3. 建模与模型评估
混淆矩阵的绘图function
关于模型评估
用上采样处理后的训练集训练模型
ROC 评估
FPR,TPR
原文见公众号:python宝
一、数据探索
1、查看数据
import warnings
import numpy as np
import matplotlib
import pandas as pd
np.set_printoptions(precision=3,suppress=True)
warnings.filterwarnings("ignore")
matplotlib.rcParams['font.sans-serif']=['SimHei'] # 用黑体显示中文
matplotlib.rcParams['axes.unicode_minus']=False # 正常显示负号
pd.set_option('display.max_columns', 10000)
#显示所有行
pd.set_option('display.max_rows', 10000)
#设置value的显示长度为100,默认为50
pd.set_option('max_colwidth',10000)
pd.set_option('display.width', 10000)#不换行
data = pd.read_csv('D:\A\AI-master\py-data\creditcardfraud.csv')
print('data.shape' ,data.shape)
print('data.isnull().values.sum()' ,data.isnull().values.sum()) #检查是否有空值
print('查看前三行数据¶' ,data.head(3))
ata.shape (284807, 31)
data.isnull().values.sum() 0
查看前三行数据
Time V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11 V12 V13 V14 V15 V16 V17 V18 V19 V20 V21 V22 V23 V24 V25 V26 V27 V28 Amount Class
0 0.0 -1.359807 -0.072781 2.536347 1.378155 -0.338321 0.462388 0.239599 0.098698 0.363787 0.090794 -0.551600 -0.617801 -0.991390 -0.311169 1.468177 -0.470401 0.207971 0.025791 0.403993 0.251412 -0.018307 0.277838 -0.110474 0.066928 0.128539 -0.189115 0.133558 -0.021053 149.62 0
1 0.0 1.191857 0.266151 0.166480 0.448154 0.060018 -0.082361 -0.078803 0.085102 -0.255425 -0.166974 1.612727 1.065235 0.489095 -0.143772 0.635558 0.463917 -0.114805 -0.183361 -0.145783 -0.069083 -0.225775 -0.638672 0.101288 -0.339846 0.167170 0.125895 -0.008983 0.014724 2.69 0
2 1.0 -1.358354 -1.340163 1.773209 0.379780 -0.503198 1.800499 0.791461 0.247676 -1.514654 0.207643 0.624501 0.066084 0.717293 -0.165946 2.345865 -2.890083 1.109969 -0.121359 -2.261857 0.524980 0.247998 0.771679 0.909412 -0.689281 -0.327642 -0.139097 -0.055353 -0.059752 378.66 0
2、查看类别分布
import seaborn as sns
#画相关矩阵图(pairplot)主要展现的是变量两两之间的关系(线性或非线性,有无较为明显的相关关系),
# 对角线上是各个属性的直方图(分布图),而非对角线上是两个不同属性之间的相关图
sns.pairplot(data, vars=data.columns[1:9], hue='Class')
plt.show()
print('查看类别分布',data['Class'].value_counts())
data['Class'].hist(figsize=(8,6),edgecolor='blue', color='yellow',linewidth=1,);
plt.show()
查看类别分布 0 2843151 492
3、探索交易时间分布
plt.figure(figsize=(12,6))
# 正常交易的时间描述信息
print(data[data['Class'].isin([0])]['Time'].describe())
a1 = plt.subplot(1,2,1)
plt.hist(data[data['Class'].isin([0])]['Time'],color='y')
plt.xlabel('Time')
plt.ylabel('count')
plt.title('正常交易的时间描述信息')
# 异常交易的时间描述信息
print(data[data['Class'].isin([1])]['Time'].describe())
plt.subplot(1,2,2)
data[data['Class'].isin([1])]['Time'].hist(color='g')
plt.xlabel('Time')
plt.ylabel('count')
plt.title('异常交易的时间描述信息')
plt.show()