本文对某银行信用卡欺诈检测分析做一个总结,主要任务就是通过建立逻辑回归模型对信用卡指标数据异常数据进行检测。
以下为本文分析逻辑的思维导图:
目录:
项目介绍
数据预处理
建模及评估
阈值的调整
项目总结
一,项目介绍
项目主要任务就是对银行信用卡欺诈检测进行建模分析,通过建立逻辑回归模型,拟合数据,得到recall最大的最优参数,并根据业务需要选择最优的阈值,从而对信用卡业务风险进行预测和管控
数据来源:Kaggle项目数据集,Credit Card Fraud Detection问题描述和数据集都可以到官方的描述页面下载
二,数据预处理
2.1.数据探索
观察数据集:
Time字段,表示交易时间
V1至V28字段,是通过PCA之后的特征
Amount字段,是交易金额,通过data.describe()显示,Amount字段的均值和方差和V1-V28字段的相差较大,所以需要对Amount特征归一化处理
Class是标签,1代表欺诈交易,0代表正常交易,也就是目标变量
检查是否有缺失值,未发现缺失值,故无需进行缺失值处理。
正常交易似乎有周期性,而欺诈交易看起来比较分布均匀
在欺诈交易中,最大的交易金额为2125,可见欺诈交易主要集中在小额交易范围内
正常交易和欺诈交易数量数量比大概为142:1,样本极度不不均衡
查看V1-V28字段对分类的贡献率,并筛选掉贡献率不高的字段,从下面结果图可以看出,对于很多特征的分布,正常交易和欺诈交易数据的分布很相似,对目标变量的分类贡献不大,可结合业务对贡献率不大的特征做适当筛选,这里筛除部分特征
对部分贡献率较小的特征进行删除
2.2.数据预处理
通过对数据进行探索,数据需做如下处理:
对Amount列进行归一化处理
由于样本不均衡,需要对样本进行下采样处理
时间特征暂时不分析,需要删除
归一化处理
使用StandarScaler模块中的fit_transform()函数归一化处理Amount列
下采样处理
使用random.choice函数随机选取与欺诈交易数量等数量的正常交易的索引,用concatenate函数连接等数量的正常交易记录和欺诈交易记录索引,得到下采样样本under_sample_data
三,建模及评估
得到训练集和测试集
设定train_test_split参数test_size=0.3,得到整体样本和下采样样本的训练集和测试集
交叉验证
通过遍历C参数列表[0.01,0.1,1,10,100],来交叉验证,得到最优的C参数(惩罚力度参数),其中用到KFold函数得到一个可迭代对象,其中每个元素是一个二值列表
在每个C参数下,遍历fold对象,并求出每个C参数对应的平均 recall值,最后得出最大平均recall对应的C参数,即最优惩罚力度参数
模型评估
1.导入最优参数和下采样的测试集数据,得到模型的混淆矩阵,从而得到recall值
最终recall值为0.939,模型拟合很好
2.导入最优参数和整体样本的测试集数据,得到混淆矩阵和recall值,recall值为0.911,模型拟合很好
用ROC和AUC进行评估
绘制 Precision-Recall curve:
四,阈值的调整
阈值的选择对模型的recall值有所影响,模型中默认的阈值为0.5,但为了更好的拟合数据和反映业务实际,可根据实际业务需要设定阈值,以下将展现出不同阈值下的模型的混淆矩阵
其中需要注意的是Ir.predict和Ir.predict_proba的区别
五,项目总结
1.对分类贡献率较高的特征,如V3,V11,V12,V14,V17等特征对判定欺诈交易有重要影响,在实际业务中,应重点关注
1.从交叉验证的结果来看,当正则惩罚项力度系数为0.01时,模型效果最优,recall值为0.93,拟合效果较好
2.对于阈值的设定,我们需要结合业务逻辑去设定,从上述结果图中可以可看出,阈值的设定对模型的结果又较大影响。阈值较小时,意味着我们的模型会将很多正常交易视为欺诈交易来分类了,这样会大大较低模型的精度,即使模型召回率很高,但这种状态下的模型应用意义不大;阈值较大时,意味着模型可能会过于慎重去判定为欺诈交易,这样会导致模型召回率很低,精度稍高。所以,对于逻辑回归模型,我们还需要根据业务场景来选择合适的阈值,而在本次分析中,阈值设定为默认的0.5较为合适。