(四)PySpark3:Mlib机器学习实战-信用卡交易数据异常检测

本文主要是介绍(四)PySpark3:Mlib机器学习实战-信用卡交易数据异常检测,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

一、Spark Mlib

二、案例背景以及数据集

三、代码

四、总结


PySpark系列文章:

(一)PySpark3:安装教程及RDD编程

(二)PySpark3:SparkSQL编程

(三)PySpark3:SparkSQL40题

(四)PySpark3:Mlib机器学习实战-信用卡交易数据异常检测

一、Spark Mlib

本节内容根据我的另一篇文章:信用卡交易数据异常检测,将pandas+sklearn换成pyspark分布式场景。当训练数据量较大时,通过多台机器分布式计算可以极大程度上减少程序的运行时间。

Spark Mlib,即Spark的机器学习库,是Apache Spark的一个核心组件,专为大规模数据处理和机器学习算法而设计。它提供了丰富的机器学习算法和工具,使数据科学家和开发人员能够轻松地在分布式环境中构建和训练机器学习模型。

PySpark Mlib提供了丰富的机器学习算法:

1、分类算法:包括逻辑回归、支持向量机(SVM)、决策树、随机森林等,用于对数据进行分类预测。

2、回归算法:如线性回归、岭回归、套索回归等,用于预测数值型目标变量的值。

3、聚类算法:如K-均值、谱聚类等,用于将数据集中的对象按照相似性进行分组。

4、协同过滤算法:用于推荐系统中,根据用户的历史行为和偏好进行个性化推荐。

二、案例背景以及数据集

信用卡欺诈是指以非法占有为目的,故意使用伪造、作废的信用卡,冒用他人的信用卡骗取财物,或用本人信用卡进行恶意透支的行为。

数据集“creditcard.csv”中的数据来自2013年9月由欧洲持卡人通过信用卡进行的交易。共284807行交易记录,其中数据文件中Class==1表示该条记录是欺诈行为,总共有 492 笔。输入数据中存在 28 个特征 V1,V2,……V28(通过PCA变换得到,不用知道其具体含义),以及交易时间 Time 和交易金额 Amount。

百度云链接:https://pan.baidu.com/s/1_GLiEEqIZqXVG7M1lcnewg
提取码:abcd

目标:构建一个信用卡欺诈分析的分类器。通过以往的交易数据分析出每笔交易是否正常,是否存在盗刷风险。

三、代码

1、初始化SparkSession

from pyspark.sql import SparkSession  
from pyspark.ml.feature import VectorAssembler  
from pyspark.ml.classification import LogisticRegression, DecisionTreeClassifier, RandomForestClassifier  
from pyspark.ml.evaluation import BinaryClassificationEvaluator  #初始化SparkSession  
spark = SparkSession.builder.appName("CreditCardFraudDetection").getOrCreate()  

2、读取数据

# 读取数据  
data = spark.read.csv("creditcard.csv", header=True, inferSchema=True)  
data = data.drop('Time', 'Amount').withColumnRenamed("Class","label")

3、分离特征与标签

# 组装特征向量  
vectorAssembler = VectorAssembler(inputCols=data.columns[:-1], outputCol="features")  
data_with_vector = vectorAssembler.transform(data)  # 分离标签和特征  
label_column = "label"  
features_column = "features"  
data_with_vector = data_with_vector.select(features_column, label_column)  

4、下采样

# 划分训练集和测试集  
(train_data, test_data) = data_with_vector.randomSplit([0.7, 0.3], seed=0)  # 计算少数类和多数类的数量  
fraud_count = train_data.filter(train_data[label_column] == 1).count()  
normal_count = train_data.filter(train_data[label_column] == 0).count()  # 下采样多数类以匹配少数类数量  
downsampled_normal = train_data.filter(train_data[label_column] == 0).sample(False, fraud_count / normal_count)  # 合并下采样后的多数类样本和原始的少数类样本  
balanced_train_data = downsampled_normal.union(train_data.filter(train_data[label_column] == 1))  

5、使用逻辑回归模型预测

# 训练逻辑回归模型  
lr = LogisticRegression(labelCol=label_column)  
lr_model = lr.fit(balanced_train_data)  
lr_predictions = lr_model.transform(test_data)  
evaluator = BinaryClassificationEvaluator(rawPredictionCol="rawPrediction")
print('逻辑回归AUC分数:', evaluator.evaluate(lr_predictions))

6、使用决策树模型预测

# 训练决策树模型  
dt = DecisionTreeClassifier(labelCol=label_column)  
dt_model = dt.fit(balanced_train_data)  
dt_predictions = dt_model.transform(test_data)   
print('决策树AUC分数:', evaluator.evaluate(dt_predictions))

7、使用随机森林模型预测

# 训练随机森林模型  
rf = RandomForestClassifier(labelCol=label_column)  
rf_model = rf.fit(balanced_train_data)  
rf_predictions = rf_model.transform(test_data)  
print('随机森林AUC分数:', evaluator.evaluate(rf_predictions))

8、停止SparkSession  

spark.stop()

9、预测结果对比

逻辑回归AUC分数: 0.9646182832801895
决策树AUC分数: 0.938546748747307
随机森林AUC分数: 0.9858752161973708

四、总结

Spark Mlib实现了在分布式大数据环境下的机器学习训练,并且可以通过Spark SQL对数据集进行数据预处理以及特征工程,可以高效处理大规模数据集。但是Spark Mlib目前支持的算法还比较少,支持的机器学习算法有限,而且并不直接支持深度学习算法。所以,选择Spark进行机器学习训练与预测,可能更多考量的是成本与时间优势,但是对于复杂建模场景或者对模型精度要求较高的场景,Spark将难以胜任。

这篇关于(四)PySpark3:Mlib机器学习实战-信用卡交易数据异常检测的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/818438

相关文章

网页解析 lxml 库--实战

lxml库使用流程 lxml 是 Python 的第三方解析库,完全使用 Python 语言编写,它对 XPath表达式提供了良好的支 持,因此能够了高效地解析 HTML/XML 文档。本节讲解如何通过 lxml 库解析 HTML 文档。 pip install lxml lxm| 库提供了一个 etree 模块,该模块专门用来解析 HTML/XML 文档,下面来介绍一下 lxml 库

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

大模型研发全揭秘:客服工单数据标注的完整攻略

在人工智能(AI)领域,数据标注是模型训练过程中至关重要的一步。无论你是新手还是有经验的从业者,掌握数据标注的技术细节和常见问题的解决方案都能为你的AI项目增添不少价值。在电信运营商的客服系统中,工单数据是客户问题和解决方案的重要记录。通过对这些工单数据进行有效标注,不仅能够帮助提升客服自动化系统的智能化水平,还能优化客户服务流程,提高客户满意度。本文将详细介绍如何在电信运营商客服工单的背景下进行

基于MySQL Binlog的Elasticsearch数据同步实践

一、为什么要做 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品、订单等数据的多维度检索。 使用 Elasticsearch 存储业务数据可以很好的解决我们业务中的搜索需求。而数据进行异构存储后,随之而来的就是数据同步的问题。 二、现有方法及问题 对于数据同步,我们目前的解决方案是建立数据中间表。把需要检索的业务数据,统一放到一张M

关于数据埋点,你需要了解这些基本知识

产品汪每天都在和数据打交道,你知道数据来自哪里吗? 移动app端内的用户行为数据大多来自埋点,了解一些埋点知识,能和数据分析师、技术侃大山,参与到前期的数据采集,更重要是让最终的埋点数据能为我所用,否则可怜巴巴等上几个月是常有的事。   埋点类型 根据埋点方式,可以区分为: 手动埋点半自动埋点全自动埋点 秉承“任何事物都有两面性”的道理:自动程度高的,能解决通用统计,便于统一化管理,但个性化定

无人叉车3d激光slam多房间建图定位异常处理方案-墙体画线地图切分方案

墙体画线地图切分方案 针对问题:墙体两侧特征混淆误匹配,导致建图和定位偏差,表现为过门跳变、外月台走歪等 ·解决思路:预期的根治方案IGICP需要较长时间完成上线,先使用切分地图的工程化方案,即墙体两侧切分为不同地图,在某一侧只使用该侧地图进行定位 方案思路 切分原理:切分地图基于关键帧位置,而非点云。 理论基础:光照是直线的,一帧点云必定只能照射到墙的一侧,无法同时照到两侧实践考虑:关

使用SecondaryNameNode恢复NameNode的数据

1)需求: NameNode进程挂了并且存储的数据也丢失了,如何恢复NameNode 此种方式恢复的数据可能存在小部分数据的丢失。 2)故障模拟 (1)kill -9 NameNode进程 [lytfly@hadoop102 current]$ kill -9 19886 (2)删除NameNode存储的数据(/opt/module/hadoop-3.1.4/data/tmp/dfs/na

异构存储(冷热数据分离)

异构存储主要解决不同的数据,存储在不同类型的硬盘中,达到最佳性能的问题。 异构存储Shell操作 (1)查看当前有哪些存储策略可以用 [lytfly@hadoop102 hadoop-3.1.4]$ hdfs storagepolicies -listPolicies (2)为指定路径(数据存储目录)设置指定的存储策略 hdfs storagepolicies -setStoragePo

Hadoop集群数据均衡之磁盘间数据均衡

生产环境,由于硬盘空间不足,往往需要增加一块硬盘。刚加载的硬盘没有数据时,可以执行磁盘数据均衡命令。(Hadoop3.x新特性) plan后面带的节点的名字必须是已经存在的,并且是需要均衡的节点。 如果节点不存在,会报如下错误: 如果节点只有一个硬盘的话,不会创建均衡计划: (1)生成均衡计划 hdfs diskbalancer -plan hadoop102 (2)执行均衡计划 hd