摘 要
近年来信用卡已成为我国社会公众使用最广泛的非现金支付工具,然而在带给人们生活便利的同时,被盗刷的现象也在增多。好在随着信息技术的不断发展,近年来金融行业的数据存储已基本实现全数字化,积累了庞大的数据量,为大数据技术的应用提供先天条件。随着大数据技术应用方面的不断探索,通过数据分析实现审计功能,“让数据说话”,极大的提高了审计的质量和效率。
本文将通过数据分析,对银行消费进行分析,判断用户的信用卡的消费是否非本人所为即是否存在盗刷行为,我们将采用二分类——逻辑回归算法对海量数据进行训练并创建相关数据模型,进行预测是否属于信用卡盗刷现象,从而预防此类现象的发生。数据集训练前我们将对数据的部分属性进行标准化处理以便减少数据差异化。
关键词:数据分析、二分类、逻辑回归算法、标准化
Based on big data analysis technology to realize the
prevention of credit card theft
Author: 一只飞翔的章鱼
Abstract
In recent years, credit card has become the most widely used non cash payment tool for the public in our country. However, while bringing convenience to people's lives, the phenomenon of stolen credit card is also increasing. Fortunately, with the continuous development of information technology, in recent years, the data storage in the financial industry has basically realized full digitalization, accumulated a huge amount of data, and provided congenital conditions for the application of big data technology. With the continuous exploration of the application of big data technology, the audit function is realized through data analysis, which greatly improves the quality and efficiency of audit.
In this paper, through data analysis, bank consumption will be analyzed to determine whether the user's credit card consumption is not what he or she does, that is, whether there is theft. We will use the two classification - logical regression algorithm to train the massive data and create the relevant data model to predict whether it belongs to the phenomenon of credit card theft, so as to prevent the occurrence of such phenomenon. Before data set training, we will standardize some attributes of data to reduce data differentiation.
Keywords: Data Analysis、Two Categories、Logistic Regressive、Normalization
目 录
一、绪论................................................................ 1
二、 项目背景............................................................ 1
(一)数据说明.............................................. 1
三、 项目分析............................................................ 2
(一)思路导图.............................................. 2
(二)场景解析.............................................. 2
(三)数据预处理............................................ 4
四、 信用卡防盗刷数据分析建模............................................ 5
(一)项目执行环境.......................................... 5
(二)符号说明.............................................. 6
(三)查看数据集结构........................................ 6
(四)数据解析.............................................. 6
(五)特征缩放.............................................. 7
(六)查看特征向量进行特征选择.............................. 8
(七)通过逻辑回归训练并预测模型........................... 11
(八)模型优化提高召回率................................... 12
五、 总结............................................................... 15
六、 参考文献........................................................... 15
随着社会的进步,人们对便捷的生活更加苛刻,历史的发展中由金银等珍贵金属作为交换筹码到货币的出现,极大的方便了人们出行以及消费。明代的时候钱庄的出现,作为第一代的银行,成功避免了携带大量银钱出门的麻烦,至今信用卡银行卡几乎成为每个人出门的必带和支付的首选,信用卡作为新时代物联网下的重要产物,全球联网的出现,让无论何时何地都能快速完成支付,我们在享受着他的便利的时候,几乎都考虑过他的安全性,但现在来看基本上每个人都对银行十分信任。并不是说真的没有威胁,据欧洲2013年的一次统计两天内交易的284,807条就有492笔被盗刷,这么大的数额对银行来说绝对是个很大的损失,对用户也是极大的威胁,好在海量数据生成中,为后续的发展打下了防疫基础,在大数据浪潮的推动下,数据化的时代让一切有迹可循的秘密付出水面。
本文将对银行客户交易的信息进行数据分析,通过机器学习,构建信用卡防欺诈预测模型,提前发现客户信用卡被盗刷的事件,从而来减少银行卡被盗刷的现象,展现大数据时代,数据分析对金融行业的重要性。
数据集包含由欧洲持卡人于2013年9月使用信用卡进行字符的数据。此数据集显示两天内发生的交易,其中284,807笔交易中有492笔被盗刷。被盗刷的数量占所有交易的0.172%。
该数据集包含通过PCA算法转换结果的数字为输入变量。由于数据保密问题,无法获取有关数据的原始功能和更多的项目背景信息。特征v1,v2,....v28是使用PCA获取得到的主要属性,没有用PCA转换的特征有“时间”和“金额”。特征时间包含数据集中每个事物和第一个事物之间经过的秒数,特征“金额”是交易金额,此特征用于监督学习。特征‘类’是相应变量,如果发生盗刷,则取值1,否则为0。
我们拿到的数据是持卡人两天内信用卡交易数据,这份数据包含很多维度,要解决的问题是预测持卡人是否会发生信用卡被盗刷。信用卡是否被盗刷仅有两种可能,是或否,又因为这份数据是标注好的(字段Class是目标列),也就是说他是一个有监督学习的场景。于是我们判定信用卡持卡人是否被盗刷的问题属于一个二分类问题,意味着可以通过二分类算法找到解决办法,本项目选用算法是逻辑回归(Logistics Regression)。
逻辑回归(Logistic Regression)模型其实仅在线性回归的基础上,套用了一个逻辑函数,但也就由于这个逻辑函数,使得逻辑回归模型成为了机器学习领域一颗耀眼的明星,更是计算广告学的核心[2]。
(1)
(逻辑回归函数)
(2)
(逻辑方程与逻辑曲线)
对于训练数据集,特征数据x={x1, x2, … , xm}和对应的分类数据y={y1, y2, … , ym}。构建逻辑回归模型f(θ),最典型的构建方法便是应用极大似然估计。首先,对于单个样本,其后验概率为:
(3)
极大似然函数为:
(4)
Log似然函数:
(5)
训练后得到的分类器运用于测试集分类的实现:
样本分类后,对于银行企业来看往往更希望正确识别非盗刷的情况一免给用户造成不便,我们可以想象一下,你作为持卡用户某次你正开心的购物的时候却发现无法支付,对于这种误判肯定会极大的影响顾客的心情,对银行的损失也更加严重,所以对于银行来说更加注重召回率。
召回率是针对我们原来的样本而言的,它表示的是样本中的正例有多少被预测正确了。那也有两种可能,一种是把原来的正类预测成正类(TP),另一种就是把原来的正类预测为负类(FN)。
(6)
数据是结构化数据,不需要特征处理。特征V1到V28是经过PCA处理后得到的,特征Time和Amount的数据差别较大,需要对其进行特征缩放,将特征缩放到同一规格。在数据质量方面没有出现乱码和空字符的数据,可以确定字段Class为目标列,其他列为特征列。特征缩放在对数据进行相关处理后通过标准化处理,使其减小数据差异。
标准化函数:
X=(x-μ)/ σ (7)
正态分布与标准函数之间的关系:
已知数据中没有空值所以不进行数据清洗,之后要将数据进行划分,划分90%的训练集、10%的测试集用于测试判断得分。注意分割原则:进行随机分割、训练集比例大于测试集。
系统:win10、64bit
环境:Python3.7、Jupyter1.0.0
所需包:Numpy1.18.1、Pandas1.0.1、Sklearn、Matplotlib3.1.3
数据集:creditcard.csv [3]
符号 |
符号含义 |
data |
存放creditcard.csv中的全部数据 |
c、y |
存放class类别即是否是盗刷,1是,0否 |
cond_0 |
没有被盗刷的数据集位置 |
cond_1 |
被盗刷的数据集位置 |
data2 |
存放经过去除data里非必要属性后的数据 |
X |
存放自变量即特征类 |
X_train |
存放特征类的训练集数据 |
X_test |
存放特征类的测试集数据 |
y_train |
类别的训练集数据 |
y_test |
类别的测试集数据 |
可以如下图看到数据总行数为284807行,列数为31列,其包含V1~V28、Time、Amount、Class属性。其中V1~V28可以看到数据集都为浮点型数据,且数据相差不大,Time数据是从0到几千的数据,可以看到Time数据并没有经过处理,Amount同样。
查看数据集的详细信息,可以看到Time最大数据为172792,因为数据集说明了是两天的数据,172792/3600 = 47.9近似等于48即两天,所以可以断定该属性单位是秒(s)。
查看时数据集是否有缺失值,如下图;已知数据有284807,所以根据图可以看到每一列都没有缺失值,所以不需要记性数据清洗。
Amount变量与Time变量取值范围大,所以进行缩放 ,从上面可以看出数据为结构化数据,不需要做抽象特征转化,但特征Time和Amgun的数据规格和其他特征不一样,需要对其做特征缩放(即归一化)
对Amount进行特征缩放,经过缩放后,可以看到Amount数据集全部变成跟Vn类似的数据类型。
对Time进行转换,减小数据差异,可以先将秒转换成小时,之后再进行标准化处理。
对Amount进行特征缩放
将Time转换成小时
将Time列进行标准化处理
绘制出盗刷比例图,查看数据是否均衡。可以看到1占全部支付中及其少,但数量只够进行建模
对V1~V28进行特征选择,去除对Class影响不大的数据。
一般情况下,如果蓝色与橙色分离度越高,说明该列属性中对0和1的区分度越大,重合度越高则说明该列对其分类不明显,因此就可以将其删除,减少训练成本,但是们要秉承尽量少删除的原则,能留则留的态度。
根据对28个列对类别的影响图,可以看到,V8 、v13、v15、v20、v22、v23、v24、v25、v26、v27、v28列重合度比较高,所以将其筛选删除。
对特征重要性进行排序,进一步筛选变量。利用GBDT梯度提升决策树进行特征重要性排序。可以看到现存变量对类别影响的重要性。
进一步通过卡方验证,进一步加强对上图结果的证明。通过卡方验证,可以看到之间的相关性,class与class相关性肯定为1、其他的选取几个明显小的数据,将其删除。通过上图的柱状图和下边的验证,我们可以删除'Amount',"V19","Time","V21"等。
特征剔除完成之后,为了扩大数据集,我们将对数据集进行SMOT过采样,扩大数据集,可以看到数据集变成了568630扩大了两倍,因此训练后的强度更大,结果肯定也就更准确。
通过逻辑回归训练数据集,通过测试集得到训练结果评分为:0.9374461424828096
查看混淆矩阵,计算召回率。25468/25468+716 = 0.0013966480446927。
虽然看准确率比较高,但召回率仍然不高,对银行来说仍然是巨大损失,所以我们要尽量减少预测为1真实为0的数据。
利用GridSearchCV进行交叉验证和模型参数自动调优,获取他的最优参数。
查看调整后的召回率,可以看到实际为0预测为1减少了一个,但是调整仍然不够。
解决不同问题,通常需要不同的指标来度量模型的性能,例如我们希望用算法来预测癌症是否是恶性的,假设100个病人中有5个病人的癌症是恶性,对于医生来说,尽可能提高模型的查全率比 提高查准率更为重要,因为在病人的角度看,发生漏发现癌症恶性比发生误判为癌症恶性更为严重。 因此可见上边两种算法而言,明显lgb过拟合,考虑样本不均衡,故应该选择用简单一点的算法(逻辑回归)来减少过拟合的陷阱
设置阈值,来调整预测被盗刷的概率,依次来调整查全率。
趋势图:
|
由于银行对召回率的需要,因此我们尽量选择准确率和召回率的高峰。
因此我们选择:threshold:0.3000,score:0.9353,Recall:0.9298
即阙值选为0.3,作为模型进行对消费的预测。
Precision(准确率)和recall(召回率)是-组矛盾的变量。从上面混淆矩阵和PRC曲线可以看到,阙值越小,recall值越大, 模型能找出信用卡被盗刷的数量也就更多,但换来的代价是误判的数量也较大。随着阈值的提高,recall值逐渐降低, precision值也逐渐提高, 误判的数量也随之减少。通过调整模型闽值,控制模型反信用卡欺诈的力度,若想找出更多的信用卡被盗刷就设置较小的阈值,反之,则设置较大的阈值。实际业务中, 阈值的选择取决于公司业务边际利润和边际成本的比较;当模型阈值设置较小的值,确实能找出更多的信用卡被盗刷的持卡人。但随着误判数量增加,不仅加大了贷后团队的工作量,也会降低正常情况误判为信用卡被盗刷客户的消费体验,从而导致客户满意度下降,如果某个模型阈值能让业务的边际利润和边际成本达到平衡时,则该模型的阈值为最优值。当然也有例外的情况,发生金融危机,往往伴随着贷款违约或信用卡被盗刷的几率会增大,而金融机构会更愿意设置小阈值,不惜一切代价守住风险的底线。以上我们对十万级的数据建模预测发现其实准确率并不是很高,不过随着数据量的增加准确率和召回率肯定也就随着变化,所以我们今天可以放心的使用信用卡消费,可见大数据技术在金融行业早已生根发芽,并且以良好的姿态昂扬前进。
[1]尹蕾. 大数据技术在YJ银行反舞弊审计中的应用研究[D].南京大学,2019.
[2]简书 https://www.jianshu.com/p/9e801f1f04bd
[3]信用卡消费数据集 kaggle: https://www.kaggle.com/jacklizhi/creditcard