信用卡欺诈数据分析案例

本文选择信用卡欺诈数据进行分析。

项目背景:

信用卡欺诈是传统金融行业的范畴,信用卡企债行为包括利用信用卡透支消费的特点,以非法占有为目的,经发卡银行催收后仍不归还透支款或者在大量透支后潜逃隐瞒身份、以逃避还款责任的行为。出现信用卡被欺诈使用的情况通常有几下几种:

  • 卡不在场:欺诈者通过盗取卡和人的相关信息(卡号、有效期、姓名)进行交易;
  • 卡被伪造:通过一定设备读取真实磁条卡的信息,并伪造信用卡;
  • 卡丢失或被盗:持卡人在挂失前被欺诈使用;
  • 身份信息被盗:欺诈分子通过盗取电话账单、水电费账单、银行对账单等信息,以他人名义申请信用卡;
  • 卡邮寄被盗:信用卡在邮寄过程中被盗;

项目数据:

信用卡欺诈数据来源:信用卡欺诈检测数据集 – DF,CCF大数据竞赛平台

数据集内容:包括2013年9月由欧洲持卡人通过信用卡进行的交易,包括信用卡交易的金额、时间、金额等信息;

数据大小:284807行*31列;

字段说明:共31个字段,其中V1-V28是经过PCA转换后的数据(数字变量),Time交易时间以秒为单位,Amount交易金额,Class是交易类型(在欺诈情况为1,否则为0)。

《信用卡欺诈数据分析案例》
《信用卡欺诈数据分析案例》

PS:上面截图”字段描述“中”经过PAC转换后数据“中的”PAC“书写有误,应该是”PCA“,Principal Component Analysis,主成成分分析,用于数据特征提取,使用PCA对特征数据进行降维处理。

下文分2部分,第一部分为信用卡欺诈数据的数据分析,第二部分为利用信用卡欺诈数据构建反欺诈模型。

接下来先按照python数据分析对上述信用卡欺诈数据进行分析。

第一部分 信用卡欺诈数据分析

一、提出问题

根据信用卡数据提供的字段信息,提出以下几个问题:

1、交易类型中欺诈交易占比多少?

2、欺诈交易金额呈现什么规律?

3、使用信用卡交易一般发生在什么时间段?欺诈交易在什么时间段出现高峰?

4、对新的信用卡交易进行欺诈交易识别,即判断出现欺诈交易的概率?

根据上述问题,整理分析思路:通过对相关特征变量进行EDA探索性数据分析,利用逻辑回归算法建立欺诈模型。

二、理解数据

在Jupyter notebook中导入数据前,需要在Anaconda运行环境中安装工具包。

第一步,进入本地Jupyter notebook的py3环境,命令如下:

  • conda intall nb_conda
  • activate py3

第二步,安装工具包,命令如下:

  • 数据包
  • conda intall numpy
  • conda install pandas
  • 绘图包
  • conda install matplotlib
  • conda install seaborn
  • pip install pyecharts
  • pip install missingno(缺失值可视化处理)
  • 回归模型包
  • conda install scikit-learn

接下来在Jupyter notebook中开始导入数据,并进行数据分析。

(一)导入数据

第1步:导入数据包和绘图包

《信用卡欺诈数据分析案例》
《信用卡欺诈数据分析案例》

第2步:导入数据

《信用卡欺诈数据分析案例》
《信用卡欺诈数据分析案例》

(二)理解数据

第1步:查看数据大小

《信用卡欺诈数据分析案例》
《信用卡欺诈数据分析案例》

可见,数据集大小为284807行*31列,即31个数据特征。

第2步:查看数据前五行

《信用卡欺诈数据分析案例》
《信用卡欺诈数据分析案例》
《信用卡欺诈数据分析案例》
《信用卡欺诈数据分析案例》

上述数据集中有31个数据特征。

其中,V1-V28列对应的数据区间为[-1,1],是经过PCA转换后的数据,无需做其他特征处理。Amount列数据与其他列数据相比数值大小差异大,所以对后续建模时需要进行特征缩放处理。

第3步:查看数据类型

  • 查看数据类型的目的:检查数据是否需要进行转换。
  • 查看数据类型方法:可以用info()和dtypes两种函数,注意两者后面有无括号的区别:
  • http://data.info();
  • data.dtypes;

本文通过dtypes函数查看数据类型。

《信用卡欺诈数据分析案例》
《信用卡欺诈数据分析案例》

可知,上述数据规范,均为数据类型,无需进行数据转换处理。

第4步:查看数据统计信息

  • 查看数据统计信息的主要目的:检查数据有无缺失值和异常值。
  • 查看数据缺失值方法:可以用统计函数describe和缺失值可视化函数missingnso。
  • 函数deribe();
  • 函数msno.matrix(data);

《信用卡欺诈数据分析案例》
《信用卡欺诈数据分析案例》
《信用卡欺诈数据分析案例》
《信用卡欺诈数据分析案例》

通过使用统计信息查看,数据无缺失值。

为进一步验证数据无缺失值,使用缺失值可视化函数:

同样可见:数据集中无缺失值,无需进行缺失值处理。

综上,数据集中数据类型规范一致,且无缺失值和异常值,无需进行数据转换和缺失值异常值处理。

需要注意的是构建模型前需要对Amount进行特征缩放处理,避免后续算法使用不同列时不会因为数值的大小而导致权重分配不均匀问题。

三、数据清洗

由于本文案例中时间特征Time以秒为单位,为了后续方便统计分析信用卡交易发生的时间段,将单位转化为以小时为单位对应每天的时间。

《信用卡欺诈数据分析案例》
《信用卡欺诈数据分析案例》
《信用卡欺诈数据分析案例》
《信用卡欺诈数据分析案例》
《信用卡欺诈数据分析案例》
《信用卡欺诈数据分析案例》

至此,时间特征Time已完成清洗。

四、数据分析

根据上述提出的问题进行分析。

(一)信用卡交易中欺诈类的占比情况

  • 函数value_counts :用来计算Series或DataFrame里面相同数据出现的频率。
  • 举例说明:

《信用卡欺诈数据分析案例》
《信用卡欺诈数据分析案例》

接下来对本文案例中信用卡交易类型进行统计,分别计算出正常交易Class=0和欺诈交易Class=1出现的次数。

《信用卡欺诈数据分析案例》
《信用卡欺诈数据分析案例》

可见,出现正常交易的次数是284315次,出现欺诈交易的次数是492次,其中欺诈交易占总交易的比例是492/(284315+492)*100%=0.17%。

将上述结果进行可视化如下:

《信用卡欺诈数据分析案例》
《信用卡欺诈数据分析案例》

分析:样本中的欺诈交易数据和正常交易数据分布非常不均匀,所以在训练模型之前,需要对该部分数据进行预处理,以解决数据分布不均衡问题。

(二)信用卡交易的时间分布情况

分别查看信用卡正常交易和欺诈交易的描述性统计与时间序列分布的关系:

《信用卡欺诈数据分析案例》
《信用卡欺诈数据分析案例》

按照时间对信用卡交易情况进行可视化如下:

《信用卡欺诈数据分析案例》
《信用卡欺诈数据分析案例》
《信用卡欺诈数据分析案例》
《信用卡欺诈数据分析案例》

分析:

上图为信用卡48小时内的交易情况;

在信用卡欺诈交易样本中,离群值发生在客户使用信用卡消费更低频的时间段;

信用卡欺诈交易数量案发最高峰在第一天上午11点达到47次,其余发生信用卡被盗刷案发时间在晚上时间11点至第二早上9点之间;

信用卡欺诈交易最大金额是2,125.87美元,数额不大;

信用正常交易情况存在一定的周期性规律,可能与持卡人消费习惯有关。

(三)信用卡欺诈交易金额情况

分别查看信用卡正常交易和欺诈交易的描述性统计与金额的关系:

《信用卡欺诈数据分析案例》
《信用卡欺诈数据分析案例》

按照交易金额对信用卡交易情况进行可视化如下:

《信用卡欺诈数据分析案例》
《信用卡欺诈数据分析案例》
《信用卡欺诈数据分析案例》
《信用卡欺诈数据分析案例》

分析:信用卡欺诈交易的金额非常低,可见金额这一列的数据对分析的参考价值不大。

(四)各变量的相关性分析

查看各变量之间的相关性,表格太大,截取部分如下:

《信用卡欺诈数据分析案例》
《信用卡欺诈数据分析案例》

查看各变量与Class之间的相关性系数如下:

《信用卡欺诈数据分析案例》
《信用卡欺诈数据分析案例》

各变量与Class之间的相关性作图如下:

《信用卡欺诈数据分析案例》
《信用卡欺诈数据分析案例》

可知:V11、V4、V2这3个变量对Class的影响较大。

至此,数据分析已完成。

五、结论

综合上述分析,结论如下:

  • 信用卡交易数据集中出现正常交易的次数是284315次,出现欺诈交易的次数是492次,其中欺诈交易占总交易的比例是0.17%;
  • 数据集为信用卡48小时内的交易情况;
  • 在信用卡欺诈交易样本中,离群值发生在客户使用信用卡消费更低频的时间段;
  • 信用卡欺诈交易数量案发最高峰在第一天上午11点达到47次,其余发生信用卡被盗刷案发时间在晚上时间11点至第二早上9点之间;
  • 信用卡欺诈交易最大金额是2,125.87美元,数额不大;
  • 信用正常交易情况存在一定的周期性规律,可能与持卡人消费习惯有关;
  • 对信用卡正常交易与否影响最大的3个变量是:V11、V4、V2。

第二部分 构建信用卡发欺诈模型

在Jupyter notebook中开始建模前,需要在Anaconda中安装模型包,命令如下:

  • conda install scikit-learn;
  • pip insatll imblearn

在Jupyter notebook中导入建模包,命令如下:

《信用卡欺诈数据分析案例》
《信用卡欺诈数据分析案例》

一、特征工程

由于数据集中V1-V28列的数据已经经过特征化处理,所以无需再做其他处理。

但是:

  • Time和Amount列:数据规格和其他特征相差较大,因此为了避免权重影响,需要要进行特征缩放。
  • Class列:Class=0和Class=1的个数相差较大,数据分布不均衡。

所以,接下将对上述三列数据进行预处理。

(一)特征缩放:对Time和Amount列标准化处理

第1步:将‘Amount’和’Time‘放入新的列表中,便于同时进行特征缩放。

《信用卡欺诈数据分析案例》
《信用卡欺诈数据分析案例》

第2步:初始化缩放器,并对数据进行标准化

  • StanardScaler()(括号不能少):将特征中的值进行标准差标准化,即转换为均值为0,方差为1的正态分布;
  • 参考网址:StandardScalers数据预处理
  • fit_transform(trainData)对部分数据先拟合fit,找到该part的整体指标,如均值、方差、最大值最小值等等(根据具体转换的目的),然后对该trainData进行转换transform,从而实现数据的标准化、归一化等等。
  • 参考网址:fit_transform

《信用卡欺诈数据分析案例》
《信用卡欺诈数据分析案例》

第3步:查看整个数据集data中的’Time’和’Amount‘两列是否完成标准化。

《信用卡欺诈数据分析案例》
《信用卡欺诈数据分析案例》
《信用卡欺诈数据分析案例》
《信用卡欺诈数据分析案例》

可见,Time和Amount两列已完成标准化转换。

(二)Class列中不平衡数据处理

机器学习中不平衡数据的处理方式有以下几种:

《信用卡欺诈数据分析案例》
《信用卡欺诈数据分析案例》

本案例通过过采样的改进解法SMOTE算法进行数据合成处理不平衡数据问题。

首先解释过采样数据集SMOTE算法是什么。

SMOTE全称是Synthetic Minority Oversampling Technique即合成少数类过采样技术,它是基于随机过采样算法的一种改进方案,由于随机过采样采取简单复制样本的策略来增加少数类样本,这样容易产生模型过拟合的问题,即使得模型学习到的信息过于特别(Specific)而不够泛化(General),SMOTE算法的基本思想是对少数类样本进行分析并根据少数类样本人工合成新样本添加到数据集中,具体如下图所示,算法流程如下:

  • 对于少数类中每一个样本$x$,以欧氏距离为标准计算它到少数类样本集$S_min$中所有样本的距离,得到其k近邻;
  • 根据样本不平衡比例设置一个采样比例以确定采样倍率$N$,对于每一个少数类样本$x$,从其k近邻中随机选择若干个样本,假设选择的近邻为$\hat{x}$;
  • 对于每一个随机选出的近邻$\hat{x}$,分别与原样本按照如下的公式构建新的样本。

《信用卡欺诈数据分析案例》

《信用卡欺诈数据分析案例》
《信用卡欺诈数据分析案例》 SMOTE算法

注解欧式距离:欧式距离源自N维欧氏空间中两点x1,x2x1​,x2​间的距离公式:

《信用卡欺诈数据分析案例》

接下来用SMOTE算法对不平衡数据进行处理。

第1步:查看处理不平衡数据前情况,下图正样本即为Class=1数据样本,负样本即为Class=0数据样本,代码如下:

《信用卡欺诈数据分析案例》
《信用卡欺诈数据分析案例》

第2步:通过SMOTE方法平衡正负样本,代码如下:

《信用卡欺诈数据分析案例》
《信用卡欺诈数据分析案例》

至此,特征处理已完成。

二、建立训练数据集和测试数据集

《信用卡欺诈数据分析案例》
《信用卡欺诈数据分析案例》

三、模型构建及评估

建立逻辑回归模型并通过AUC值进行模型评估,AUC(Area Under roc Curve)是一种用来度量分类模型好坏的一个标准。AUC值为ROC曲线所覆盖的区域面积,显然,AUC越大,分类器分类效果越好。

  • python sklearn包:混淆矩阵、分类报告等自动生成;
  • my_confusion_matrix()函数:混淆矩阵,主要是针对预测出来的结果,和原来的结果对比,算出混淆矩阵。其对每个类别的混淆矩阵都计算出来了,并且labels参数默认是排序了的。
  • my_classification_report()函数:分类报告,主要针对每个类别给出详细的准确率、召回率和F-值这三个参数和宏平均值,用来评价算法好坏。另外ROC曲线的话,需要是对二分类才可以。

《信用卡欺诈数据分析案例》
《信用卡欺诈数据分析案例》

结果如下:

《信用卡欺诈数据分析案例》
《信用卡欺诈数据分析案例》

由上述结果可见,该模型的分类准确率为0.999,其模型精度即AUC数值为0.8,具有较高精度。后续可利用该模型自动批量化处理信用卡使用数据,完成欺诈风险评估。

附注:

    原文作者:蹦蹦跳跳
    原文地址: https://zhuanlan.zhihu.com/p/55671880
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞