数据分析案例-基于随机森林模型对信用卡欺诈检测

简介: 数据分析案例-基于随机森林模型对信用卡欺诈检测

项目背景

信用卡欺诈是指故意使用伪造、作废的信用卡,冒用他人的信用卡骗取财物,或用本人信用卡进行恶意透支的行为,信用卡欺诈形式分为3种:失卡冒用、假冒申请、伪造信用卡。欺诈案件中,有60%以上是伪造信用卡诈骗,其特点是团伙性质,从盗取卡资料、制造假卡、贩卖假卡,到用假卡作案,牟取暴利。而信用卡欺诈检测是银行减少损失的重要手段。


数据介绍


部分数据如下



导入数据

import pandas as pd
import matplotlib.pyplot as plt
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import confusion_matrix,accuracy_score,classification_report
import numpy as np
import warnings
warnings.filterwarnings('ignore')
data = pd.read_csv("creditcard.csv")
data.head()
  Time  V1  V2  V3  V4  V5  V6  V7  V8  V9  ... V21 V22 V23 V24 V25 V26 V27 V28 Amount  Class
0 0.0 -1.359807 -0.072781 2.536347  1.378155  -0.338321 0.462388  0.239599  0.098698  0.363787  ... -0.018307 0.277838  -0.110474 0.066928  0.128539  -0.189115 0.133558  -0.021053 149.62  0
1 0.0 1.191857  0.266151  0.166480  0.448154  0.060018  -0.082361 -0.078803 0.085102  -0.255425 ... -0.225775 -0.638672 0.101288  -0.339846 0.167170  0.125895  -0.008983 0.014724  2.69  0
2 1.0 -1.358354 -1.340163 1.773209  0.379780  -0.503198 1.800499  0.791461  0.247676  -1.514654 ... 0.247998  0.771679  0.909412  -0.689281 -0.327642 -0.139097 -0.055353 -0.059752 378.66  0
3 1.0 -0.966272 -0.185226 1.792993  -0.863291 -0.010309 1.247203  0.237609  0.377436  -1.387024 ... -0.108300 0.005274  -0.190321 -1.175575 0.647376  -0.221929 0.062723  0.061458  123.50  0
4 2.0 -1.158233 0.877737  1.548718  0.403034  -0.407193 0.095921  0.592941  -0.270533 0.817739  ... -0.009431 0.798278  -0.137458 0.141267  -0.206010 0.502292  0.219422  0.215153  69.99 0


查看数据大小



原始数据共有284807行,31列


数据清洗

删除缺失值和重复值


# 删除缺失值
data.dropna(inplace=True)
# 删除重复值
data.drop_duplicates(inplace=True)
data.shape
(283726, 31)

经过数据清洗后还有283726行,31列数据


数据可视化

查看是否欺诈的数量比例

count_classes = pd.value_counts(data['Class'], sort = True).sort_index()
count_classes.plot(kind = 'bar')
plt.title("Fraud class histogram")
plt.xlabel("Class")
plt.ylabel("Frequency")
for x,y in enumerate(count_classes.values):
    plt.text(x,y+100,'%s' % y,ha='center',va='bottom')
plt.show()

我们发现原始数据中欺诈的数量很少,只有492条,而没有欺诈的样本有284315条 ,


比例相差较大。


数据预处理

由于前面我们发现要分类的类别比例相差较大,所有这里我们要用到欠采样,也就是在类别0里面是数据随机取出与类别1数量想等的样本进行模型预测,然后对比没有进行欠采样和经过欠采样之后的对比。


# 准备数据
X = data.drop('Class',axis=1)
y = data['Class']
# 统计欺诈的数量及挑选出它的索引
number_records_fraud = len(data[data.Class == 1])
fraud_indices = np.array(data[data.Class == 1].index)
# 挑选出没有欺诈的索引
normal_indices = data[data.Class == 0].index
# 从没有欺诈中随机挑选出与欺诈数量想等的索引
random_normal_indices = np.random.choice(normal_indices, number_records_fraud, replace = False)
random_normal_indices = np.array(random_normal_indices)
# 合并两个数量想等的欺诈和非欺诈的索引
under_sample_indices = np.concatenate([fraud_indices,random_normal_indices])
# 根据其索引找到其对应的数据
under_sample_data = data.iloc[under_sample_indices,:]
under_sample_data
# 欠采样后的X Y
X_undersample = under_sample_data.drop('Class',1)
y_undersample = under_sample_data['Class']


当然这步我们也可以直接调用sklearn中的api直接使用


建立模型

首先需要划分数据集


# 划分原数据集
X_train, X_test, y_train, y_test = train_test_split(X,y,test_size = 0.3, random_state = 42)
# 划分经过欠采样后的数据集
X_train_undersample, X_test_undersample, y_train_undersample, y_test_undersample = train_test_split(X_undersample
                                                                                                   ,y_undersample
                                                                                                   ,test_size = 0.3
                                                                                                   ,random_state = 42)

接着建立随机森林模型

# 用原始数据训练模型
rfc1 = RandomForestClassifier(n_estimators=100)
rfc1.fit(X_train,y_train)
y_pred = rfc1.predict(X_test)
print('模型准确率',accuracy_score(y_test,y_pred))
print(confusion_matrix(y_test,y_pred))
print(classification_report(y_test,y_pred))


首先这是原始数据,也就是没有经过欠采样的数据来进行建立模型的。模型准确率为99.9%,准确率很高,但是不要被这表面迷惑了,因为从分类报告中我们看出,有与0类别的样本数量很大,所有0类别的准确率和召回率都是100%,而1类别的准确率就降下来了,尤其是召回率,只有74%。接下来用我们欠采样后的数据进行建模看看。

# 用欠采样数据训练模型
rfc2 = RandomForestClassifier(n_estimators=100)
rfc2.fit(X_train_undersample,y_train_undersample)
y_pred = rfc2.predict(X_test_undersample)
print('模型准确率',accuracy_score(y_test_undersample,y_pred))
print(confusion_matrix(y_test_undersample,y_pred))
print(classification_report(y_test_undersample,y_pred))

从模型结果我们看出模型的准确率为95%,也还是很高的,而且从分类报告中,两个类别的准确率和召回率都很高,模型的适用性更强。


总结

在分类问题中,目标分类的种类比例差别过大,就必须要进行处理,要么欠采样,要么过采样,这里我们讲的是欠采样。这样我们训练出来的模型才更有价值,适用性才更高。  


目录
相关文章
|
1月前
|
机器学习/深度学习 数据采集 数据挖掘
实战派教学:掌握Scikit-learn,轻松实现数据分析与机器学习模型优化!
【10月更文挑战第4天】Scikit-learn凭借高效、易用及全面性成为数据科学领域的首选工具,简化了数据预处理、模型训练与评估流程,并提供丰富算法库。本文通过实战教学,详细介绍Scikit-learn的基础入门、数据预处理、模型选择与训练、评估及调优等关键步骤,助你快速掌握并优化数据分析与机器学习模型。从环境搭建到参数调优,每一步都配有示例代码,便于理解和实践。
83 2
|
3月前
|
数据采集 存储 数据挖掘
【优秀python数据分析案例】基于Python书旗网小说网站数据采集与分析的设计与实现
本文介绍了一个基于Python的书旗网小说网站数据采集与分析系统,通过自动化爬虫收集小说数据,利用Pandas进行数据处理,并通过Matplotlib和Seaborn等库进行数据可视化,旨在揭示用户喜好和市场趋势,为图书出版行业提供决策支持。
312 6
【优秀python数据分析案例】基于Python书旗网小说网站数据采集与分析的设计与实现
|
3月前
|
数据采集 数据可视化 关系型数据库
【优秀python 数据分析案例】基于python的穷游网酒店数据采集与可视化分析的设计与实现
本文介绍了一个基于Python的穷游网酒店数据采集与可视化分析系统,通过爬虫技术自动抓取酒店信息,并利用数据分析算法和可视化工具,提供了全国主要城市酒店的数量、星级、价格、评分等多维度的深入洞察,旨在为旅行者和酒店经营者提供决策支持。
103 4
【优秀python 数据分析案例】基于python的穷游网酒店数据采集与可视化分析的设计与实现
|
3月前
|
JSON 数据挖掘 API
案例 | 用pdpipe搭建pandas数据分析流水线
案例 | 用pdpipe搭建pandas数据分析流水线
|
3月前
|
数据采集 机器学习/深度学习 算法
"揭秘数据质量自动化的秘密武器:机器学习模型如何精准捕捉数据中的‘隐形陷阱’,让你的数据分析无懈可击?"
【8月更文挑战第20天】随着大数据成为核心资源,数据质量直接影响机器学习模型的准确性和效果。传统的人工审查方法效率低且易错。本文介绍如何运用机器学习自动化评估数据质量,解决缺失值、异常值等问题,提升模型训练效率和预测准确性。通过Python和scikit-learn示例展示了异常值检测的过程,最后强调在自动化评估的同时结合人工审查的重要性。
91 2
|
3月前
|
机器学习/深度学习 数据采集 数据可视化
【python】python母婴数据分析模型预测可视化(数据集+论文+PPT+源码)【独一无二】
【python】python母婴数据分析模型预测可视化(数据集+论文+PPT+源码)【独一无二】
|
3月前
|
机器学习/深度学习 搜索推荐 数据挖掘
【深度解析】超越RMSE和MSE:揭秘更多机器学习模型性能指标,助你成为数据分析高手!
【8月更文挑战第17天】本文探讨机器学习模型评估中的关键性能指标。从均方误差(MSE)和均方根误差(RMSE)入手,这两种指标对较大预测偏差敏感,适用于回归任务。通过示例代码展示如何计算这些指标及其它如平均绝对误差(MAE)和决定系数(R²)。此外,文章还介绍了分类任务中的准确率、精确率、召回率和F1分数,并通过实例说明这些指标的计算方法。最后,强调根据应用场景选择合适的性能指标的重要性。
434 0
|
3月前
|
数据采集 数据可视化 数据挖掘
数据分析大神养成记:Python+Pandas+Matplotlib助你飞跃!
在数字化时代,数据分析至关重要,而Python凭借其强大的数据处理能力和丰富的库支持,已成为该领域的首选工具。Python作为基石,提供简洁语法和全面功能,适用于从数据预处理到高级分析的各种任务。Pandas库则像是神兵利器,其DataFrame结构让表格型数据的处理变得简单高效,支持数据的增删改查及复杂变换。配合Matplotlib这一数据可视化的魔法棒,能以直观图表展现数据分析结果。掌握这三大神器,你也能成为数据分析领域的高手!
77 2
|
3月前
|
机器学习/深度学习 数据采集 数据可视化
基于爬虫和机器学习的招聘数据分析与可视化系统,python django框架,前端bootstrap,机器学习有八种带有可视化大屏和后台
本文介绍了一个基于Python Django框架和Bootstrap前端技术,集成了机器学习算法和数据可视化的招聘数据分析与可视化系统,该系统通过爬虫技术获取职位信息,并使用多种机器学习模型进行薪资预测、职位匹配和趋势分析,提供了一个直观的可视化大屏和后台管理系统,以优化招聘策略并提升决策质量。
176 4
|
3月前
|
机器学习/深度学习 算法 数据挖掘
2023 年第二届钉钉杯大学生大数据挑战赛初赛 初赛 A:智能手机用户监测数据分析 问题二分类与回归问题Python代码分析
本文介绍了2023年第二届钉钉杯大学生大数据挑战赛初赛A题的Python代码分析,涉及智能手机用户监测数据分析中的聚类分析和APP使用情况的分类与回归问题。
84 0
2023 年第二届钉钉杯大学生大数据挑战赛初赛 初赛 A:智能手机用户监测数据分析 问题二分类与回归问题Python代码分析