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

news2024/11/16 6:43:39

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

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

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

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

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.coloradmin.cn/o/1418498.html

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

相关文章

如何实现无公网ip远程SSH连接家中本地的树莓派

文章目录 如何通过 SSH 连接到树莓派步骤1. 在 Raspberry Pi 上启用 SSH步骤2. 查找树莓派的 IP 地址步骤3. SSH 到你的树莓派步骤 4. 在任何地点访问家中的树莓派4.1 安装 Cpolar4.2 cpolar进行token认证4.3 配置cpolar服务开机自启动4.4 查看映射到公网的隧道地址4.5 ssh公网…

【前端】快速掌握CSS-flex布局

文章目录 一、标准流二、浮动1. 基本使用2. 产品区域布局(1) HTML标签(2) CSS样式 3. 清除浮动(1) 场景搭建(2) 额外标签法(3) 单伪元素法(4) 双伪元素法(5) overflow法 三、Flex布局1. Flex组成2. 主轴对齐方式3. 侧轴对齐方式4. 修改主轴方向5. 弹性伸缩比6. 弹性盒子换行7. …

手机壳也能散热了?

作为一个玩了6年的王者荣耀玩家,手机发热真的很影响游戏体验!!游戏掉帧,性能下降很恼人,试过好几个散热工具,实际效果都不太好~ 自从入了Mate 60之后,看着这款微泵液冷壳毫无犹豫第…

day35WEB 攻防-通用漏洞XSS 跨站反射存储DOMBeef-XSS

目录 一,XSS 跨站-原理&分类&手法&探针 1、原理 2、分类 3、危害 二,反射型XSS 1,案例演示 三,存储型XSS 1,案例演示 四,DOM 型XSS 五,XSS 利用环境-XSS 平台&Beef-XS…

如何使用Docker部署火狐浏览器并实现无公网ip远程访问

文章目录 1. 部署Firefox2. 本地访问Firefox3. Linux安装Cpolar4. 配置Firefox公网地址5. 远程访问Firefox6. 固定Firefox公网地址7. 固定地址访问Firefox Firefox是一款免费开源的网页浏览器,由Mozilla基金会开发和维护。它是第一个成功挑战微软Internet Explorer浏…

【Linux】动态库和静态库——动态库和静态库的打包和使用、gcc编译、拷贝到系统默认的路径、建立软连接

文章目录 动态库和静态库1.静态库和动态库的介绍2.静态库的打包和使用2.1生成静态库2.2使用静态库的三种方式2.2.1gcc编译2.2.2拷贝到系统默认的路径2.2.3建立软连接 3.动态库的打包和使用3.1生成动态库3.2使用动态库3.3解决加载不到动态库的方法 动态库和静态库 1.静态库和动…

“坦克大战”项目设计文档

「坦克大战」项目的设计文档 功能设计 游戏部分 ​ 在存在 障碍物 的地图上,玩家需要操作一辆绿色的坦克与敌对的灰色坦克作战。 坦克 以及其发射的 炮弹 均会被障碍物所阻挡。玩家用键盘上的 wasd按键 控制坦克移动,用 鼠标 控制炮弹发射方向&#x…

删除倒数第N个结点---链表Oj

https://leetcode.cn/problems/remove-nth-node-from-end-of-list/description/?envType=study-plan-v2&envId=top-100-liked 1、常规解法 删除倒数第N个结点,那就是删除整数第(len - N + 1)个结点,我们只需要找到第len-N个结点,让它的next指向倒数第N个结点…

赛氪荣获“2023天津高新技术企业大会支持单位”

1月23日上午,2023天津市高新技术企业大会新闻发布会在天开高教科技园核心区综合服务中心召开,市高企协以及来自高校、企业、社会组织等80余人现场参会。 大会组委会秘书长张博航介绍到:“本次大会将实现自开办以来的多个首次,首次…

【刷题】 leetcode 面试题 08.05.递归乘法

递归乘法 1 题目描述2 思路一(返璞归真版)3 思路二(二进制乘法器版)4 思路三(变态版)Thanks♪(・ω・)ノ谢谢阅读下一篇文章见!!! 1 题目…

CTF CRYPTO 密码学-7

题目名称:敲击 题目描述: 让我们回到最开始的地方 0110011001101100011000010110011101111011011000110110010100110011011001010011010100110000001100100110001100101101001101000011100001100011001110010010110100110100011001000011010100110000…

2024年第04周农产品价格报告

一、摘要 农产品价格监测主要涉及对畜禽类产品、水产品、蔬菜类产品、水果类产品的价格,以周为单位,进行变化情况的数据监测。其中,蔬菜类产品共18种,分别为大白菜、西红柿、黄瓜、青椒、芹菜、土豆、白萝卜、茄子、豆角、胡萝卜…

论文精读--BERT

不像视觉领域,在Bert出现之前的nlp领域还没有一个深的网络,使得能在大数据集上训练一个深的神经网络,并应用到很多nlp的任务上 Abstract We introduce a new language representation model called BERT, which stands for Bidirectional En…

IDEA中git的使用和代码对比神器Beyond Compare

和多同学idea配置好了,但是使用却不知道怎么使用。 我这里说说idea中使用的几招常用操作。如:提交,拉取,推送,合并,取消合并,撤回本地提交。 以及一些刚接触idea使用git的怕把公司代码搞砸了的同…

遗传算法改进leach协议(附MATLAB代码)

LEACH(低能量自适应聚簇层次)协议是无线传感器网络中最早的、最具有影响力的分簇协议之一。它通过随机选举一些传感器节点作为簇头,其他节点加入其中一个簇头组成一个簇,然后簇头负责汇聚数据并将数据发送给基站,从而达…

UE4运用C++和框架开发坦克大战教程笔记(十五)(第46~48集)

UE4运用C和框架开发坦克大战教程笔记(十五)(第46~48集) 46. 批量加载 UClass 功能测试批量加载多个同类 UClass 资源 47. 创建单个资源对象测试加载并创建单个 UClass 资源对象 48. 创建同类资源对象 46. 批量加载 UClass 功能 逻…

【HTML 基础】元素和标签

文章目录 1. <p> - 段落标签2. <h1> - <h6> - 标题标签3. <a> - 超链接标签4. <img> - 图片标签5. <ul>, <ol>, <li> - 列表标签无序列表有序列表 总结 HTML&#xff08;Hypertext Markup Language&#xff09;是构建 Web 页面…

Prometheus 监控系统的初步了解与系统搭建

目录 目录 目录 前言 Prometheus的相关知识 Prometheus特点 Prometheus的存储引擎&#xff1a;TSDB Prometheus的组件 1.核心组件&#xff1a;prometheus server Prometheus server又分为三个部分&#xff1a; 2.exports 3.client Library 4.cadvisor 5.blackbox-ex…

二维数组的学习

前言 在前面我们学习了一维数组&#xff0c;但是有的问题需要用二位数组来解决。 二维数组常称为矩阵&#xff0c;把二维数组写成行和列的排列形式&#xff0c;可以有助于形象化的理解二维数组的逻辑结构。 一、二维数组的定义 二维数组定义的一般格式&#xff1a; 数据类型 数…

【前端web入门第二天】03 表单-下拉菜单 文本域 label标签 按钮 【附注册信息综合案例】

文章目录: 1. 下拉菜单 2. 文本域3.label标签 4.按钮- button 4.1 reset重置按钮结合form表单区域使用 5.无语义的布局标签 6.字符实体 注册信息综合案例 表单第二节 1. 下拉菜单 标签: select嵌套option,select是下拉菜单整体&#xff0c;option是下拉菜单的每一项。 代码…