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

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

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

文章目录

  • 技术提升
  • 关于数据
  • 导入必要的库
  • 导入数据集
  • 数据处理与理解
  • 训练与测试分离
  • 构建模型
    • 1)决策树
    • 2)随机森林
    • 3)XGBoost
  • 结论

技术提升

本文由技术群粉丝分享,项目源码、数据、技术交流提升,均可加交流群获取,群友已超过2000人,添加时最好的备注方式为:来源+兴趣方向,方便找到志同道合的朋友

方式①、添加微信号:mlc2060,备注:来自CSDN +研究方向
方式②、微信搜索公众号:机器学习社区,后台回复:加群

关于数据

本文使用的为 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的变换版本。

【实战案例】Python 信用卡欺诈检测其实特简单相关推荐

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

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

  2. 实战案例|基于机器学习的 Python 信用卡欺诈检测!

    欢迎关注 ,专注Python.数据分析.数据挖掘.好玩工具! 当我们在网上购买产品时,很多人喜欢使用信用卡.但信用卡欺诈常常会在身边发生,网络安全正成为我们生活中至关重要的一部分. 为了解决这个问题, ...

  3. python信用卡欺诈_有关信用卡欺诈的那个例子

    #信用卡欺诈检测 import pandas as pd import matplotlib.pyplot as plt import numpy as np #%matplotlib inline ...

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

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

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

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

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

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

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

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

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

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

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

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

最新文章

  1. Linux性能相关工具
  2. HDU ACM 1046 Gridland 找规律
  3. linux查看服务器网络状态
  4. Educational Codeforces Round 106 (Rated for Div. 2)
  5. git 短写设置_如何在短短几分钟内设置一个Git客户端
  6. springmvc接收参数
  7. xshell利用linux rz sz 命令上传、下载文件
  8. c# 跨线程访问窗体UI
  9. 搜索二维矩阵II(分治法和蛇行)
  10. python线程监控_一日一技:Python多线程的事件监控
  11. 如何用pe安装服务器系统安装系统教程视频,微pe安装系统教程视频
  12. 用c语言输出100到200之间的素数
  13. 自动补全 (自定义)拼音分词器 搜索时注意事项
  14. php同步今日头条,135编辑器可直接同步今日头条,新功能同时上线!
  15. 计算机excel中钱的符号,在excel中输入钱的符号
  16. layui自定义新增tab页方法
  17. 【知识图谱】实践篇——基于知识图谱的《红楼梦》人物关系可视化及问答系统实践:part6基于图谱的问答实现
  18. 01 linux 下tcl源码编译安装和tcl手册使用
  19. 数字图像处理 第八章 图像压缩
  20. 安卓手机如何查看手机控制台输出

热门文章

  1. 网页颜色对照表 - 4ngel's blog -京华志
  2. 电磁兼容01 EMC概论
  3. oracle11g建库详解,oracle11g手工建库
  4. 自制用于放置钙铀云母的铅盒
  5. 微服务精通之Feign原理解析
  6. 汽车百科系列之(六): 鲜为人知的自动挡驾驶误区
  7. 十句中英文情感感言!
  8. R语言画图 条形图画图实例分析
  9. Linux配置Oracle环境变量
  10. Spring Cloud 微服务开发:入门、进阶与源码剖析 —— 1.3 Spring Cloud 与中间件