返回顶部
首页 > 资讯 > 后端开发 > Python >怎么用Python分析信用卡反欺诈
  • 809
分享到

怎么用Python分析信用卡反欺诈

2023-06-16 19:06:48 809人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

这篇文章主要介绍“怎么用python分析信用卡反欺诈”,在日常操作中,相信很多人在怎么用Python分析信用卡反欺诈问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么用Python分析信用卡反欺诈”的疑惑有所

这篇文章主要介绍“怎么用python分析信用卡反欺诈”,在日常操作中,相信很多人在怎么用Python分析信用卡反欺诈问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么用Python分析信用卡反欺诈”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

数据来源及项目概况

数据集包含欧洲持卡人于2013年9月通过信用卡进行的交易。该数据集提供两天内发生的交易,其中在284,807笔交易中有492起欺诈行为。

数据集非常不平衡,负面类别(欺诈)占所有交易的0.172%。

它只包含数值输入变量,这是PCA变换的结果。不幸的是,由于保密问题,我们无法提供有关数据的原始特征和更多背景信息。特征V1,V2,...  V28是用PCA获得的主要组件,唯一没有用PCA转换的特征是'Time'和'Amount'。

  • “时间”包含每个事务与数据集中第一个事务之间经过的秒数。

  • '金额'是交易金额,该特征可以用于依赖于例子的成本敏感性学习。

  • “Class”是响应变量,在欺诈的情况下其值为1,否则为0。

2、准备并初步查看数据集

# 导入包 import numpy as np import pandas as pd import matplotlib.pyplot as plt import matplotlib.gridspec as gridspec import seaborn as sns; plt.style.use('ggplot') import sklearn from sklearn.preprocessing import StandardScaler from sklearn.model_selection import train_test_split from sklearn.utils import shuffle from sklearn.metrics import confusion_matrix from sklearn.manifold import TSNE pass # 倒入并查看数据 crecreditcard_data=pd.read_csv('./creditcard.csv') crecreditcard_data.shape,crecreditcard_data.info() <class 'pandas.core.frame.DataFrame'> RangeIndex: 284807 entries, 0 to 284806 Data columns (total 31 columns): Time 284807 non-null float64 V1 284807 non-null float64 V2 284807 non-null float64 V3 284807 non-null float64 V4 284807 non-null float64 V5 284807 non-null float64 V6 284807 non-null float64 V7 284807 non-null float64 V8 284807 non-null float64 V9 284807 non-null float64 V10 284807 non-null float64 V11 284807 non-null float64 V12 284807 non-null float64 V13 284807 non-null float64 V14 284807 non-null float64 V15 284807 non-null float64 V16 284807 non-null float64 V17 284807 non-null float64 V18 284807 non-null float64 V19 284807 non-null float64 V20 284807 non-null float64 V21 284807 non-null float64 V22 284807 non-null float64 V23 284807 non-null float64 V24 284807 non-null float64 V25 284807 non-null float64 V26 284807 non-null float64 V27 284807 non-null float64 V28 284807 non-null float64 Amount 284807 non-null float64 Class 284807 non-null int64 dtypes: float64(30), int64(1) memory usage: 67.4 MB ((284807, 31), None) crecreditcard_data.describe() pass crecreditcard_data.head() pass # 看看欺诈与非欺诈的比例如何 count_classes=pd.value_counts(crecreditcard_data['Class'],sort=True).sort_index() # 统计下具体数据 count_classes.value_counts() # 也可以用count_classes[0],count_classes[1]看分别数据 284315 1 492 1 Name: Class, dtype: int64 count_classes.plot(kind='bar') plt.show()

怎么用Python分析信用卡反欺诈

0代表正常,1代表欺诈,二者数量严重失衡,极度不平衡,根本不在一个数量级上。

3、欺诈与时间序列分布关系

# 查看二者的描述性统计,与时间的序列分布关系 print('NORMal') print(crecreditcard_data.  Time[crecreditcard_data.Class == 0].describe()) print('-'*25) print('Fraud') print(crecreditcard_data.  Time[crecreditcard_data.Class == 1].describe()) Normal count 284315.000000 mean 94838.202258 std 47484.015786 min 0.000000 25% 54230.000000 50% 84711.000000 75% 139333.000000 max 172792.000000 Name: Time, dtype: float64 ------------------------- Fraud count 492.000000 mean 80746.806911 std 47835.365138 min 406.000000 25% 41241.500000 50% 75568.500000 75% 128483.000000 max 170348.000000 Name: Time, dtype: float64 f,(ax1,ax2)=plt.subplots(2,1,sharex=True,figsize=(12,6)) bins=50 ax1.hist(crecreditcard_data.Time[crecreditcard_data.Class == 1],bins=bins) ax1.set_title('欺诈(Fraud))',fontsize=22) ax1.set_ylabel('交易量',fontsize=15) ax2.hist(crecreditcard_data.Time[crecreditcard_data.Class == 0],bins=bins) ax2.set_title('正常(Normal',fontsize=22) plt.xlabel('时间(单位:秒)',fontsize=15) plt.xticks(fontsize=15) plt.ylabel('交易量',fontsize=15) # plt.yticks(fontsize=22) plt.show()

怎么用Python分析信用卡反欺诈

欺诈与时间并没有必然联系,不存在周期性;

正常交易有明显的周期性,有类似双峰这样的趋势。

4、欺诈与金额的关系和分布情况

print('欺诈') print(crecreditcard_data.Amount[crecreditcard_data.Class ==1].describe()) print('-'*25) print('正常交易') print(crecreditcard_data.Amount[crecreditcard_data.Class==0].describe()) 欺诈 count 492.000000 mean 122.211321 std 256.683288 min 0.000000 25% 1.000000 50% 9.250000 75% 105.890000 max 2125.870000 Name: Amount, dtype: float64 ------------------------- 正常交易 count 284315.000000 mean 88.291022 std 250.105092 min 0.000000 25% 5.650000 50% 22.000000 75% 77.050000 max 25691.160000 Name: Amount, dtype: float64 f,(ax1,ax2)=plt.subplots(2,1,sharex=True,figsize=(12,6)) bins=30 ax1.hist(crecreditcard_data.Amount[crecreditcard_data.Class == 1],bins=bins) ax1.set_title('欺诈(Fraud)',fontsize=22) ax1.set_ylabel('交易量',fontsize=15) ax2.hist(crecreditcard_data.Amount[crecreditcard_data.Class == 0],bins=bins) ax2.set_title('正常(Normal)',fontsize=22) plt.xlabel('金额($)',fontsize=15) plt.xticks(fontsize=15) plt.ylabel('交易量',fontsize=15) plt.yscale('log') plt.show()

怎么用Python分析信用卡反欺诈

金额普遍较低,可见金额这一列的数据对分析的参考价值不大。

5、查看各个自变量(V1-V29)与因变量的关系

看看各个变量与正常、欺诈之间是否存在联系,为了更直观展示,通过distplot图来逐个判断,如下:

features=[x for x in crecreditcard_data.columns   if x not in ['Time','Amount','Class']] plt.figure(figsize=(12,28*4)) gs =gridspec.GridSpec(28,1) import warnings warnings.filterwarnings('ignore') for i,cn in enumerate(crecreditcard_data[v_features]):  ax=plt.subplot(gs[i])  sns.distplot(crecreditcard_data[cn][crecreditcard_data.Class==1],bins=50,color='red')  sns.distplot(crecreditcard_data[cn][crecreditcard_data.Class==0],bins=50,color='green')  ax.set_xlabel('')  ax.set_title('直方图:'+str(cn)) plt.savefig('各个变量与class的关系.png',transparent=False,bbox_inches='tight') plt.show()

怎么用Python分析信用卡反欺诈

红色表示欺诈,绿色表示正常。

  • 两个分布的交叉面积越大,欺诈与正常的区分度最小,如V15;

  • 两个分布的交叉面积越小,则该变量对因变量的影响越大,如V14。

下面我们看看各个单变量与class的相关性分析,为更直观展示,直接作图,如下:

# 各个变量的矩阵分布 crecreditcard_data.hist(figsize=(15,15),bins=50) plt.show()
怎么用Python分析信用卡反欺诈

6、三种方法建模并分析

本部分将应用逻辑回归、随机森林、支持向量SVM三种方法建模分析,分别展开如下:

准备数据:

# 先把数据分为欺诈组和正常组,然后按比例生产训练和测试数据集 # 分组 Fraud=crecreditcard_data[crecreditcard_data.Class == 1] Normal=crecreditcard_data[crecreditcard_data.Class == 0] # 训练特征集 x_train=Fraud.sample(frac=0.7) x_train=pd.concat([x_train,Normal.sample(frac=0.7)],axis=0) # 测试特征集 x_test=crecreditcard_data.loc[~crecreditcard_data.index.isin(x_train.index)] # 标签集 y_train=x_train.Class y_test=x_test.Class # 去掉特征集里的标签和时间列 x_train=x_train.drop(['Class','Time'],axis=1) x_test=x_test.drop(['Class','Time'],axis=1) # 查看数据结构 print(x_train.shape,y_train.shape,  '\n',x_test.shape,y_test.shape) (199364, 29) (199364,)   (85443, 29) (85443,)

6.1 逻辑回归方法

from sklearn import metrics import scipy.optimize as op from sklearn.linear_model import LoGISticRegression from sklearn.cross_validation import KFold,cross_val_score from sklearn.metrics import (precision_recall_curve,  auc,roc_auc_score,  roc_curve,recall_score,  classification_report) lrmodel = LogisticRegression(penalty='l2') lrmodel.fit(x_train, y_train) #查看模型 print('lrmodel') print(lrmodel) lrmodel LogisticRegression(C=1.0, class_weight=None, dual=False, fit_intercept=True,  intercept_scaling=1, max_iter=100, multi_class='ovr', n_jobs=1,  penalty='l2', random_state=None, solver='liblinear', tol=0.0001,  verbose=0, warm_start=False) #查看混淆矩阵 ypred_lr=lrmodel.predict(x_test) print('confusion_matrix') print(metrics.confusion_matrix(y_test,ypred_lr)) confusion_matrix [[85284 11]  [ 56 92]] #查看分类报告 print('classification_report') print(metrics.classification_report(y_test,ypred_lr)) classification_report  precision recall f1-score support  0 1.00 1.00 1.00 85295  1 0.89 0.62 0.73 148 avg / total 1.00 1.00 1.00 85443 #查看预测精度与决策覆盖面 print('Accuracy:%f'%(metrics.accuracy_score(y_test,ypred_lr))) print('Area under the curve:%f'%(metrics.roc_auc_score(y_test,ypred_lr))) Accuracy:0.999216 Area under the curve:0.810746

6.2 随机森林模型

from sklearn.ensemble import RandomForestClassifier rfmodel=RandomForestClassifier() rfmodel.fit(x_train,y_train) #查看模型 print('rfmodel') rfmodel rfmodel RandomForestClassifier(bootstrap=True, class_weight=None, criterion='gini',  max_depth=None, max_features='auto', max_leaf_nodes=None,  min_impurity_decrease=0.0, min_impurity_split=None,  min_samples_leaf=1, min_samples_split=2,  min_weight_fraction_leaf=0.0, n_estimators=10, n_jobs=1,  oob_score=False, random_state=None, verbose=0,  warm_start=False) #查看混淆矩阵 ypred_rf=rfmodel.predict(x_test) print('confusion_matrix') print(metrics.confusion_matrix(y_test,ypred_rf)) confusion_matrix [[85291 4]  [ 34 114]] #查看分类报告 print('classification_report') print(metrics.classification_report(y_test,ypred_rf)) classification_report  precision recall f1-score support  0 1.00 1.00 1.00 85295  1 0.97 0.77 0.86 148 avg / total 1.00 1.00 1.00 85443 #查看预测精度与决策覆盖面 print('Accuracy:%f'%(metrics.accuracy_score(y_test,ypred_rf))) print('Area under the curve:%f'%(metrics.roc_auc_score(y_test,ypred_rf))) Accuracy:0.999625 Area under the curve:0.902009

6.3支持向量机SVM

# SVM分类 from sklearn.svm import SVC svcmodel=SVC(kernel='sigmoid') svcmodel.fit(x_train,y_train) #查看模型 print('svcmodel') svcmodel SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0,  decision_function_shape='ovr', degree=3, gamma='auto', kernel='sigmoid',  max_iter=-1, probability=False, random_state=None, shrinking=True,  tol=0.001, verbose=False) #查看混淆矩阵 ypred_svc=svcmodel.predict(x_test) print('confusion_matrix') print(metrics.confusion_matrix(y_test,ypred_svc)) confusion_matrix [[85197 98]  [ 142 6]] #查看分类报告 print('classification_report') print(metrics.classification_report(y_test,ypred_svc)) classification_report  precision recall f1-score support  0 1.00 1.00 1.00 85295  1 0.06 0.04 0.05 148 avg / total 1.00 1.00 1.00 85443 #查看预测精度与决策覆盖面 print('Accuracy:%f'%(metrics.accuracy_score(y_test,ypred_svc))) print('Area under the curve:%f'%(metrics.roc_auc_score(y_test,ypred_svc))) Accuracy:0.997191 Area under the curve:0.519696

到此,关于“怎么用Python分析信用卡反欺诈”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

--结束END--

本文标题: 怎么用Python分析信用卡反欺诈

本文链接: https://lsjlt.com/news/284860.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 怎么用Python分析信用卡反欺诈
    这篇文章主要介绍“怎么用Python分析信用卡反欺诈”,在日常操作中,相信很多人在怎么用Python分析信用卡反欺诈问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么用Python分析信用卡反欺诈”的疑惑有所...
    99+
    2023-06-16
  • 机器学习——信用卡反欺诈案例
    导入类库 1 import numpy as np 2 import pandas as pd 3 from pandas import Series, DataFrame 4 import matplotlib.pyplot ...
    99+
    2023-01-30
    信用卡 机器 案例
  • 使用Python怎么对Syslog信息进行分析
    本篇文章给大家分享的是有关使用Python怎么对Syslog信息进行分析,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。实验目的:对设备Syslong信息进行分析记录,并写入sq...
    99+
    2023-06-14
  • 使用 python 进行微信好友分析
    使用 python 进行微信好友分析 1. 使用到的库 ① wxpy:初始化微信机器人 ② openpyxl:保存微信好友数据为Excel表格 ③ pyecharts:生成可视化的地图 ④ wordcloud、matplotlib、jie...
    99+
    2023-01-31
    好友 python
  • 怎么用python做数据分析
    要使用Python进行数据分析,可以按照以下步骤进行:1. 安装Python和相关库:首先,确保你已经安装了Python的最新版本。...
    99+
    2023-10-12
    python
  • 怎么用Python爬虫分析App
    这篇文章主要讲解了“怎么用Python爬虫分析App”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么用Python爬虫分析App”吧!1 分析背景之前我们使用了 Scrapy 爬取并分析了...
    99+
    2023-06-02
  • 怎么用Python分析人口数据
    本篇内容介绍了“怎么用Python分析人口数据”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、分析目标新中国成立70,经历了许许多多的风风...
    99+
    2023-06-13
  • 怎么用Python进行数据分析
    这篇文章主要讲解了“怎么用Python进行数据分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么用Python进行数据分析”吧!评论情感倾向先调用百度AI来分析微博和b站的评论情感倾向。...
    99+
    2023-06-01
  • 亚马逊云服务器信用卡怎么用
    首先,您需要注册一个亚马逊云服务账户。 在账户注册页面,您需要输入您的姓名、电子邮件地址、出生日期等个人信息。 接下来,您可以选择要使用的云服务,例如Amazon Web Services(AWS)或Microsoft Azure。 在选...
    99+
    2023-10-27
    亚马逊 信用卡 服务器
  • Python反射机制怎么应用
    本文小编为大家详细介绍“Python反射机制怎么应用”,内容详细,步骤清晰,细节处理妥当,希望这篇“Python反射机制怎么应用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。什么是反射在Python中,反射是指通...
    99+
    2023-07-05
  • 怎么利用Python进行客户分群分析
    这篇文章主要讲解了“怎么利用Python进行客户分群分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么利用Python进行客户分群分析”吧!导入数据和python库import ...
    99+
    2023-07-05
  • 普通信用卡亚马逊服务器怎么用
    打开亚马逊AWS客户端或访问 AWS 控制台并选择您的 AWS 帐户。 点击 Sources 菜单,然后选择 AWS Store 。 在 AWS Store 中,您可以选择要使用的 AWS 服务,并将其与您的 USB 驱动器或 Micro...
    99+
    2023-10-27
    亚马逊 信用卡 服务器
  • 亚马逊云服务器信用卡怎么用的
    使用信用卡在亚马逊云服务器上进行付款非常简单。以下是具体步骤: 登录您的亚马逊云服务器账户。 在控制台页面上,选择“账单”选项卡。 在账单页面上,选择“付款方式”选项卡。 点击“添加付款方式”按钮。 在弹出的窗口中,选择“信用卡”选项。...
    99+
    2023-10-27
    亚马逊 信用卡 服务器
  • 怎么用Python进行帕累托分析
    这篇文章主要介绍“怎么用Python进行帕累托分析”,在日常操作中,相信很多人在怎么用Python进行帕累托分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么用Python进行帕累托分析”的疑惑有所帮助!...
    99+
    2023-06-15
  • 怎么利用python进行数值分析
    小编给大家分享一下怎么利用python进行数值分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!一、准备噪声是在拟合过程中常用的干扰手段,常用的噪声:统一分布 U(a,b)f ( x ) = { 1 i f a ≤ x &...
    99+
    2023-06-15
  • 怎么用Python分析44万条数据
    本篇文章给大家分享的是有关怎么用Python分析44万条数据,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。有个段子讲“十年文案老司机,不如网易评论区,网易文豪遍地走,评论全部单...
    99+
    2023-06-02
  • 怎么使用Python进行数据分析
    使用Python进行数据分析可以通过以下几个步骤:1. 安装Python和相关库:首先需要安装Python解释器,推荐使用Anaco...
    99+
    2023-08-23
    Python
  • 怎么使用python画皮卡丘
    这篇文章主要介绍怎么使用python画皮卡丘,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!python的数据类型有哪些python的数据类型:1. 数字类型,包括int(整型)、long(长整型)和float(浮点型...
    99+
    2023-06-14
  • 怎么用Python分析国庆旅游景点
    本篇内容介绍了“怎么用Python分析国庆旅游景点”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、目标使用Python分析出国庆哪些旅游景...
    99+
    2023-06-16
  • Python怎么实现RFM用户分析模型
    本篇内容介绍了“Python怎么实现RFM用户分析模型”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!看这篇文章前源数据长这样:学完后只要敲一...
    99+
    2023-06-16
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作