亚马逊AWS官方博客
金融交易行为监测方法——利用 CNN模型实现行为识别
背景介绍
在证劵交易所领域,曾经发生用户证券账号被盗事件,导致客户资产损失,例如:黑客获得了用户A的证券账号密码,利用多次的低买高卖将资产转移。本文中针对此类对敲欺诈的场景,采用将用户交易数据转换为图片,进而利用Amazon SageMaker 图像分类算法ResNet 进行模型训练和推理,在此类欺诈行为识别上得到了很好的效果。这种将交易数据转换为图像分类的方式简化了通常的特征提取的复杂度,可以作为防欺诈或者交易行为特征识别的方式的新的尝试。
1. 数据准备
整个数据准备过程包括用户特征分析,样本数据构造,样本数据格式转换几个步骤。
项目包下载 Link
本机安装python3.9版本环境。并且提前准备如下几个依赖包的安装
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.
生成效果图如下:
正常交易图片生成逻辑一致,对应脚本为generateNormalImg.py
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样本的数据规模下,得到的模型效果:
模型部署为实时访问端点:antiFraud-imageclassification-ep–2022-05-14-08-14-04。 可在后面的反欺诈业务流程中通过AWS SDK 实时调用,获得推理结果。
3. 业务流程设计参考:
在证券交易所,可以选择合适的触发时机来触发用户是否有欺诈行为的推理过程。例如在每天用户出金时实时推理或者每天晚上批量推理的方式。 我们按照实时推理的方式实现如下的业务流程。
- 从业务测发送触发消息到AWS SQS,消息体接口中具备基本的用户id信息。
- Lambda接收到SQS消息,从交易数据库获取用户的24小时交易信息,获取涉及的交易对的5分钟k线数据,生成此用户的交易行为图像,图像的格式也采用相同的处理:去掉k线显示;去掉x,y轴刻度显示;图像尺寸缩小到5英寸*2.1英寸,dpi=100。
- 生成的用户交易图像 调用实时推理接口,我们就可以获得推理结果,此用户行为是否是欺诈行为,如果概率超过90%,我们写入风控表。
4. AWS Lambda 如何支持python图形库
在此业务流程的实现中,lambda函数引用了matplotlib,numpy等库,具备生成图片的能力,要实现此能力需要采用如下几个步骤。
1. 理解Lambda的运行时环境,选择不同的CPU架构,在安装Python库是需要下载不同的WHL包
2. 创建 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包
以上完成layer zip包的制作,参照创建Lambda Layer的步骤,将zip包部署为Lambda Layer即可。
此解决方案中的Lambda函数请参见
5. 总结
本文介绍了在证券领域,采用将用户时间序列类行为转换为图像,进而利用成熟的AI 图像分类算法来实现用户异常行为识别的方法。并且在连续对敲获利的场景中获得较好的效果。在解决方案中采用了AMAZON SageMaker ,AWS 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