【二等奖方案】大规模金融图数据中异常风险行为模式挖掘赛题「冀科数字」解题思路

news2025/1/18 17:04:08

第十届CCF大数据与计算智能大赛(2022 CCF BDCI)已圆满结束,大赛官方竞赛平台DataFountain(简称DF平台)正在陆续释出各赛题获奖队伍的方案思路,欢迎广大数据科学家交流讨论。

本方案为【大规模金融图数据中异常风险行为模式挖掘】赛题的二等奖获奖方案,赛题地址:https://www.datafountain.cn/competitions/586

图片

获奖团队简介

团队名称:冀科数字

团队成员:冀科数字是一支由河北省科学院应用数学研究所和天津大学的算法爱好者组成的联合队伍,希望通过比赛提升自己在图数据挖掘算法设计与优化方面的技术水平。我们的口号是“做数字时代的勇者”。

队长:王志强,博士,毕业于浙江大学控制系。目前工作于河北省科学院应用数学研究所,主要研究方向为大数据分析等。在比赛中负责整体方案设计。

队员:唐松,硕士,目前天津大学博士在读。主要研究方向为区块链、大数据系统架构等。在比赛中负责并行算法实现。

队员:崔能西,大三,就读于天津大学工科实验班。在比赛中负责数据处理与算法测试。

队员:檀改芳,本科,毕业于燕山大学测控技术与仪器专业。目前工作于河北省科学院应用数学研究所,主要研究方向为知识图谱。在比赛中负责线程调度与优化算法。

队员:张天亮,博士,毕业于中国农业大学。目前工作于河北省科学院应用数学研究所,主要研究方向为机器学习与数据分析等。在比赛中负责整体方案优化。

所获奖项:二等奖

摘   要

本赛题我们根据交易参数对图数据中边的属性进行编码标记,并按不同的属性进行分类,最后通过不同分类集合的归并实现对不同子图模式的挖掘。本方案的亮点主要有:一是将图数据中边的多个属性进行合并编码,利用排序方法实现了不同模式交易边的快速分类,并为节点的快速匹配打下基础;二是利用统计原理估算满足子图模式频繁度阈值时各模式数据量应该达到的规模,跳过规模小的边集合,极大减少了参与节点比对的数据量。

关 键 词

金融图数据,大数据分析,模式挖掘,并行算法

1 赛题任务简介

目前图计算广泛应用到金融风控的场景中,特别是基于图数据进行异常的风险行为模式挖掘,比如反套现,反洗钱等。业界常用的频繁子图挖掘算法可以帮助发现高频出现的子图结构,如何使用频繁子图挖掘算法高效地进行异常风险行为模式挖掘显得尤为重要。本赛题内容如下:

(1)使用简化的金融仿真数据,数据分为点类型数据和边类型数据。点类型数据即为账户数据,又分为普通账户(account)和卡账户(card)两种,有效字段为name和id。边类型数据为两种为带有时间戳和金额的账户间交易、转账等数据,即account_to_account(记为A2A)和account_to_card(记为A2C),有效字段为source_id、target_id、amt、strategy_name和buscode。

(2)在这些交易数据形成的大型图中进频繁子图的挖掘,其中子图复杂度为3阶,即具有3条边的子图,频繁度不小于10000。

(3)根据官方对赛题的解析,子图模式按照欧拉回路的构造标准,如果考虑3阶子图,则本题只考虑链式和三角形环路两种模式。

2 赛题分析

本赛题要实现频繁子图的挖掘,需要处理以下几方面的内容:

(1)数据读取与处理。按照要求对数据进行读取和格式转化,去除无效的字段,并把所有数值字段进行整型处理以提高后续计算效率。

(2)图模式定义。根据交易数据类型,从A2A的数据中可以产生链式子图和环路子图两种,而A2C数据所形成的边只能存在于链式子图的最末端,即这种子图只有A2A→ A2A→A2C这一类链式子图。

(3)频繁度计算。最直接的方式就是对子图模式进行穷举,然后对图数据进行遍历,判断每个3阶子图的模式,如果符合某个模式,就将其频繁度加上1。

(4)算法设计。遍历的计算量是巨大的,需要进行大幅度的优化,算法优化的角度是多方面的,比如遍历路径的剪枝、搜索算法的优化、编程语言的选择和多线程并行计算的实现。

3 算法实现

3.1 实现思路

(1)对于边属性进行处理,原始的交易数据中没有起点名称(source_name)和终点名称的字段(target_name),则在数据处理中增加这两个字段,通过对相应的账户数据进行查询获得相应的值。这样在后续算法实现过程中只用考虑边数据。

(2)整合需要匹配的模式属性对各边进行编码,即将各边的source_name、target_name、amt、strategy_name和buscode合成到一个字段进行表示,那么按这个字段对边数据进行排序就可以实现边模式的快速分类。

(3)改变遍历图数据找出频繁子图的实现方式。利用先给出子图模式,再计量该模式的频繁度的思路。这样可以对各种模式逐一计算,满足要求的可以直接输出结果,不用占用大量的中间内存。

(4)设计子图模式的遍历算法。先对边模式进行分类,然后任意抽取两个模式出来进行排列,分别做为3阶子图的首边和末边,那么中间边的起点名称和终点名称已经确认,进一步缩小了中间边的选择范围。

3.2 算法流程设计

本方案根据图数据模式挖掘的特点,结合C++的语言特点设计本方案的主体流程:

Step1 读入账户数据和交易数据,进行数据整理:

Step1.1 将有效字段进行数据格式转化;

Step1.2 在建立边数据时,通过起点和终点的ID查询补充相应的名称字段;

Step1.3 对有效字段进行组合,按source_name、target_name、amt、strategy_name和buscode的顺序合并生成类别标签字段(type_tag)。

Step2 对边数据进行排序和分类:

Step2.1 对边数据按type_tag和source_id进行两层排序;

Step2.2 对排序后的数据按type_tag进行类别区间的标识并建立字典数据;

Step2.3 对标签字典按source_name和target_name的组合进行二次区间标识,并建立区间索引字典数据。

Step3 计算3阶子图模式的频繁度:

Step3.1 按边属性类别建立双层循环实现首边和末边的排序;

Step3.2 根据首边的终点名称和末边的起点名称组成的标签索引从Step2.3中建立的区间字典中找到可以匹配的边类别做为中间边的可选集合;

Step3.3 对前两步确定的三条边进行组合遍历,匹配衔接点ID,如果两个节点都匹配上了,则对应子图模式频繁度加1;

Step3.4 上一步遍历完成后,检查频繁度是否达到筛选阈值,如果符合要求,则将该子图模式及频繁度写入结果文件中。

4 方案优化与扩展

4.1 方案优化

本方案是为了解决一个实际的应用问题,为了更高的执行效率,我们结合语言环境、算法思路、数据特点等因素进行了全面的优化:

(1)编程语言方面,运用C++进行了算法的实现,其中利用mmap进行数据读取,提高数据载入效率,调用OpenMP并行编程框架,实现了大数据循环的并行化。

(2)数据处理方面,对于边模式进行标签化时,将标签字段进行整形表达,利用位操作实现了各属性字段的快速拼接,因为整形数据可以实现更高效的比较和排序计算。

(3)遍历剪枝方面,对于子图模式的遍历实质上是一个决策树过程,即由首边选择末边,再选择中间边的过程。根据概率原则,考虑各ID的出现概率为完全随机的,则子图频繁度

图片

 的估计公式为

图片

 。

式中,

图片

 为第i条边模式所对应的数据量,

图片

为连接第i条与第j条的节点所对应名称的账号数量。经测算当

图片

 时找到满足频繁度要求的概率极低。因此,我们可以通过估算公式得到的结果,做出是否跳过精确比对计算的决策。

(4)进行衔接点匹配时,要根据当前边的终点ID来匹配下一边的起点ID,这是一个搜索过程,由于我们已经对同属性边的起点ID进行了排序,则可以利用二分法进行快速查找。

4.2 方案扩展

(1)利用对模式进行标签命名的方式,可以扩展为任何模式,通过排序进行模式的自动分组和快速查找。

(2)由于对模式数据建立的索引,可以对任意子图模式进行频繁度统计,并且可以保证结果的唯一性。

(3)可以对多种频繁度计算规则进行统计,比如完全的欧拉路径,即统计过程中每个模式的频繁度计算是每条边只参与一次计算。

5 结语

通过本次比赛,对金融图数据分析方法有了一定的认识和理解,在相关算法设计方面有如下心得:

(1)本方案所用的数据载入方法、数据快速转化方法、二分法快速搜索算法适用于很多算法开法方案。

(2)利用先确定子图模式再计算频繁度的实现方式,可以大幅减少内存的占用。

(3)在频繁度的计算中引入概率思维,可以大大减少模式搭配组合,大幅提高挖掘效率。

(4)对于频繁子图挖掘这样的大数据场景,数据特点、索引优化和查询算法都将对整体效率产生重大影响。

由于团队成员均是在本次比赛中刚刚接触金融图数据挖掘的算法研究,对很多内容还处于学习摸索阶段,因此方案还有很大的提升空间。保守估计,我们方案的运行效率还有30%-50%的优化提升空间。

致   谢

感谢平台和主办方给了我们这次锻炼机会。感谢河北省科学院应用数学研究所提供优质的算力资源。感谢队友们的精诚合作,让我们的队伍能够一步步坚实地迈进决赛。


我是行业领先的大数据竞赛平台 @DataFountain ,欢迎广大政企校军单位合作办赛,推动优秀数据人才揭榜挂帅!

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

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

相关文章

Java代码审计15之Apache log4j2漏洞

文章目录 1、log4j简介2、复现2.1、高版本测试2.2、测试代码2.3、补充之dns探测2.3.1、rmi、ldap也可以dnslog探测 2.3.2、dnslog外带信息 3、漏洞原理3.1、漏洞的危害大的背景3.2、具体的代码调试 4、靶场测试4.1、dns探测4.2、工具下载与使用4.3、测试 5、bypass 1、log4j简介…

FBX SDK 开发环境配置 visual studio 2022

FBX | Adaptable File Formats for 3D Animation Software | Autodesk. 下载windows的sdk并安装. 创建一个c console 工程 设置include目录 添加预处理宏 FBX_SHARED1 添加fbx sdk lib 目录 添加依赖lib : libfbxsdk-md.lib libxml2-md.lib zlib-md.lib 配置完毕.

C# | DBSCAN聚类算法实现 —— 对直角坐标系中临近点的点进行聚类

C# | DBSCAN聚类算法实现 聚类算法是一种常见的数据分析技术,用于将相似的数据对象归类到同一组或簇中。其中,DBSCAN(Density-Based Spatial Clustering of Applications with Noise)是一种基于密度的聚类算法,能够有效…

【算法训练-数组 三】数组中的第K个最大元素(TOPK问题|寻找第K大)

废话不多说,喊一句号子鼓励自己:程序员永不失业,程序员走向架构!本篇Blog的主题是【寻找第K大】,使用【数组】这个基本的数据结构来实现,这个高频题的站点是:CodeTop,筛选条件为&…

第 3 章 栈和队列(顺序栈,算法 3.3)

1. 背景说明: 若迷宫 maze 中存在从入口 start 到出口 end 的通道,则求得一条存放在栈中(从栈底到栈顶),并返回 TRUE;否则返回 FALSE,注意,该解并非最优解, 最优解需要求得最短路径且可能并非…

基于Googlenet深度学习网络的人脸身份识别matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 ..................................................................... % 定义修改的范围 …

IP子网的划分

文章目录 一、子网掩码1. 产生背景2. 定义3. 分类 二、VLSM算法1. 得出下列参数2. 计算划分结果3. 举例子计算 三、常见子网划分对应关系四、练习IP编址题目需求解题1. 192.168.1.100/282. 172.16.0.58/263. 25.83.149.222/254. 100.100.243.18/205. 10.100.100.100/10 首先可以…

Python Qt学习(一)一个简单的JSON数据预览界面

先贴上代码: # -*- coding: utf-8 -*-# Form implementation generated from reading ui file json_converter.ui # # Created by: PyQt5 UI code generator 5.15.9 # # WARNING: Any manual changes made to this file will be lost when pyuic5 is # run again. …

Python飞机大战小游戏

游戏规则:键盘上下左右键控制飞机移动 游戏展示图片: 源码: 第一个py命名为:plane_main.py import pygamefrom plane_sprites import *class PlaneGame(object):# """飞机大战主游戏"""def __in…

ExpressLRS开源之基本调试数据含义

ExpressLRS开源之基本调试数据含义 1. 源由2. 代码2.1 debugRcvrLinkstats2.2 debugRcvrSignalStats 3. 含义解释3.1 ID(packetCounter),Antenna,RSSI(dBm),LQ,SNR,PWR,FHSS,TimingOffset3.2 IRQ_CNT,RSSI_AVE,SNR_AVE,SNV_MAX,TELEM_CNT,FAIL_CNT 4. 总结5. 参考资料 1. 源由 …

详解 ElasticSearch Kibana 配置部署

默认安装部署所在机器允许外网 SSH工具 Putty 链接:https://pan.baidu.com/s/1b6gumtsjL_L64rEsOdhd4A 提取码:lxs9 Winscp 链接:https://pan.baidu.com/s/1tD8_2knvv0EJ5OYvXP6VTg 提取码:lxs9 WinSCP安装直接下一步到完成…

UE 5 GAS 在项目中通过数据初始化

近期,在制作多角色,考虑到角色和角色之间有很多共用的内容,正常项目中的实现的话,会通过数据的方式去实现角色初始化,接下来介绍一下,我的实现方式。 以上是我设置的相应的数据,上面最简单的名…

设计模式行为模式-命令模式

文章目录 前言定义结构工作原理优点适用场景消息队列模式Demo实现分写业务总结 前言 定义 命令模式(Command Pattern)是一种行为型设计模式,用于将请求封装为对象,从而使你可以使用不同的请求、队列或者日志请求来参数化其他对象…

服务器端污染属性反射提升权限

污染属性反射检测服务器端原型污染 通过服务器端原型污染提升权限 Lab: Privilege escalation via server-side prototype pollution 必要知识点 开发人员很容易陷入的一个陷阱是忘记或忽略 JavaScript 循环迭代对象的所有可枚举属性这一事实,包括它通过原型链继…

医学案例|线性回归

一、案例介绍 某医师预研究糖尿病患者的总胆固醇和甘油三酯对空腹血糖的影响,某研究者调查40名糖尿病患者的总胆固醇、甘油三酯和空腹血糖的测量值如下,试根据上述研究问题作统计分析。 二、问题分析 本案例想要研究一些变量(总胆固醇和甘油…

PocketMiner:基于深度学习发现蛋白的隐式口袋

文章目录 1. 文章简介2. 前言3. 方法3.1 模型框架 4. 结果4.1 已知隐式口袋在分子动力学模拟分析迅速打开4.2 图神经网络模型能够准确预测模拟中口袋的动态变化4.3 隐式口袋数据集数据集揭示了新的隐式口袋形成的模式4.4 PocketMiner能够从无配体的蛋白结构中精准预测预测口袋4…

2007-2022年上市公司污染排放数据/2007-2022年上市公司污染排放水平、污染排放量数据

2007-2022年上市公司污染排放数据/2007-2022年上市公司污染排放水平、污染排放量数据 1、时间:2007-2022年 2、指标:证券代码、year、化学需氧量、氨氮排放量、总氮、总磷、水体综合污染当量对数、二氧化硫、氮氧化物、烟尘、空气综合污染当量对数、总…

小游戏分发平台如何以技术拓流?

2023年,小游戏的发展将受到多方面的影响,例如新技术的引入、参与小游戏的新玩家以及游戏市场的激烈竞争等。首先,新技术如虚拟现实(VR)、增强现实(AR)和机器人技术都可以带来新颖的游戏体验。其…

滑动窗口实例1(长度最小的子数组)

题目: 给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl1, ..., numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。 示例 1: …

VC++使用Microsoft Speech SDK进行文字TTS朗读

Microsoft Speech SDK下载地址 https://www.microsoft.com/en-us/download/details.aspx?id=10121 需要msttss22L.exe、SpeechSDK51.exe、SpeechSDK51LangPack.exe三个,下载后全部安装 使用VS2005建立一个win32控制台项目 朗读"hello word"、中文“你好”的程序 …