「我,xxx,打钱……」你收到过这样的短信吗?
其实,利用信息技术进行欺骗的做法,历史可能远超你设想。甚至在互联网还没诞生的年代,通过纸质函件和传真进行欺骗的「尼日利亚王子」骗局就曾在寰球范畴内宽泛流传了。时至今日,通过各种路径,以社会工程学伎俩发展的在线欺骗行为更是形形色色,让人防不胜防。
明天,咱们将从企业角度来看看,该如何用技术手段防备网络骗子们通过本人公司的平台施行欺骗行为。
===
欺诈用户与歹意账户每年可能给企业造成数十亿美元的营收损失。只管不少企业曾经在应用基于规定的筛选器避免零碎中存在的各类歹意流动,但这类筛选器往往相当软弱,而且无奈捕捉到全副歹意行为。
另一方面,也有局部解决方案(例如图技术)在检测欺诈者与歹意用户方面体现突出。欺诈者能够调整本身流动以骗过基于规定的零碎或者基于特色的简略模型,但却很难伪造图构造,特地是用户与事务 / 交互日志中其余实体之间的关系。图神经网络(GNN)可能将图构造中的信息同用户或事务的属性相结合,从中提取出有意义的示意模式,最终将歹意用户及事件同非法用户及事件明确辨别开来。
本文介绍了如何应用 Amazon SageMaker 与 Deep Graph Library(DGL)训练 GNN 模型,进而检测歹意用户或欺诈事务。心愿应用全托管 AWS AI 服务以实现欺诈检测的用户,也能够思考应用 Amazon Fraud Detector 以显著升高对潜在欺诈性在线流动(例如创立伪造账户或者在线领取欺诈)的辨认难度。
下文将重点介绍如何应用 Amazon SageMaker 进行数据预处理以及模型训练。要训练一套 GNN 模型,首先须要应用交易表或者拜访日志中的信息构建起一套异构图。所谓异构图,是指蕴含不同类型的节点与边的图。如果以节点代表用户或者事务,则各节点将可反映以后用户与其余用户或者实体(例如设施标识符、机构、应用程序、IP 地址等)之间的多种不同关系。
上面来看实用于这套解决方案的局部用例:
- 各用户之间,以及用户与特定金融机构或应用程序之间进行交易的金融网络。
- 用户与其余用户、乃至不同游戏或设施之间继续交互的游戏网络。
- 用户与其余用户间领有多种不同类型链接的社交网络。
下图所示,为异构金融交易网络的根本架构。
GNN 可能合并用户特色(例如人口统计信息)或者交易特色(例如流动频率)。换句话说,咱们能够应用节点与边的特色作为元数据,借此丰盛异构图示意。在实现异构图中的节点与关系及其关联特色的建设工作之后,就能够训练 GNN 模型,疏导其学习如何应用节点或边特色、外加图构造,将不同节点归类为歹意或者非法节点。模型训练以半监督形式实现 —— 图中须要有一部分节点被事后标记为欺诈或者非法节点。将蕴含这些标记的子集作为训练信号,咱们能够让 GNN 模型逐步摸索出最优参数搭配。而后,经过训练的 GNN 模型即可预测图中残余的其余未标记节点。
架构
首先,咱们能够应用 Amazon SageMaker 的残缺解决方案架构运行解决作业与训练作业。大家能够应用可能对 Amazon Simple Storage Service(Amazon S3)PUT 事件做出响应的 AWS Lambda 函数主动触发 Amazon SageMaker 作业,或通过在示例 Amazon SageMaker notebook 中运行的单元以手动触发相应作业。下图为这套架构的直观示意:
残缺实现可通过 GitHub repo 获取,其中还带有一套 AWS CloudFormation 模板,用于在 AWS 账户中启动整套架构。
GNN 欺诈检测筹备:数据预处理
在本节中,咱们将介绍如何对示例数据集进行预处理,借此确定异构图中各节点间的关系!
数据集
在本用例中,咱们应用 IEEE-CIS 欺诈数据集对建模办法进行基准测试。这是一套匿名数据集,其中蕴含用户间多达 50 万笔交易。该数据集中蕴含两个主表:
- Transactions table:交易表,蕴含对于交易或用户间交互的信息。
- Identity table:身份表,蕴含执行交易的具体用户的相干日志拜访、设施及网络信息。
咱们能够将这些交易中的子集及其标签作为模型训练中的监督信号。对于测试数据集中的交易,其标签在训练期间将被屏蔽。模型的工作十分明确:预测哪些被屏蔽的交易属于欺诈行为,哪些属于非法行为。
以下示例代码将获取数据并将其上传至 Amazon SageMaker 在预处理与训练(在 Jupyter notebook 单元中运行)期间拜访数据集应用的 Amazon S3 存储桶:
# Replace with an S3 location or local path to point to your own dataset
raw_data_location = 's3://sagemaker-solutions-us-west-2/Fraud-detection-in-financial-networks/data'
bucket = 'SAGEMAKER_S3_BUCKET'
prefix = 'dgl'
input_data = 's3://{}/{}/raw-data'.format(bucket, prefix)
!aws s3 cp --recursive $raw_data_location $input_data
# Set S3 locations to store processed data for training and post-training results and artifacts respectively
train_data = 's3://{}/{}/processed-data'.format(bucket, prefix)
train_output = 's3://{}/{}/output'.format(bucket, prefix)
只管欺诈者会致力拆穿本人的歹意流动,但这类行为在图构造中依然具备非常明显的特色,例如高出度或者流动聚合偏向。以下各节,将阐明如何执行特征提取与图构建,进而由 GNN 模型利用这些模式实现欺诈预测。
特征提取
特征提取包含对分类特色执行数字编码,再对数字列进行一系列转换。例如,咱们须要对交易金额进行对数转换以批示金额的绝对大小,并能够通过独热编码方法将其类别属性转换为数字模式。对于每一项交易,特征向量都将蕴含交易表中的固有属性,这些属性中蕴含有与先前交易相比拟的工夫增量、名称与地址匹配以及匹配计数等信息。
构建图
要构建残缺的交互图,咱们须要将数据中的各关系信息划分为与各种关系类型绝对应的 Edge list。每个 Edge list 都属于事务节点与其余实体类型之间的二部图。这些实体类型别离形成与事务相干的标识属性。例如,对于交易中应用的卡片类型(借记卡或信用卡),咱们能够将其创立为实体类型、实现交易所用设施的 IP 地址,以及所应用设施的设施 ID 或操作系统。图构建中应用的实体类型,则包含身份表中所有属性及交易表中属性的子集,例如信用卡信息或者电子邮件域。异构图正是由示意各关系类别的 Edge list 与节点的特色矩阵所独特形成。
应用 Amazon SageMaker Processing
大家能够应用 Amazon SageMaker Processing 执行数据预处理与特征提取步骤。Amazon SageMaker Processing 是 Amazon SageMaker 中的一项性能,容许大家在全托管基础设施之上运行预处理与后处理工作负载。对于更多详细信息,请参阅解决数据与评估模型。
首先,咱们须要定义 Amazon SageMaker Processing 作业中应用的容器。此容器中应蕴含数据预处理脚本所须要的全副依赖项。因为本用例中的数据预处理只须要应用 Pandas 库,因而能够应用最小 Dockerfile 实现容器定义。具体请参见以下代码:
FROM python:3.7-slim-buster
RUN pip3 install pandas==0.24.2
ENV PYTHONUNBUFFERED=TRUE
ENTRYPOINT ["python3"]
大家能够通过输出以下代码实现容器构建,并将构建实现的容器推送至 Amazon Elastic Container Registry(Amazon ECR)镜像仓库:
import boto3
region = boto3.session.Session().region_name
account_id = boto3.client('sts').get_caller_identity().get('Account')
ecr_repository = 'sagemaker-preprocessing-container'
ecr_repository_uri = '{}.dkr.ecr.{}.amazonaws.com/{}:latest'.format(account_id, region, ecr_repository)
!bash data-preprocessing/container/build_and_push.sh $ecr_repository docker
当数据预处理容器准备就绪之后,咱们能够创立一个 Amazon SageMaker ScriptProcessor,负责应用预处理容器设置解决作业环境。接下来,能够应用 ScriptProcessor 在容器定义的环境中运行负责具体实现数据预处理的 Python 脚本。该 Python 脚本在执行实现并将预处理数据保留回 Amazon S3 之后,解决作业即告完结。整个过程齐全由 Amazon SageMaker 负责管理。在运行 ScriptProcessor 时,咱们能够抉择将参数传递至数据预处理脚本,借此指定交易表中的哪此列应被视为身份列、哪些列属于分类特色。所有其余列则均被假设为数字特色列。具体请参见以下代码:
from sagemaker.processing import ScriptProcessor, ProcessingInput, ProcessingOutput
script_processor = ScriptProcessor(command=['python3'],
image_uri=ecr_repository_uri,
role=role,
instance_count=1,
instance_type='ml.r5.24xlarge')
script_processor.run(code='data-preprocessing/graph_data_preprocessor.py',
inputs=[ProcessingInput(source=input_data,
destination='/opt/ml/processing/input')],
outputs=[ProcessingOutput(destination=train_data,
source='/opt/ml/processing/output')],
arguments=['--id-cols', 'card1,card2,card3,card4,card5,card6,ProductCD,addr1,addr2,P_emaildomain,R_emaildomain',
'--cat-cols','M1,M2,M3,M4,M5,M6,M7,M8,M9'])
以下示例代码,展现了 Amazon SageMaker Processing 作业存储在 Amazon S3 当中的输入后果:
from os import path
from sagemaker.s3 import S3Downloader
processed_files = S3Downloader.list(train_data)
print("===== Processed Files =====")
print('n'.join(processed_files))Output:
===== Processed Files =====
s3://graph-fraud-detection/dgl/processed-data/features.csv
s3://graph-fraud-detection/dgl/processed-data/relation_DeviceInfo_edgelist.csv
s3://graph-fraud-detection/dgl/processed-data/relation_DeviceType_edgelist.csv
s3://graph-fraud-detection/dgl/processed-data/relation_P_emaildomain_edgelist.csv
s3://graph-fraud-detection/dgl/processed-data/relation_ProductCD_edgelist.csv
s3://graph-fraud-detection/dgl/processed-data/relation_R_emaildomain_edgelist.csv
s3://graph-fraud-detection/dgl/processed-data/relation_TransactionID_edgelist.csv
s3://graph-fraud-detection/dgl/processed-data/relation_addr1_edgelist.csv
s3://graph-fraud-detection/dgl/processed-data/relation_addr2_edgelist.csv
s3://graph-fraud-detection/dgl/processed-data/relation_card1_edgelist.csv
s3://graph-fraud-detection/dgl/processed-data/relation_card2_edgelist.csv
s3://graph-fraud-detection/dgl/processed-data/relation_card3_edgelist.csv
s3://graph-fraud-detection/dgl/processed-data/relation_card4_edgelist.csv
s3://graph-fraud-detection/dgl/processed-data/relation_card5_edgelist.csv
s3://graph-fraud-detection/dgl/processed-data/relation_card6_edgelist.csv
s3://graph-fraud-detection/dgl/processed-data/relation_id_01_edgelist.csv
s3://graph-fraud-detection/dgl/processed-data/relation_id_02_edgelist.csv
s3://graph-fraud-detection/dgl/processed-data/relation_id_03_edgelist.csv
s3://graph-fraud-detection/dgl/processed-data/relation_id_04_edgelist.csv
s3://graph-fraud-detection/dgl/processed-data/relation_id_05_edgelist.csv
s3://graph-fraud-detection/dgl/processed-data/relation_id_06_edgelist.csv
s3://graph-fraud-detection/dgl/processed-data/relation_id_07_edgelist.csv
s3://graph-fraud-detection/dgl/processed-data/relation_id_08_edgelist.csv
s3://graph-fraud-detection/dgl/processed-data/relation_id_09_edgelist.csv
s3://graph-fraud-detection/dgl/processed-data/relation_id_10_edgelist.csv
s3://graph-fraud-detection/dgl/processed-data/relation_id_11_edgelist.csv
s3://graph-fraud-detection/dgl/processed-data/relation_id_12_edgelist.csv
s3://graph-fraud-detection/dgl/processed-data/relation_id_13_edgelist.csv
s3://graph-fraud-detection/dgl/processed-data/relation_id_14_edgelist.csv
s3://graph-fraud-detection/dgl/processed-data/relation_id_15_edgelist.csv
s3://graph-fraud-detection/dgl/processed-data/relation_id_16_edgelist.csv
s3://graph-fraud-detection/dgl/processed-data/relation_id_17_edgelist.csv
s3://graph-fraud-detection/dgl/processed-data/relation_id_18_edgelist.csv
s3://graph-fraud-detection/dgl/processed-data/relation_id_19_edgelist.csv
s3://graph-fraud-detection/dgl/processed-data/relation_id_20_edgelist.csv
s3://graph-fraud-detection/dgl/processed-data/relation_id_21_edgelist.csv
s3://graph-fraud-detection/dgl/processed-data/relation_id_22_edgelist.csv
s3://graph-fraud-detection/dgl/processed-data/relation_id_23_edgelist.csv
s3://graph-fraud-detection/dgl/processed-data/relation_id_24_edgelist.csv
s3://graph-fraud-detection/dgl/processed-data/relation_id_25_edgelist.csv
s3://graph-fraud-detection/dgl/processed-data/relation_id_26_edgelist.csv
s3://graph-fraud-detection/dgl/processed-data/relation_id_27_edgelist.csv
s3://graph-fraud-detection/dgl/processed-data/relation_id_28_edgelist.csv
s3://graph-fraud-detection/dgl/processed-data/relation_id_29_edgelist.csv
s3://graph-fraud-detection/dgl/processed-data/relation_id_30_edgelist.csv
s3://graph-fraud-detection/dgl/processed-data/relation_id_31_edgelist.csv
s3://graph-fraud-detection/dgl/processed-data/relation_id_32_edgelist.csv
s3://graph-fraud-detection/dgl/processed-data/relation_id_33_edgelist.csv
s3://graph-fraud-detection/dgl/processed-data/relation_id_34_edgelist.csv
s3://graph-fraud-detection/dgl/processed-data/relation_id_35_edgelist.csv
s3://graph-fraud-detection/dgl/processed-data/relation_id_36_edgelist.csv
s3://graph-fraud-detection/dgl/processed-data/relation_id_37_edgelist.csv
s3://graph-fraud-detection/dgl/processed-data/relation_id_38_edgelist.csv
s3://graph-fraud-detection/dgl/processed-data/tags.csv
s3://graph-fraud-detection/dgl/processed-data/test.csv
所有关系 Edgelist 文件,均示意训练期间用于结构异构图的不同类型的边。Features.csv 中蕴含交易节点最终转换后的特色,而 tags.csv 中则蕴含作为训练监督信号的节点标签。Test.csv 中蕴含 TransactionID 数据,作为评估模型性能的测试数据集。这些节点标签在训练期间皆被屏蔽以防止对模型预测产生烦扰。
GNN 模型训练
当初,咱们能够应用 Deep Graph Library(DGL)创立图并定义 GNN 模型,而后应用 Amazon SageMaker 启动基础设施以训练 GNN 了。具体而言,咱们能够应用关系图卷积神经网络模型学习异构图中节点的嵌入,以及用于最终节点分类的全连贯层。
超参数
要训练 GNN 模型,大家还须要在训练开始之前定义一系列固定的超参数,例如心愿结构的图各类、所应用的 GNN 模型类别、网络架构以及优化器与优化参数等。具体请参见以下代码:
edges = ",".join(map(lambda x: x.split("/")[-1], [file for file in processed_files if "relation" in file]))
params = {'nodes' : 'features.csv',
'edges': 'relation*.csv',
'labels': 'tags.csv',
'model': 'rgcn',
'num-gpus': 1,
'batch-size': 10000,
'embedding-size': 64,
'n-neighbors': 1000,
'n-layers': 2,
'n-epochs': 10,
'optimizer': 'adam',
'lr': 1e-2
}
上述代码中蕴含一部分超参数。对于超参数及其默认值的更多详细信息,请参见 GitHub repo 中的 estimator_fns.py。
应用 Amazon SageMaker 训练模型
在超参数定义实现之后,大家当初能够正式启动训练过程了。训练作业应用 DGL(以 MXNet 作为后端深度学习框架)实现 GNN 模型的定义与训练。Amazon SageMaker 提供框架拟合器,其中设置的深度学习框架环境可能极大升高 GNN 模型的训练难度。对于在 Amazon SageMaker 上应用 DGL 训练 GNN 模型的更多详细信息,请参阅训练深度图网络。
当初,咱们能够创立一个 Amazon SageMaker MXNet 拟合器,并传入模型训练脚本、超参数以及所需的训练实例数量 / 类型。接下来,大家可在拟合器上调用 Fit 并传入 Amazon S3 上的训练数据保留地位。详见以下代码:
from sagemaker.mxnet import MXNet
estimator = MXNet(entry_point='train_dgl_mxnet_entry_point.py',
source_dir='dgl-fraud-detection',
role=role,
train_instance_count=1,
train_instance_type='ml.p2.xlarge',
framework_version="1.6.0",
py_version='py3',
hyperparameters=params,
output_path=train_output,
code_location=train_output,
sagemaker_session=sess)
estimator.fit({'train': train_data})
后果
在 GNN 模型训练实现之后,该模型曾经学会了如何辨别非法交易与欺诈交易。训练作业会产生一个 pred.csv 文件,该文件是模型针对 test.csv 中交易的预测后果。ROC 曲线体现了各种阈值之下正确预报率与误报率之间的关系,其中曲线下面积(AUC)可作为评估指标。通过下图能够看到,咱们训练的 GNN 模型在性能上优于全连贯前馈网络、以及应用雷同特色但未充沛应用图构造的梯度晋升树。
总结
在本文中,咱们解说了如何依据用户交易与流动构建异构图,并应用该图及其他收集到的特色训练 GNN 模型,最终对交易的欺诈性做出预测。本文还介绍了如何应用 DGL 与 Amazon SageMaker 定义并训练具备高预测性能的 GNN 模型。对于此我的项目的残缺实现以及其余 GNN 模型详细信息,请参见 GitHub repo。
另外,咱们还介绍了如何实现数据处理,以应用 Amazon SageMaker Processing 从原始交易数据日志中提取有意义的特色与关系。您能够间接部署示例中提供的 CloudFormation 模板并传入本人的数据集,借此检测数据中的各歹意用户与欺诈性交易。