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

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

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

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

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SVG 字体 – SVG symbol(16)

简介 symbol 元素用来定义可重用的标记。嵌套在symbol中的形状不会显示,除非其被use元素引用。 例子 <svg width="500" height="100"><symbol id

002-00-01【大红ai源码】如何阅读dolphinscheduler源码------by孤山村头王大爷家女儿大红

【ai阅读源码-dolphinscheduler】 大红&#xff1a;你知道dolphinscheudler 吗大红&#xff1a;如何阅读dolphinscheduler 的源码 大红&#xff1a;你知道dolphinscheudler 吗 通义灵码&#xff1a; 是的&#xff0c;我知道DolphinScheduler。DolphinScheduler&#xff08;海豚…

TensorFlow Lite中文本分类在Android上的实践

#1 Tensorflow Lite TensorFlow Lite(后续简称TFL) 是 Google 开发的一个用于移动设备和嵌入式设备的开源库,旨在为移动终端设备提供机器学习推断。它是 TensorFlow 框架的轻量级版本,专门优化了模型的大小和性能,以适应资源受限的移动设备和嵌入式系统。 TFL 提供了一种在移…

go包与依赖管理

包&#xff08;package&#xff09; 包介绍 Go语言中支持模块化的开发理念&#xff0c;在Go语言中使用包&#xff08;package&#xff09;来支持代码模块化和代码复用。一个包是由一个或多个Go源码文件&#xff08;.go结尾的文件&#xff09;组成&#xff0c;是一种高级的代码…

LiveGBS流媒体平台GB/T28181功能-支持配置开启 HTTPS 服务什么时候需要开启HTTPS服务

LiveGBS功能支持配置开启 HTTPS 服务什么时候需要开启HTTPS服务 1、配置开启HTTPS1.1、准备https证书1.1.1、选择Nginx类型证书下载 1.2、配置 LiveCMS 开启 HTTPS1.2.1 web页面配置1.2.2 配置文件配置 2、验证HTTPS服务3、为什么要开启HTTPS3.1、安全性要求3.2、功能需求 4、搭…

【python】使用aiohttp库编写一个简单的异步服务器

1. aiohttp介绍 aiohttp 是一个用于编写异步 HTTP 客户端和服务器的 Python 库。它建立在 Python 的 asyncio 库之上&#xff0c;提供了一种方便的方式来处理异步请求和响应。 官网地址&#xff1a;Welcome to AIOHTTP — aiohttp 3.9.1 documentation 以下是 aiohttp 的一些…

大模型微调报错:RuntimeError: expected scalar type Half but found Float

微调chatglm 报错RuntimeError: expected scalar type Half but found Float 1. 背景 博主显卡&#xff1a;3090 最初的设置&#xff1a;bfloat16 开始训练后&#xff0c;线性层报错 2. 解决: 统一代码中所有精度 1&#xff09;将模型和数据精度都设置为torch.float32/torc…

多维时序 | Matlab实现RIME-TCN-Multihead-Attention霜冰算法优化时间卷积网络结合多头注意力机制多变量时间序列预测

多维时序 | Matlab实现RIME-TCN-Multihead-Attention霜冰算法优化时间卷积网络结合多头注意力机制多变量时间序列预测 目录 多维时序 | Matlab实现RIME-TCN-Multihead-Attention霜冰算法优化时间卷积网络结合多头注意力机制多变量时间序列预测效果一览基本介绍程序设计参考资料…

uniapp 解决键盘弹出页面内容挤压问题

page.json 配置 加 “app-plus”: { “softinputMode”: “adjustResize” } {"path": "pages/jxx/xx","style": {"navigationBarTitleText": "贺卡DIY","enablePullDownRefresh": false,"app-plus": {…

IndexedDB入门

https://www.cnblogs.com/zhangzuwei/p/16574791.html 注意 1.删除表&#xff0c;创建表只能在数据库版本升级里面进行。 2.keyPath: key 要和表字段对应&#xff0c;而且格式要一样&#xff0c;不然不运行不报错。 3.使用 autoIncrement: true 代替 keyPath: key&#xff…

怎么把png格式图片存储到二维码中?图片的二维码生成方法

随着二维码的广泛应用&#xff0c;越来越多的人开始探索如何将不同格式的图片与二维码相结合&#xff0c;以实现更丰富、更有吸引力的信息传递方式。在这个过程中&#xff0c;PNG格式的图片作为一种常见的无损压缩图像格式&#xff0c;被广泛应用于网络、移动应用和数字媒体等领…

Nginx中的关于配置HTTPS模块详解

Nginx中的关于配置HTTPS模块详解 Nginx是一个高性能的Web服务器和反向代理服务器&#xff0c;它支持多种协议&#xff0c;包括HTTP、HTTPS、FTP等。在Nginx中&#xff0c;HTTPS模块提供了对HTTPS的支持&#xff0c;使得网站可以安全地使用HTTPS进行数据传输。本文将详细介绍Ng…

深入解析HTTPS:安全机制全方位剖析

随着互联网的深入发展&#xff0c;网络传输中的数据安全性受到了前所未有的关注。HTTPS&#xff0c;作为HTTP的安全版本&#xff0c;为数据在客户端和服务器之间的传输提供了加密和身份验证&#xff0c;从而确保了数据的机密性、完整性和身份真实性。本文将详细探讨HTTPS背后的…

10.Elasticsearch应用(十)

Elasticsearch应用&#xff08;十&#xff09; 1.为什么需要聚合操作 聚合可以让我们极其方便的实现对数据的统计、分析、运算&#xff0c;例如&#xff1a; 什么品牌的手机最受欢迎&#xff1f;这些手机的平均价格、最高价格、最低价格&#xff1f;这些手机每月的销售情况如…

vue使用富文本

1、安装 cnpm install vue-quill-editor2、在main.js中引入 // 富文本 import VueQuillEditor from vue-quill-editor // require styles 引入样式 import quill/dist/quill.core.css import quill/dist/quill.snow.css import quill/dist/quill.bubble.css Vue.use(VueQuill…

vite项目创建

1.使用命令创建一个vite项目 npm init vuelatest vite.config.js配置 import { fileURLToPath, URL } from "node:url";import { defineConfig, loadEnv } from "vite"; import vue from "vitejs/plugin-vue"; export default defineConfig(({…

STM32轮询模式串口收发不定长字符串

实现STM32轮询模式串口收发不定长字符串 在嵌入式系统开发中&#xff0c;串口通信是一种常见的方式&#xff0c;用于与外部设备或其他微控制器进行数据交换。本文将介绍如何在STM32微控制器上使用轮询模式进行串口收发不定长字符串的操作。 STM32串口通信简介 STM32系列微控…

小红的回文串构造

本题链接&#xff1a;登录—专业IT笔试面试备考平台_牛客网 题目&#xff1a; 样例1&#xff1a; 输入 abba 输出 baab 样例2&#xff1a; 输入 aba 输出 -1 思路&#xff1a; 由题意&#xff0c;题目保证给出的字符串是回文串的&#xff0c;所以我们只需要获取两个不同的…

Spring cloud智慧工地信息平台管理系统源码

目录 报警统计 实时报警列表 工程进度 劳务信息 隐患信息 施工安全管理 人员证书管理 专项安全方案 安全方案审批 隐患排查管理 安全检查统计 危险源Top10 整改超时预警 检查问题数量统计 安全隐患趋势 安全日志管理 视频监控查看 视频回放 AI危险源识别 AI应用总览 AI设备 机械…

MySQL数据库基础合集

MySQL数据库基础合集 目录 MySQL数据库基础合集SQL关键字DDL关键字DML关键字DQL关键字DCL关键字约束关键字 SQL基础数据类型整数类型字符类型浮点类型时间类型 数据定义语言DDL1.查看数据库2.创建库3.删除库4.切换库5.创建表6.删除表7.查看表8.查看表属性9.插入列10.修改列11.设…