使用机器学习算法检测交易中的异常行为

交易中的异常检测意味着识别交易或相关活动中的异常或意外模式。这些模式被称为异常或异常值,明显偏离预期规范,可能表明存在不规则或欺诈行为。

异常检测在各种业务中发挥着至关重要的作用,尤其是那些涉及金融交易、在线活动和安全敏感操作的业务。

我们可以遵循系统化的流程来应对异常检测的挑战。我们可以从收集和准备交易数据开始,确保其准确性和一致性。然后,我们可以在数据中寻找特定的模式来发现异常,并使用专门的异常检测算法(例如孤立森林)来检测异常。

首先,还是引入相关包和加载数据集。

import pandas as pdimport plotly.express as pxfrom sklearn.model_selection import train_test_splitfrom sklearn.ensemble import IsolationForestfrom sklearn.metrics import classification_report
data = pd.read_csv("../data/transaction_anomalies_dataset.csv")data.head()

图片

现在,看一下数据中是否有空值,null:

data.isnull().sum()

图片

继续下一步之前,还需要看一下每个列的基本信息:

data.info()

图片

以及每个列的基本统计数据:

data.describe()

图片

现在我们看一下数据中交易金额的分布:

fig_amount = px.histogram(data, x='Transaction_Amount',                           nbins=20,                          title='Distribution of Transaction Amount')fig_amount.show()

图片

现在我们看一下不同账户类型的交易金额分布:‍

fig_box_amount = px.box(data,                        x='Account_Type',                        y='Transaction_Amount',                        title='Transaction Amount by Account Type')fig_box_amount.show()

图片

现在让我们看看按年龄划分的平均交易金额:​​​​​​​

fig_scatter_avg_amount_age = px.scatter(data, x='Age',                                        y='Average_Transaction_Amount',                                        color='Account_Type',                                        title='Average Transaction Amount vs. Age',                                        trendline='ols')fig_scatter_avg_amount_age.show()

图片

按年龄划分的平均交易金额没有差异。现在让我们看一下一周中各天的交易数量:​​​​​​​

fig_day_of_week = px.bar(data, x='Day_of_Week',                         title='Count of Transactions by Day of the Week')fig_day_of_week.show()

图片

现在让我们看一下数据中一些交易相关的列之间的相关性:​​​​​​​

correlation_matrix = data[['Transaction_Amount',                           'Transaction_Volume',                           'Average_Transaction_Amount',                          'Frequency_of_Transactions',                          'Time_Since_Last_Transaction',                          'Age',                          'Income']].corr()fig_corr_heatmap = px.imshow(correlation_matrix,                             title='Correlation Heatmap')fig_corr_heatmap.show()

图片

现在我们可以通过以下方式可视化数据中的异常情况:​​​​​​​

# Calculate mean and standard deviation of Transaction Amountmean_amount = data['Transaction_Amount'].mean()std_amount = data['Transaction_Amount'].std()
# Define the anomaly threshold (2 standard deviations from the mean)anomaly_threshold = mean_amount + 2 * std_amount
# Flag anomaliesdata['Is_Anomaly'] = data['Transaction_Amount'] > anomaly_threshold
# Scatter plot of Transaction Amount with anomalies highlightedfig_anomalies = px.scatter(data, x='Transaction_Amount', y='Average_Transaction_Amount',                           color='Is_Anomaly', title='Anomalies in Transaction Amount')fig_anomalies.update_traces(marker=dict(size=12),                             selector=dict(mode='markers', marker_size=1))fig_anomalies.show()

图片

现在,我们可以计算数据中的异常数量,从而找出数据中异常的比例,这在使用孤立森林等异常检测算法时非常有用:​​​​​​​

num_anomalies = data['Is_Anomaly'].sum()
# Calculate the total number of instances in the datasettotal_instances = data.shape[0]
# Calculate the ratio of anomaliesanomaly_ratio = num_anomalies / total_instancesprint(anomaly_ratio) # should be 0.2

现在我们可以训练机器学习模型来检测异常:​​​​​​​

relevant_features = ['Transaction_Amount',                     'Average_Transaction_Amount',                     'Frequency_of_Transactions']
# Split data into features (X) and target variable (y)X = data[relevant_features]y = data['Is_Anomaly']
# Split data into train and test setsX_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# Train the Isolation Forest modelmodel = IsolationForest(contamination=0.02, random_state=42)model.fit(X_train)

在这里,我们使用孤立森林算法训练异常检测模型。

首先,我们选择相关特征进行检测,即Transaction_Amount、Average_Transaction_Amount和Frequency_of_Transactions。

我们将数据集分为特征 (X) 和目标变量 (y),其中 X 包含选定的特征,y 包含指示实例是否异常的二进制标签。然后,我们使用 80-20 的分割比率将数据进一步分割为训练集和测试集。接下来,我们创建了一个孤立森林模型,其指定的污染参数为 0.02(表示预期的异常比率)和用于再现性的随机种子。然后在训练集 (X_train) 上训练模型。

现在我们来看看这个异常检测模型的性能:​​​​​​​

# Predict anomalies on the test sety_pred = model.predict(X_test)
# Convert predictions to binary values (0: normal, 1: anomaly)y_pred_binary = [1 if pred == -1 else 0 for pred in y_pred]
# Evaluate the model's performancereport = classification_report(y_test, y_pred_binary, target_names=['Normal', 'Anomaly'])print(report)

图片

最后,我们使用经过训练的模型来检测异常:​​​​​​​

# Relevant features used during trainingrelevant_features = ['Transaction_Amount', 'Average_Transaction_Amount', 'Frequency_of_Transactions']
# Get user inputs for featuresuser_inputs = []for feature in relevant_features:    user_input = float(input(f"Enter the value for '{feature}': "))    user_inputs.append(user_input)
# Create a DataFrame from user inputsuser_df = pd.DataFrame([user_inputs], columns=relevant_features)
# Predict anomalies using the modeluser_anomaly_pred = model.predict(user_df)
# Convert the prediction to binary value (0: normal, 1: anomaly)user_anomaly_pred_binary = 1 if user_anomaly_pred == -1 else 0
if user_anomaly_pred_binary == 1:    print("Anomaly detected: This transaction is flagged as an anomaly.")else:    print("No anomaly detected: This transaction is normal.")

数据集和代码位于:

https://github.com/realyinchen/MachineLearning

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/354613.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

IMX6ULL驱动学习——通过总线设备驱动模型点亮野火开发板小灯【参考韦东山老师教程】

参考:【IMX6ULL驱动开发学习】11.驱动设计之面向对象_分层思想(学习设备树过渡部分)-CSDN博客 韦东山课程:LED模板驱动程序的改造_总线设备驱动模型 我使用的开发板:野火imx6ull pro 欢迎大家一起讨论学习 实现了总线设…

ChatGPT与文心一言:智能回复与语言准确性的较量

在当今数字化时代,随着人们对智能化技术的需求不断增长,智能回复工具也成为了日常生活中不可或缺的一部分。ChatGPT和文心一言作为两个备受瞩目的智能回复工具,在智能回复、语言准确性以及知识库丰富度等方面各有卓越之处。 本文将对这两者进…

JAVA编程语言单词汇总

Java 是由 Sun Microsystems 公司于 1995 年 5 月推出的 Java 面向对象程序设计语言和 Java 平台的总称。由 James Gosling和同事们共同研发,并在 1995 年正式推出。后来 Sun 公司被 Oracle (甲骨文)公司收购,Java 也随之成为 Ora…

算法每日一题: 边权重均等查询 | 公共子祖先

大家好,我是星恒,今天给大家带来的是一道图里面有关公共子祖先的题目,理解起来简单,大家 题目:leetcode 2846 现有一棵由 n 个节点组成的无向树,节点按从 0 到 n - 1 编号。给你一个整数 n 和一个长度为 n …

【Linux C | 网络编程】详细介绍 “三次握手(建立连接)、四次挥手(终止连接)、TCP状态”

😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀 🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C、数据结构、音视频🍭 🤣本文内容🤣&a…

强化合作!浪潮信息携手业界伙伴筑牢算力底座

以太平金融科技服务(上海)有限公司(以下简称“太平金科”)为例,在算力新型基础设施建设方面,该公司一直不遗余力。近日,该公司更携手全球领先的IT基础设施供应商浪潮信息,优化算力基…

静态代理IP该如何助力Facebook多账号注册运营?

在Facebook运营中,充分利用静态代理IP是多账号运营的关键一环。通过合理运用静态代理IP,不仅可以提高账号安全性,还能有效应对Facebook的算法和限制。以下是这些关键点,可以帮助你了解如何运用静态代理IP进行Facebook多账号运营&a…

如何通俗解释Docker是什么?

要想弄懂Docker,咱们得先从“容器化”讲起。 一、容器化技术及Docker的出现 容器化,它是一种轻量级、可移植的软件打包方式,你就想象成一个快递箱子,里面装着你的应用和所有需要运行的环境,这个箱子能在任何支持容器…

PDF标准详解(一)——PDF文档结构

已经很久没有写博客记录自己学到的一些东西了。但是在过去一年的时间中自己确实又学到了一些东西。一直攒着没有系统化成一篇篇的文章,所以今年的博客打算也是以去年学到的一系列内容为主。通过之前Vim系列教程的启发,我发现还是写一些系列文章对自己的帮…

go学习之air库的使用

首先下载air库 go install github.com/cosmtrek/air之后你需要去找到库下载的地方,若使用的是go mod可以使用命令 go env GOPATH找到下载库的位置 进入后,有bin,pkg目录,进入bin目录,你能看到air.exe文件 这时候将此…

NSSCTF Round#17 RE snake WP

控制流劫持可以非常快,当时困在中间的循环里了,其实一直跳到最后就行…… 运行一下发现是个贪吃蛇 联系到朝雾老师教的打飞机hit-plane那一题,应该通过控制流劫持直接跳转到打印flag的地方 第一个cmp分支处,判断轮数&#xff0c…

dataGrip连接数据库mysql和intersystems的iris

文章目录 前言创建新项目选择对应的数据库产品类型新建数据库资源连接sql命令窗体手动配置本地驱动 前言 intersystems公司的产品iris是cache的升级版本,目前绝大多数数据库工具都没法连接这个数据库 datagrip下载地址 https://download-cdn.jetbrains.com.cn/da…

vue3前端开发,如何引入element-plus前端框架及配置参数

vue3前端开发,如何引入element-plus前端框架及配置参数!这是一个简单的教程,帮助大家快速在自己的项目中引入element-plus框架。 主要是介绍的引入流程和参数的配置情况。 如图,这个就是elment-plus前端框架里面的一个主按钮展示。表示我们配…

Tonka Finance 测试网活动,开启新铭文时代财富之门

Tonka Finance 是铭文赛道首个借贷市场,通过搭建一套铭文资产借贷质押方案,为铭文资产以借贷的形式释放价值、捕获流动性等方面提供了基础。作为铭文赛道最重要的基建设施之一,Tonka Finance 在面向市场后备受关注,并迅速作为铭文…

206. 反转链表(力扣LeetCode)

文章目录 206. 反转链表题目描述双指针递归 206. 反转链表 题目描述 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。 示例 1: 输入:head [1,2,3,4,5] 输出:[5,4,3,2,1] 示例 2: 输入&am…

GUN/Linux时间同步服务之chrony配置管理

风险告知 本人及本篇博文不为任何人及任何行为的任何风险承担责任,图解仅供参考,请悉知!相关配置操作是在一个全新的演示环境下进行的,演示环境中没有任何有价值的数据,但这并不代表摆在你面前的环境也是如此。生产环境…

嵌入式——直接存储器存取(DMA)补充

目录 一、认识 DMA 二、DMA结构 1. DMA请求 2. 通道DMA 补:通道配置过程。 3. 仲裁器 三、DMA数据配置 1. 从哪里来,到哪里去 (1)从外设到存储器 (2)从存储器到外设 (3)从…

【Python基础017】Python中如何进行异常判断(try...except...的使用)

1、异常判断 在python程序在运行的过程中可能会出现很多错误,比如语法、未定义变量、分母为0等错误;而我们通常使用try...except...语句来处理程序在运行中出现的这些异常,并显示出现错误的原因。此外,我们还可以用try...finally.…

全角色服务、全场景支撑、全业务应用的新一代智慧教室

新一代智慧教室以“数智化助力高质量人才培养”为核心目标,以AI赋能的智能硬件为基础构建多形态智慧教学环境,以中台为支撑实现数据、设备、系统、业务的互联互通、开放共享,以平台全面覆盖教学应用,采集、汇聚、挖掘、分析课前课…

AP5216 平均电流型LED降压恒流驱动IC 手电筒汽车摩托车灯芯片

产品描述 AP5216 是一款 PWM工作模式, 高效率、外围简单、内置功率管,适用于5V~100V输入的高精度降压 LED 恒流驱动芯片。输出最大功率可达9W,最大电流 1.0A。AP5216 可实现全亮/半亮功能切换,通过MODE 切换:全亮/半亮…