数据挖掘实战(二):信用卡欺诈检测

此次信用卡欺诈是采用科赛数据科学社区一个项目的数据集来分析的,具体的数据集可以在这里下载 传送门
数据集有100多M,使用excel打开会有有些卡顿,所以直接在python观察

数据集解读
数据集名称数据类型特征数实例数值缺失相关任务
信用卡欺诈检测数据集数值数据31284807不平衡样本处理,预测分类
  • 在284807交易记录中,有492条欺诈记录,属于样本极不平衡
  • 数据集仅包含数值数据是因为做了PCA变换,特征V1到V28是通过PCA变换得到的主成分
  • 其中Time以及Amount数据是没有做PCA变换的
    其中数据字段解读如下表所示:
字段类型含义
TimeFloat数据集第一条记录与本条记录的时间差,秒为单位
V1Float主成分1
V2float主成分2
V28Float主成分28
AmountFloat交易金额
ClassFloat类别是否为欺诈 1:是 0:否
数据探索

这个数据集一共有28万多的数据,是一个非常大的数据集,在Excel中打开会卡顿,所以最好的是用pandas来操作。

data = pd.read_csv(r'C:\Users\11060\Desktop\data\creditcardfraud.csv')
plt.rcParams['font.sans-serif']=['SimHei']
data.Class.value_counts().plot(kind='bar')
print(data.Class.value_counts())
plt.xlabel('诈骗类别')
plt.ylabel('数量')

可以看到正真为欺诈类的数据非常的少,数据集是极度的不均匀,所以需要对数据集进行一定的处理
在这里插入图片描述

数据规范化

由于数据集并没有什么缺失数据之类的,而且28个主成分是已经由PCA进行转换的,所以28个主成分不需要做处理,只有Time还有Amount这两列需要处理,Time这一列对分类没什么作用,这里做删除处理,Amount列做标准化处理

ss = StandardScaler()
data.Amount = ss.fit_transform(data['Amount'].values.reshape(-1,1))
data1 = data.drop(['Time'],axis=1)

得到的数据集就是标准化后的数据集

数据集划分

这里将数据集按按照训练集:测试集 = 7:3来划分数据集

X = data1.iloc[:,0:29].values
y = data1.iloc[:,29].values
X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.3,stratify=y,random_state=1)
smote = SMOTE(random_state=1)     #  合成少数类过采样技术
X_train_smote,y_train_smote = smote.fit_sample(X_train,y_train)
print(sum(y_train_smote==1))
print(sum(y_train_smote==0))

# output
199020
199020

这里对少样本进行合成,具体的样本不平衡处理方法可以看这篇文章 传送门
处理后的训练集正负样本数量一致,可以进行下一步

模型创建

这里的数据集数量太大,本人尝试用SVC来分类,结果发现所需时间实在是太久了,SVM的确不适合大数据集,这里我们使用逻辑回归来进行分析建模,首先最优参数C

params = {'C':[1,2,3,4,5,6,7,8,9,10}
lr = LogisticRegression()
lr_clf = GridSearchCV(lr,params,cv=5,n_jobs=-1)
lr_clf.fit(X_train_smote,y_train_smote)
print(lr_clf.best_params_ )

# output
{'C': 3.0}

得到最优参数为3,将参数C=3重新训练测试

模型训练评估
lr = LogisticRegression(C=3, penalty='l1',verbose=5)
model = lr.fit(X_train_smote, y_train_smote)
y_predict = model.decision_function(X_test)
fpr, tpr, thresholds = roc_curve(y_test, y_predict)#计算假正率和真正率
roc_auc = auc(fpr, tpr)
print('准确率:',roc_auc)


# output
准确率: 0.9872308823273125

准确率高是预料之中的,即使使用样本分布均匀的数据集来进行训练,由于测试集的负样本数据太少,而测试的样本不能随便由SMOTE生成,这样子会使得模型的拟合和评估都在生成的数据上进行,模型没有可信度,只有在真实的数据集进行预测才有可信力
接下来画出ROC-AUC曲线:


plt.plot(fpr, tpr, 'b',label='AUC=%0.3f'%roc_auc)
plt.legend(loc='lower right')
plt.plot([0,1],[0,1],'r--')
plt.xlim([-0.1,1])
plt.ylim([-0.1,1])
plt.show()

如图所示
在这里插入图片描述

总结与不足

此次使用逻辑回归进行信用卡诈骗的二分类任务,主要的问题就是解决样本分布的不平衡

不足
  • 数据集太大,SVM算法不适合
  • 尝试了使用多种分类器一起进行最优化参数寻找,结果代码完全跑不动,数据集太大,跑不动
  • 2
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

2020重新做人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值