文章目录

  • 数据分析与预处理
    • 数据读取与分析
    • 样本不均衡解决方案
    • 特征标准化

数据分析与预处理

假设有一份信用卡交易记录,遗憾的是数据经过了脱敏处理,只知道其特征,却不知道每一个字段代表什么含义,没关系,就当作是一个个数据特征。在数据中有两种类别,分别是正常交易数据和异常交易数据,字段中有明确的标识符。要做的任务就是建立逻辑回归模型,以对这两类数据进行分类,看起来似乎很容易,但实际应用时会出现各种问题等待解决。

熟悉任务目标后,第一个想法可能是直接把数据传到算法模型中,得到输出结果就好了。

其实并不是这样,在机器学习建模任务中,要做的事情还是很多的,包括数据预处理、特征提取、模型调参等,每一步都会对最终的结果产生影响。

既然如此,就要处理好每一步,其中会涉及机器学习中很多细节,这些都是非常重要的,基本上所有实战任务都会涉及这些问题,所以大家也可以把这份解决方案当作一个套路。

数据已经上传,可自行下载:

数据读取与分析

先把任务所需的工具包导入进来,有了这些武器,处理数据就轻松多了

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
%matplotlib inline

信用卡交易记录数据是一个.csv 文件,里面包含近 30 万条数据,规模很大,首先使用Pandas 工具包读取数据∶

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


如图所示,原始数据为个人交易记录,该数据集总共有 31列,其中数据特征有30 列,Time 列暂时不考虑,Amount 列表示贷款的金额,Class列表示分类结果,若Class为0代表该条交易记录正常,若 Class 为1代表交易异常。

拿到这样一份原始数据之后,直观感觉就是数据已经是处理好的特征,只需要对其进行建模任务即可。但是,上述输出结果只展示了前5条交易记录并且发现全部是正常交易数据,在实际生活中似乎正常交易也占绝大多数,异常交易仅占一少部分,那么,在整个数据集中,样本分布是否均衡呢?也就是说,在Class列中,正常数据和异常数据的比例是多少?绘制一份图表更能清晰说明∶

count_classes = pd.value_counts(data["Class"],sort=True).sort_index()
count_classes.plot(kind="bar")
print(count_classes)


上述代码首先计算出Class列中各个指标的个数,也就是0和1分别有多少个。为了更直观地显示,数据绘制成条形图,从上图中可以发现,似乎只有0没有1(仔细观察,其实是1的比例太少),说明数据中绝大多数是正常数据,异常数据极少。

这个问题看起来有点严峻,数据极度不平衡会对结果造成什么影响呢?模型会不会一边倒呢?认为所有数据都是正常的,完全不管那些异常的,因为异常数据微乎其微,这种情况出现的可能性很大。我们的任务目标就是找到异常数据,如果模型不重视异常数据,结果就没有意义了,所以,首先要做的就是改进不平衡数据。

样本不均衡解决方案

那么,如何解决数据标签不平衡问题呢?首先,造成数据标签不平衡的最根本的原因就是它们的个数相差悬殊,如果能让它们的个数相差不大,或者比例接近,这个问题就解决了。基于此,提出以下两种解决方案。

  • 下采样:既然异常数据比较少,那就让正常样本和异常样本一样少。例如正常样本有30W个,异常样本只有500个,若从正常样本中随机选出500个,它们的比例就均衡了。虽然下采样的方法看似很简单,但是也存在瑕疵,即使原始数据很丰富,下采样过后,只利用了其中一小部分,这样对结果会不会有影响呢?
  • 过采样:不想放弃任何有价值的数据,只能让异常样本和正常样本一样多,怎么做到呢?异常样本若只有500个,此时可以对数据进行变换,假造出来一些异常数据,数据生成也是现阶段常见的一种套路。虽然数据生成解决了异常样本数量的问题,但是异常数据毕竟是造出来的,会不会存在问题呢?

这两种方案各有优缺点,到底哪种方案效果更好呢?需要进行实验比较。

特征标准化

既然已经有了解决方案,是不是应当按照制订的计划准备开始建模任务呢?

千万别心急,还差好多步呢,首先要对数据进行预处理,可能大家觉得机器学习的核心就是对数据建模,其实建模只是其中一部分通常更多的时间和精力都用于数据处理中,例如数据清洗、特征提取等,这些并不是小的细节,而是十分重要的核心内容。

数据特征决定结果的上限,而模型的调优只决定如何接近这个上限

首先我们观察到Amount列的数值变化幅度很大,而V1~V28列的特征数据的数值都比较小,此时 Amount 列的数值相对来说比较大。这会产生什么影响呢?模型对数值是十分敏感的,它不像人类能够理解每一个指标的物理含义,可能会认为数值大的数据相对更重要(此处仅是假设)。但是在数据中,并没有强调 Amount 列更重要,而是应当同等对待它们,因此需要改善一下。

特征标准化就是希望数据经过处理后得到的每一个特征的数值都在较小范围内浮动,公式如下∶

Z=X−Xmeanstd(X)Z = \frac{X - X_mean}{std(X)} Z=std(X)X−Xm​ean​

其中,Z为标准化后的数据;X为原始数据;Xme为原始数据的均值;std(X) 为原始数据的标准差。这只是标准化的一个方法,其他标准化公式还有很多。

如果把上式的过程进行分解,就会更加清晰明了。首先将数据的各个维度减去其各自的均值,这样数据就是以原点为中心对称。 其中数值浮动较大的数据,其标准差也必然更大;数值浮动较小的数据,其标准差也会比较小。再将结果除以各自的标准差,就相当于让大的数据压缩到较小的空间中,让小的数据能够伸张一些,对于图示的二维数据,就得到其标准化之后的结果,以原点为中心,各个维度的取值范围基本一致。

sklearn 工具包提供了几乎所有常用的机器学习算法,仅需一两行代码,即可完成建模工作,计算也比较高效。不仅如此,还提供了非常丰富的数据预处理与特征提取模块,方便大家快速上手处理数据特征。它是Python中非常实用的机器学习建模工具包,在后续的实战任务中,都会出现它的身影。

sklearn 工具包提供了在机器学习中最核心的三大模块(Classification、Regression、Clustering)的实现方法供大家调用,还包括数据降维(Dimensionality reduction)、模型选择(Model selection)、数据预处理(Preprocessing)等模块,功能十分丰富,如图所示。

在初学阶段,大家还可以参考Examples模块,基本上所有算法和函数都配套相应的实例程序供大家参考

# 特征归一化
from sklearn.preprocessing import StandardScaler
# data['normAmout'] = StandardScaler().fit_transform(data['Amount'].values.reshape(-1, 1))
data['normAmount'] = StandardScaler().fit_transform(data['Amount'].values.reshape(-1,1))
# 删除不需要的列
data = data.drop(['Time','Amount'],axis=1)
data.head()


上述代码使用 StandardScaler方法对数据进行标准化处理,调用时需先导入该模块,然后进行fit_ transform操作,相当于执行公式(6.1)。reshape(-1,1)的含义是将传入数据转换成一列的形式(需按照函数输入要求做)。最后用 drop操作去掉无用特征。上述输出结果中的normAmount列就是标准化处理后的结果,可见数值都在较小范围内浮动。

大数据分析实战-信用卡欺诈检测相关推荐

  1. 大数据分析实战-信用卡欺诈检测(五)-逻辑回归模型

    大数据分析实战-信用卡欺诈检测(一) 大数据分析实战-信用卡欺诈检测(二)-下采样方案和交叉验证 大数据分析实战-信用卡欺诈检测(三)- 模型评估 大数据分析实战-信用卡欺诈检测(四)-正则化惩罚 逻 ...

  2. 大数据分析实战-信用卡欺诈检测(四)-正则化惩罚

    大数据分析实战-信用卡欺诈检测(一) 大数据分析实战-信用卡欺诈检测(二)-下采样方案和交叉验证 大数据分析实战-信用卡欺诈检测(三)- 模型评估 文章目录 正则化惩罚 正则化惩罚 正则化惩罚,这个名 ...

  3. 大数据分析实战-信用卡欺诈检测(三)- 模型评估

    大数据分析实战-信用卡欺诈检测(二)-下采样方案和交叉验证 大数据分析实战-信用卡欺诈检测(一) 文章目录 模型评估方法 模型评估方法 接下来,没错,还没到实际建模任务,还需要考虑模型的评估方法,为什 ...

  4. 大数据分析实战-信用卡欺诈检测(二)-下采样方案和交叉验证

    第一部分已经写到这里了,看完第一部分再看这一部分:大数据分析实战-信用卡欺诈检测 文章目录 下采样方案 交叉验证 下采样方案 下采样方案的实现过程比较简单,只需要对正常样本进行采样,得到与异常样本一样 ...

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

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

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

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

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

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

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

    一.任务基础 数据集包含由欧洲人于2013年9月使用信用卡进行交易的数据.此数据集显示两天内发生的交易,其中284807笔交易中有492笔被盗刷.数据集非常不平衡,正例(被盗刷)占所有交易的0.172 ...

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

    一.任务基础 数据集包含由欧洲人于2013年9月使用信用卡进行交易的数据.此数据集显示两天内发生的交易,其中284807笔交易中有492笔被盗刷.数据集非常不平衡,正例(被盗刷)占所有交易的0.172 ...

最新文章

  1. AI一分钟|阿里云解释故障原因:触发了一个未知代码Bug;清华蝉联ISC18超算竞赛总冠军...
  2. RubyGems 镜像
  3. OpenNMS Log Correlator
  4. Python实现基于朴素贝叶斯的垃圾邮件分类 标签: python朴素贝叶斯垃圾邮件分类 2016-04-20 15:09 2750人阅读 评论(1) 收藏 举报 分类: 机器学习(19) 听说
  5. spi master vhd timing
  6. 探索ASP.NET MVC5系列之~~~6.Session篇(进程外Session)
  7. Django中的Form ModelForm
  8. MediaStreamTrackAudioSourceNode
  9. Apache Nutch 1.3 学习笔记十(插件机制分析)
  10. centos6.8 配置mysql赋予mysql远程连接权限
  11. Matlab在线运行网址
  12. 怎么做网站推广-网站推广100种方法
  13. 主流压缩软件压缩率实测(图文详解,揭秘你不知道的)
  14. 沃尔夫冈·阿玛多伊斯·莫扎特
  15. 为什么高水平程序员不喜欢接外包项目
  16. webpack的loader与plugin原理
  17. sqlserver审计 —— 服务器与数据库审核规范
  18. python视频教程全集-Python视频教程全集带你入门
  19. Unity3d UnityEditor编辑器定制和开发插件
  20. 实验输出菱形图案 (5 分)

热门文章

  1. zynq tcp如何从网口发数据_基于TCP/IP协议的电口通信
  2. 光纤中的多种光学模式芯径_光纤光缆的21条基础知识
  3. java中session源码_Spring Session原理及源码分析
  4. oracle两个数据库之间,如何实现oracle两个数据库之间的同步
  5. 邮件服务器两种协议,邮件服务器协议
  6. C语言程序设计教程的读后感,《高质量c语言编程》读后感
  7. 回顾Spirng ioc 控制反转
  8. Linux环境下搭建Tomcat+mysql+jdk
  9. 【项目经验】--EasyUI DataGrid之右键菜单
  10. javascript Array类型 方法大全