欢迎关注 ,专注Python、数据分析、数据挖掘、好玩工具!

当我们在网上购买产品时,很多人喜欢使用信用卡。但信用卡欺诈常常会在身边发生,网络安全正成为我们生活中至关重要的一部分。

为了解决这个问题,我们需要利用机器学习算法构建一个异常行为的识别系统,如果发现可疑,中止操作。

在本文中,我将分享一个端到端模型训练方法,从数据获取到最后模型筛选,喜欢的小伙伴欢迎关注、点赞支持。

关于数据

本文使用的为 kaggle 数据:https://www.kaggle.com/mlg-ulb/creditcardfraud,该数据集为 2013 年欧洲持卡人的真实银行交易。出于安全考虑,该数据已转换为 PCA 版本,有 29 个特征列和 1 个类列。

导入必要的库

在这里我将导入所有必要的库。由于信用卡数据特征是 PCA 的转换版本,因此我们不需要再次执行特征选择。否则,建议使用 RFE、RFECV、SelectKBest 和 VIF score 来查找适合模型的特征。

#Packages related to general operating system & warnings
import os
import warnings
warnings.filterwarnings('ignore')
#Packages related to data importing, manipulation, exploratory data #analysis, data understanding
import numpy as np
import pandas as pd
from pandas import Series, DataFrame
from termcolor import colored as cl # text customization
#Packages related to data visualizaiton
import seaborn as sns
import matplotlib.pyplot as plt
%matplotlib inline
#Setting plot sizes and type of plot
plt.rc("font", size=14)
plt.rcParams['axes.grid'] = True
plt.figure(figsize=(6,3))
plt.gray()
from matplotlib.backends.backend_pdf import PdfPages
from sklearn.model_selection import train_test_split, GridSearchCV
from sklearn import metrics
from sklearn.impute import MissingIndicator, SimpleImputer
from sklearn.preprocessing import  PolynomialFeatures, KBinsDiscretizer, FunctionTransformer
from sklearn.preprocessing import StandardScaler, MinMaxScaler, MaxAbsScaler
from sklearn.preprocessing import LabelEncoder, OneHotEncoder, LabelBinarizer, OrdinalEncoder
import statsmodels.formula.api as smf
import statsmodels.tsa as tsa
from sklearn.linear_model import LogisticRegression, LinearRegression, ElasticNet, Lasso, Ridge
from sklearn.neighbors import KNeighborsClassifier, KNeighborsRegressor
from sklearn.tree import DecisionTreeClassifier, DecisionTreeRegressor, export_graphviz, export
from sklearn.ensemble import BaggingClassifier, BaggingRegressor,RandomForestClassifier,RandomForestRegressor
from sklearn.ensemble import GradientBoostingClassifier,GradientBoostingRegressor, AdaBoostClassifier, AdaBoostRegressor
from sklearn.svm import LinearSVC, LinearSVR, SVC, SVR
from xgboost import XGBClassifier
from sklearn.metrics import f1_score
from sklearn.metrics import accuracy_score
from sklearn.metrics import confusion_matrix

导入数据集

导入数据集非常简单。你只需使用 python 中的 pandas 模块导入它,运行如下命令,数据集可文末下载

data=pd.read_csv("creditcard.csv")

数据处理与理解

关于这些数据,你可能会注意到一个问题,数据集是不平衡的,因为数据集中正常交易占绝大多数,只有少数百分比的交易是欺诈的。

让我们检查一下数据分布。

Total_transactions = len(data)
normal = len(data[data.Class == 0])
fraudulent = len(data[data.Class == 1])
fraud_percentage = round(fraudulent/normal*100, 2)
print(cl('Total number of Trnsactions are {}'.format(Total_transactions), attrs = ['bold']))
print(cl('Number of Normal Transactions are {}'.format(normal), attrs = ['bold']))
print(cl('Number of fraudulent Transactions are {}'.format(fraudulent), attrs = ['bold']))
print(cl('Percentage of fraud Transactions is {}'.format(fraud_percentage), attrs = ['bold']))

我们还可以使用以下代码检查空值。

data.info()

根据每列的计数,我们没有空值。此外,可以尝试应用特征选择方法来检查结果是否得到优化。

我在数据中观察到 28 个特征是 PCA 的转换版本,但字段"Amount "是原始的。在检查最小值和最大值时,我发现差异很大,可能会偏离我们的结果。

在这种情况下,我按照如下方法整理。

sc = StandardScaler()
amount = data['Amount'].values
data['Amount'] = sc.fit_transform(amount.reshape(-1, 1))

我们还有一个变量,即 time,它可能是一个外部决定因素,在我们的建模过程中,舍弃它。

我们还可以检查任何重复数据。在删除任何重复数据之前,数据集中有 284807 行。

去重

data.drop_duplicates(inplace=True)

因此,我们有大约9000笔重复交易。

训练与测试分离

在拆分训练和测试之前,我们需要定义因变量和自变量。因变量也称为 X,自变量称为 y。

X = data.drop('Class', axis = 1).values
y = data['Class'].values

现在,让我们拆分训练和测试数据。

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.25, random_state = 1)

就这样,我们现在有两个不同的数据集。

构建模型

我们将尝试不同的机器学习模型。定义模型要容易得多。一行代码就可以定义我们的模型。同样,一行代码可以在我们的数据上拟合模型。我们也可以通过选择不同的优化参数来调整这些模型。

1)决策树

DT = DecisionTreeClassifier(max_depth = 4, criterion = 'entropy')
DT.fit(X_train, y_train)
dt_yhat = DT.predict(X_test)

让我们查看一下决策树模型的准确性。

print('Accuracy score of the Decision Tree model is {}'.format(accuracy_score(y_test, tree_yhat)))
Accuracy score of the Decision Tree model is 0.999288989494457

查看决策树模型的F1分数。

print('F1 score of the Decision Tree model is {}'.format(f1_score(y_test, tree_yhat)))
F1 score of the Decision Tree model is 0.776255707762557

查看混淆矩阵:

confusion_matrix(y_test, tree_yhat, labels = [0, 1])

2)随机森林

rf = RandomForestClassifier(max_depth = 4)
rf.fit(X_train, y_train)
rf_yhat = rf.predict(X_test)

让我们看一下随机森林模型的准确性。

print('Accuracy score of the Random Forest model is {}'.format(accuracy_score(y_test, rf_yhat)))
Accuracy score of the Random Forest model is 0.9993615415868594

查看随机森林模型的F1分数。

print('F1 score of the Random Forest model is {}'.format(f1_score(y_test, rf_yhat)))
F1 score of the Random Forest model is 0.7843137254901961

3)XGBoost

xgb = XGBClassifier(max_depth = 4)
xgb.fit(X_train, y_train)
xgb_yhat = xgb.predict(X_test)

让我们看一下 XGBoost 模型的准确性。

print('Accuracy score of the XGBoost model is {}'.format(accuracy_score(y_test, xgb_yhat)))
Accuracy score of the XGBoost model is 0.9995211561901445

查看 XGBoost 模型的F1分数。

print('F1 score of the XGBoost model is {}'.format(f1_score(y_test, xgb_yhat)))
F1 score of the XGBoost model is 0.8421052631578947

结论

我们刚刚获得了 99.95% 的信用卡欺诈检测准确率。这一数字并不令人惊讶,因为我们的数据是针对一个类别的。

根据我们的 F1-Score 得分,XGBoost 是我们案例的赢家。这里唯一需要注意的是我们用于模型训练的数据。数据特征是PCA的变换版本。


技术交流

欢迎转载、收藏、有所收获点赞支持一下!


目前开通了技术交流群,群友超过2000人,添加方式如下:

如下方式均可,添加时最好方式为:来源+兴趣方向,方便找到志同道合的朋友

  • 方式一、发送如下图片至微信,进行长按识别,回复加群;
  • 方式二、直接添加小助手微信号:pythoner666,备注:来自CSDN
  • 方式三、微信搜索公众号:Python学习与数据挖掘,后台回复:加群

实战案例|基于机器学习的 Python 信用卡欺诈检测!相关推荐

  1. 毕业设计 - 题目:基于大数据的信用卡欺诈检测

    文章目录 0 简介 1 数据集 2 分析流程 3 数据预览 3.1 数据浏览 3.1.1 查看数据分布 4 数据规范化 4.1 amount特征缩放并去除time字段 4.2 解决样本不均衡问题 5 ...

  2. 【实战案例】Python 信用卡欺诈检测其实特简单

    当我们在网上购买产品时,很多人喜欢使用信用卡.但信用卡欺诈常常会在身边发生,网络安全正成为我们生活中至关重要的一部分. 为了解决这个问题,我们需要利用机器学习算法构建一个异常行为的识别系统,如果发现可 ...

  3. 机器学习实战 | Python 信用卡欺诈检测其实特简单

    本文旨在使用 XGBoost.随机森林.KNN.逻辑回归.SVM 和决策树解决分类问题.喜欢记得收藏.关注.点赞. 注:文末提供技术交流群 案例简介 假设你受雇于帮助一家信用卡公司检测潜在的欺诈案件, ...

  4. 【实战案例】分享6种常用的信用卡欺诈检测算法(附 Python 代码)

    大家好,本文旨在使用 XGBoost.随机森林.KNN.逻辑回归.SVM 和决策树解决信用卡潜在欺诈的分类问题,内容较长,建议收藏.点赞. 文章目录 技术提升 案例简介 导入相关模块 导入数据 探索性 ...

  5. 机器学习实战分享:用 Python 进行信用卡欺诈检测

    本文旨在使用 XGBoost.随机森林.KNN.逻辑回归.SVM 和决策树解决分类问题,内容较长,建议收藏.关注.点赞. 案例简介 假设你受雇于帮助一家信用卡公司检测潜在的欺诈案件,你的工作是确保客户 ...

  6. 信用卡欺诈检测python_Python机器学习实战:信用卡欺诈检测

    原标题:Python机器学习实战:信用卡欺诈检测 本文作者:唐宇迪 ,文末有彩蛋!本期送书python! 故事背景:原始数据为个人交易记录,但是考虑数据本身的隐私性,已经对原始数据进行了类似PCA的处 ...

  7. 机器学习项目实战----信用卡欺诈检测(二)

    六.混淆矩阵: 混淆矩阵是由一个坐标系组成的,有x轴以及y轴,在x轴里面有0和1,在y轴里面有0和1.x轴表达的是预测的值,y轴表达的是真实的值.可以对比真实值与预测值之间的差异,可以计算当前模型衡量 ...

  8. 机器学习之信用卡欺诈检测(零基础,附数据及详细python代码2022年Tensorflow2)

    首先该数据参考:机器学习项目实战之信用卡欺诈检测(零基础,附数据及详细python代码) (4条消息) 机器学习项目实战之信用卡欺诈检测(零基础,附数据及详细python代码)_西南交大-Liu_z的 ...

  9. python之逻辑回归项目实战——信用卡欺诈检测

    信用卡欺诈检测 1.项目介绍 2.项目背景 3.分析项目 4.数据读取与分析 4.1 加载数据 4.2 查看数据的标签分布 5.数据预处理 5.1 特征标准化 5.2. 使用下采样解决样本数据不均衡 ...

最新文章

  1. Yolo(3)(项目)Yolo v3 目标检测(85分类)
  2. Oracle学习笔记:oracle的编程接口
  3. GCD学习之dispatch_barrier_async
  4. 位姿检索PoseRecognition:LSH算法.p稳定哈希
  5. jQuery学习--选择器的使用
  6. 慎用PHP $_REQUEST数组
  7. php 魔术方法 isset,PHP 魔术方法 __isset __unset (三)
  8. BCD码干什么用的?
  9. php读取xml的值,PHP读取XML值的代码(推荐)
  10. 模拟电路 - 半导体基本知识
  11. 2022深圳中小学生学位补贴申报形式及流程
  12. 电脑仙人掌机器人作文_用蜗牛.仙人掌.电脑.雪人.机器人.蚕宝宝.大象任意选两个编写一则300童话...
  13. Maven项目 cityFileFK02数据库连接(课外完成)
  14. ping ip和端口
  15. PotPlayer会造成obs录制声音忽大忽小
  16. mysql导出xls_MySQL导出 xls上传到异机
  17. 奥比中光Femto相机环境配置
  18. 文件服务器 小文件,小型文件服务器
  19. python-docx 设置表格边框
  20. 李开复教你如何发现自己的兴趣爱好

热门文章

  1. 阶段性总结:复旦微的FMQL10S400ZYNQ芯片+国微SM25QH256MX的FLASH的使用感受
  2. Hadoop下载安装及HDFS配置教程
  3. 深入分析RxJava的Disposable及其工作原理
  4. 网络流24题-[CTSC1999]家园
  5. HSV色彩空间表和cv2.inRange()的用法
  6. 超级星饭团专访张震:就希望你们会喜欢
  7. [附源码]java毕业设计基于篮球云网站
  8. android电视用久了会卡吗,电视卡顿怎么办?三个方法,轻松让卡顿的电视满血复活...
  9. Strftime 时间格式大全
  10. OMG,这篇文章帮你轻松搞懂TCP/IP 协议,看不懂 你来找我!