Logistic回归建模分类实例——信用卡欺诈监测
现有一个creditcard.csv(点此下载)数据集,其中包含不同客户信用卡的特征数据(V1、V2……V28、Amount)和标签数据(Class),利用Logistic回归建模,通过这个模型预测客户信用卡是否有被欺诈的风险。
import numpy as npimport pandas as pdimport matplotlib.pyplot as plt% matplotlib inlinedata = pd.read_csv('creditcard.csv')from sklearn.preprocessing import StandardScalerdata['normAmount'] = StandardScaler().fit_transform(data['Amount'].values.reshape(-1,1)) data = data.drop(['Amount','Time'], axis=1)#data.head()
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
% matplotlib inline表示将图表嵌入到Notebook中。如果不加这一行代码,下面的图2中的柱状图会显示不出来。
将creditcard.csv中的数据读到data中,因为creditcard.csv中的数据中Amount这一列比较特殊,其他列都在(-1,1)的区间内,而Amount这一两列浮动范围比较的,要知道特征数据的浮动范围越大,在建模过程中对于预测结果的影响就越大,但就这组数据来说我们并有足够的先验信息来说明特征数据的重要程度,故我们要对所有特征数据一视同仁,让他们都在(-1,1)之间。所以我们要对数据进行一些预处理,首先就要通过sklearn.preprocessing中的StandardScaler模块将Amount这一列的数据进行归一化(标准化)操作。而后数据中有一列是Time,这一列数据是无用的,也就是说对于信用卡欺诈预测是没有用的,所以我们要将其删掉。
注意:data.drop([‘Amount’,’Time’], axis=1) 不会改变data本身,所以要将其赋值给data。笔者在用的时候以为它和reverse(),sort()这些函数一样会改变数据本身,在这儿踩了一脚坑。
data[‘Amount’].values.reshape(-1,1)中reshape后(-1,1)表示将这个数组变换成X*1的形式,至于X是多少就要看原始数组中到底有多少元素了。
因为一般情况下,我们得到的原始数据集中都是不能直接拿来用的,它们要么有大量无用信息,要么有缺失数据……,总之对于原始数据的预处理是必不可少的。下面就是通过data.head()显示出来的处理完成的数据预览图。
count_classes = pd.value_counts(data['Class'], sort = True).sort_index()print count_classescount_classes.plot(kind = 'bar')plt.title("Fraud class histogram")plt.xlabel(