金融交易行为监测方法——利用 CNN 模型实现行为识别

news2024/11/28 23:53:13

背景介绍

在证劵交易所领域,曾经发生用户证券账号被盗事件,导致客户资产损失,例如:黑客获得了用户A的证券账号密码,利用多次的低买高卖将资产转移。本文中针对此类对敲欺诈的场景,采用将用户交易数据转换为图片,进而利用 Amazon SageMaker 图像分类算法 ResNet 进行模型训练和推理,在此类欺诈行为识别上得到了很好的效果。这种将交易数据转换为图像分类的方式简化了通常的特征提取的复杂度,可以作为防欺诈或者交易行为特征识别的方式的新的尝试。

亚马逊云科技开发者社区为开发者们提供全球的开发技术资源。这里有技术文档、开发案例、技术专栏、培训视频、活动与竞赛等。帮助中国开发者对接世界最前沿技术,观点,和项目,并将中国优秀开发者或技术推荐给全球云社区。如果你还没有关注/收藏,看到这里请一定不要匆匆划过, 点这里让它成为你的技术宝库!

1. 数据准备

整个数据准备过程包括用户特征分析,样本数据构造,样本数据格式转换几个步骤。

项目包下载 Link

本机安装 python3.9 版本环境。并且提前准备如下几个依赖包的安装

python -m pip install requests
python -m pip install matplotlib
python -m pip install numpy

1.1 数据行为分析

对敲欺诈的交易行为特征比较突出,会出现集中的低买高卖的特点,此类特点也会与老鼠仓行为类似。根据用户的交易行为与股票当日的5分钟 k 线图合并表示如下图:

红色点表示买入,绿色点表示卖出。用户的行为呈现为多次的连续低卖高卖。

1.2 数据集准备

在金融欺诈的场景中,大多数情况下实际发生的欺诈样本是少量的,因此要得到好的模型训练效果,我们需要分析用户行为的特征,在此基础上进行数据的模拟。

1.2.1 获取 K 线

执行K线生成脚本 generateKline.py ,生成某日的K线数据,本案例从 alphavantage 获取美股最新的 Coinbase(股票代码COIN) 80条5分钟k线。免费 APIkey 请自行从alphavantage官网申请。

1.2.2 生成黑客用户交易记录

执行脚本 genRandomHackerTrades.py ,生成模拟黑客交易记录表格。模拟逻辑为:

– 找到 Top 10 的 COIN 的5分钟 k 线数据中超过5%波幅的k线数据。

– 随机选择3-5个5分钟 k 线,生成低价买入的成交价格。生成高价卖出的成交价格。

– 生成 csv 文件,分别存放到 ./buy/ 和./sell/目录。生成文件样例

1.2.3 生成用户交易记录

执行脚本 genNormal.py,生成模拟正常用户交易记录数据。在实际的证券交易所风控可获取实际用户数据生成记录。本案例中的模拟逻辑是:随机获取 COIN 的5分钟k线,生成1-2个买卖记录。

执行脚本 genRandomHackerTrades.py 生成模拟的黑客交易记录数据。模拟逻辑是:获取 COIN 日k线中的 top 10 价格振幅最大的k线单元,然后随机从 top10 中选择3个单元,模拟生成低买高卖的点位。

1.2.4 将交易记录转换为图像

采用 matplotlib 库,绘制k线图像,把用户交易为圆点,绿色表示卖,红色表示买。黑客行为生成图像脚本为 generateHackerImg.py,获取黑客交易记录文件,绘制 K 线,如图-1所示,黑客行为的特点是出现短时间内集中的低买高卖行为,经过多轮测试,我们需要对图像进行处理,去掉与用户行为不想关的信息。

– 去掉 k 线展示

– 去掉 x,y 轴刻度显示

– 将图像尺寸缩小到2.5英寸*1.5英寸,dpi 调整为100.

生成效果图如下:

2. 模型训练与发布

经过以上的步骤,在 traindata 目录下,我们获得了 hacker 和 normal 两个类别的图像训练数据。下面就可以采用 Amazon Sagemaker 的内置算法 resNet 进行图像分类模型训练了。

2.1 数据集准备

使用RecordIO tool(im2rec)创建两个 .lst 文件。一个文件是用于训练的数据集(75%)。另一个文件是用于验证的数据集(25%) 将.lst 文件和 jpg 图片文件上传到一个S3 bucket。

2.2 数据训练与模型发布

1.在 sagemaker 中创建一台 Jupyter Notebook 实例,创建过程参考官方文档:https://docs.aws.amazon.com/sagemaker/latest/dg/howitworks-create-ws.html

2.下载实验所需训练步骤脚本:/jupter/image-classify-jpg.ipynb,上传至 Notebook 环境。

3.按照步骤执行 notebook,完成模型训练,模型发布。关于图像分类训练的详细说明可参考link

脚本运行完成后,会输出模型的训练结果,获取更多的交易对来生成训练样本会得到更好的效果,在 2000 hacker 样本和 2000 normal样本的数据规模下,得到的模型效果:

train:accuracy = 0.9850000143051147
validation:accuracy = 0.9962120056152344
train:accuracy:epoch = 0.9850000143051147
validation:accuracy:epoch = 0.9962120056152344

模型部署为实时访问端点:antiFraud-imageclassification-ep–2022-05-14-08-14-04。 可在后面的反欺诈业务流程中通过 Amazon SDK 实时调用,获得推理结果。

3. 业务流程设计参考:

在证券交易所,可以选择合适的触发时机来触发用户是否有欺诈行为的推理过程。例如在每天用户出金时实时推理或者每天晚上批量推理的方式。 我们按照实时推理的方式实现如下的业务流程。

  1. 从业务测发送触发消息到 Amazon SQS,消息体接口中具备基本的用户 id 信息。

  1. Lambda 接收到 SQS 消息,从交易数据库获取用户的24小时交易信息,获取涉及的交易对的5分钟 k 线数据,生成此用户的交易行为图像,图像的格式也采用相同的处理:去掉 k 线显示;去掉 x,y 轴刻度显示;图像尺寸缩小到5英寸*2.1英寸,dpi=100。

  1. 生成的用户交易图像 调用实时推理接口,我们就可以获得推理结果,此用户行为是否是欺诈行为,如果概率超过90%,我们写入风控表。

4. Amazon Lambda 如何支持 python 图形库

在此业务流程的实现中,lambda 函数引用了 matplotlib,numpy 等库,具备生成图片的能力,要实现此能力需要采用如下几个步骤。

  1. 理解 Lambda 的运行时环境,选择不同的 CPU 架构,在安装 Python 库是需要下载不同的 WHL 包

  1. 创建 Lambda Layer,用于存放几个公共类库,创建 Layer 的指导参见Link

因为 Python 的类库是需要区分安装的平台。windows,mac,linux 会有不同的安装包,同时 CPU 的架构不同也有区分。ARM 架构与X86_64架构。从https://pypi.org 搜索需要下载的包,跳转到下载页面。我们需要下载的是https://pypi.org/project/matplotlib/#files, 因为我创建的 lambda 是使用了 python3.9 运行环境,在 X86_64 架构下。因此我会选择下图中红线的 WHL 包

mkdir layer
cd layer
mkdir pylibs
cd pylibs
wget https://files.pythonhosted.org/packages/e1/81/0a73fe71098683a1f73243f18f419464ec109acae16811bf29c5d0dc173e/matplotlib-3.5.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl
wget https://files.pythonhosted.org/packages/8d/d6/cc2330e512936a904a4db1629b71d697fb309115f6d2ede94d183cdfe185/numpy-1.23.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

unzip '*.whl'
pip3 install -t . pyparsing==2.4.7
pip3 install -t . cycler==0.10.0
pip3 install -t . pytz
pip3 install -t . packaging
rm *.whl
rm -rf __pycache__
cd ..
zip -r lambdalayer.zip pylibs

以上完成 layer zip 包的制作,参照创建 Lambda Layer 的步骤,将zip包部署为 Lambda Layer 即可。

此解决方案中的 Lambda 函数请参见

https://github.com/aws-samples/amazon-sagemaker-antifraud-in-capitalmarket-imageclassify/blob/main/lambda/imageClassify.py

5. 总结

本文介绍了在证券领域,采用将用户时间序列类行为转换为图像,进而利用成熟的AI 图像分类算法来实现用户异常行为识别的方法。并且在连续对敲获利的场景中获得较好的效果。在解决方案中采用了 AMAZON SageMaker ,AMAZON Lambda,AMAZON SQS 快速完成了模型的训练,部署及业务流程的构建。期望能够给大家带来启发。

6. 参考资料

[1]https://mxnet.apache.org/versions/1.6/api/r/docs/api/im2rec.html

[2]https://matplotlib.org/stable/plot_types/index.html

[3]https://sagemaker-examples.readthedocs.io/en/latest/introduction_to_amazon_algorithms/imageclassification_caltech/Image-classification-lst-format-highlevel.html

本篇作者

Richard Lee

Amazon 解决方案架构师,负责基于 Amazon 云计算方案的架构咨询和落地实施;有电信,金融行业经验。加入 Amazon 前曾在华为软件任职项目经理,技术架构师,在 cryptocurrency 领域创业公司担任技术管理者。喜欢钻研跨领域技术创新。

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

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

相关文章

头脑风暴(一):Controller层前端传参接收;在Service层实现类中?为何要build相关构建器?添加套餐业务分析

文章目录1 MyBatis中Controller层List集合接收数据,泛型添加与否1.1 案例场景1.2 应该用什么接收1.3 是否可以用其他方式接收?1.4 LIst集合接收可否不指定泛型1.5 mybatis中使用基本类型接收数据?resultType是集合中的元素的类型,…

论文阅读笔记《GAMnet: Robust Feature Matching via Graph Adversarial-Matching Network》

核心思想 本文提出一种基于图对抗神经网络的图匹配算法(GAMnet),使用图神经网络作为生成器分别生成源图和目标图的节点的特征,并用一个多层感知机作为辨别器来区分两个特征是否来自同一个图,通过对抗训练的办法提高生成器特征提取…

uniCloud基础使用-好文

云函数可以看做java或者php,作为后端服务cloudfunctions/myCloud/index.jsexports.main async (event, context) > {const { name, age } eventreturn 我是${name},今年${age} };pages/index/index.vue//callFunction方法 在前端和云端都可以调用另一个云函数 …

三十而立却被裁,打工人要如何应对职场危机?

又到金三银四就业季,对于部分职场人来说,年龄成为了他们找工作的最大限制。 因为绝大部分企业招聘中层干部以下岗位的时候,都会要求年龄不超过35周岁,再加上每年千万毕业生涌入社会,竞争程度相当激烈,这就导…

QML 模型(ListModel)

LIstModel(列表模型) ListModel 是ListElement定义的简单容器,每个定义都包含数据角色。内容可以在 QML 中动态定义或显式定义。 属性: count模型中数据条目的数量dynamic动态角色,默认情况下,角色的类型…

Android 进程间通信机制(一) IPC概念和模型

一. 前言 一直想把Binder机制认识清楚, 但是它涉及Android系统的Framework, Native, kernel层, 就需要你要有 C C基础阅读底层源码的能力, 目前笔者的水平,对Binder 在Native 和kernel层的实现原理和机制也是懵逼状态, 真的是博大精深, 故现阶段先把看懂和理解清楚的整理出来…

内核链表分析

内核链表 文章目录内核链表list_head创建链表添加节点1. list_add2. list_add_tail 接口删除节点宿主结构1.找出宿主结构 list_entry(ptr, type, member)2 container_of3. 宿主结构的遍历list_head 在 Linux 内核中,提供了一个用来创建双向循环链表的结构 list_hea…

海康摄像头使用RTSP

1.协议格式。海康威视IP摄像头rtsp协议地址如下:rtsp://[username]:[passwd][ip]:[port]/[codec]/[channel]/[subtype]/av_stream主码流:rtsp://admin:12345192.168.1.64:554/h264/ch1/main/av_streamrtsp://admin:12345192.168.1.64:554/MPEG-4/ch1/mai…

SpringCloud微服务保护

微服务保护微服务保护1.初识Sentinel1.1.雪崩问题及解决方案1.1.1.雪崩问题1.1.2.超时处理1.1.3.仓壁模式1.1.4.断路器1.1.5.限流1.1.6.总结1.2.服务保护技术对比1.3.Sentinel介绍和安装1.3.1.初识Sentinel1.3.2.安装Sentinel1.4.微服务整合Sentinel2.流量控制2.1.簇点链路2.1.…

java基础学习 day51 (匿名内部类)

1. 什么是匿名内部类? 隐藏了名字的内部类,实际名字为:外部类名$序号可以写在成员位置,为没有名字的成员内部类也可以写在局部位置,为没有名字的局部内部类 2. 匿名内部类的格式? new 类名/接口名() { 重…

深入理解AQS

概念设计初衷:该类利用 状态队列 实现了一个同步器,更多的是提供一些模板方法(子类必须重写,不然会抛错)。 设计功能:独占、共享模式两个核心,state、Queue2.1 statesetState、compareAndSetSta…

SpringMVC简单仿写

之前我分享过SpringMVC的基本原理与配置(原文链接:https://blog.csdn.net/L170311/article/details/129339120),为了更深层次的学习,精益求精,手动仿写了一个MVC原理实现demo,一起学习一下吧 结构目录&…

使用预训练模型自动续写文本的四种方法

作者:皮皮雷 来源:投稿 编辑:学姐 这篇文章以中文通用领域文本生成为例,介绍四种常用的模型调用方法。在中文文本生成领域,huggingface上主要有以下比较热门的pytorch-based预训练模型: 本文用到了其中的ue…

RFID在技术在工业产线上的应用

RFID在技术在工业产线上的应用一工业产线需求制造业生产线几乎每月都要损耗大量物料,并且生产结果与预期因为有误差而影响交货的情况时有发生,生产线也往往因人为原因造成种种误差。将RFID标签贴在生产物料或产品上,可自动记录产品的数量、规…

学完Java只能在互联网公司任职吗?

当然不是只有互联网公司需要软件,需要开发技术人员,传统行业、新经济领域都有软件项目需求;Java也不是只能做网站、企业应用,还可以用于嵌入式、游戏…… 互联网时代的手机、智能电视、家具、机械设备等各种有形产品都将会嵌入智…

二、Neo4j源码研究系列 - 单步调试

二、Neo4j源码研究系列 - 单步调试 一、背景介绍 上一篇我们已经把了neo4j的源码准备以及打包流程完成了,本篇将讲解如何对neo4j进行单步调试。对于不了解如何编译打包neo4j的读者,请阅读《一、Neo4j源码研究系列 - 源代码准备》。 大纲: …

【改机教程】iOS系统去除小黑条,改拍照声、拨号音、键盘音,不用越狱,支持所有机型

大家好,上次给大家分享了几个iOS系统免越狱改机教程 今天带来最新的教程,这次修改利用的是同一个漏洞,由外网大神 tamago 开发,国内大神冷风 进行汉化和优化 可以修改的地方包括 去除底部小黑条 dock栏透明 桌面文件夹透明 桌面…

golang 占位符还傻傻分不清?

xdm ,写 C/C 语言的时候有格式控制符,例如 %s , %d , %c , %p 等等 在写 golang 的时候,也是有对应的格式控制符,也叫做占位符,写这个占位符,需要有对应的数据与之对应,不能瞎搞 基本常见常用…

Cobalt Strike---(2)

数据管理 Cobalt Strike 的团队服务器是行动期间Cobalt Strike 收集的所有信息的中间商。Cobalt Strike 解析来 自它的 Beacon payload 的输出,提取出目标、服务和凭据。 如果你想导出 Cobalt Strike 的数据,通过 Reporting → Export Data 。Cobalt Str…

CentOS7自签SSL证书并配置nginx

一、生成SSL证书 1、安装依赖包 yum install -y openssl openssl-devel 2、生成私钥,会让你输入一个 4~2048 位的密码,你需要暂时记住这个密码 openssl genrsa -des3 -out server.key 2048 输入两遍相同的密码 3、生成CSR(Certificate Signing Request …