【二等奖方案】大规模金融图数据中异常风险行为模式挖掘赛题「冀科数字」解题思路
第十届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 ,欢迎广大政企校军单位合作办赛,推动优秀数据人才揭榜挂帅!
相关文章:
【二等奖方案】大规模金融图数据中异常风险行为模式挖掘赛题「冀科数字」解题思路
第十届CCF大数据与计算智能大赛(2022 CCF BDCI)已圆满结束,大赛官方竞赛平台DataFountain(简称DF平台)正在陆续释出各赛题获奖队伍的方案思路,欢迎广大数据科学家交流讨论。 本方案为【大规模金融图数据中…...
C# List与HashSet的contains()方法查询速度比较
List 和HashSet同时查询40万条数据,谁的效率更高? //**1.下面是List底层源码**public boolean contains(Object o) {//如果查到我们想要查询的值则返回一个true,否则返回false,return indexOf(o) > 0;//这里是调用了indexOf方…...
命令执行漏洞复现攻击:识别威胁并加强安全
环境准备 这篇文章旨在用于网络安全学习,请勿进行任何非法行为,否则后果自负。 一、攻击相关介绍 原理 主要是输入验证不严格、代码逻辑错误、应用程序或系统中缺少安全机制等。攻击者可以通过构造特定的输入向应用程序或系统注入恶意代码ÿ…...
Keepalived实现服务器的高可用性
目录 背景方案简介KeepalivedHeartbeat Keepalived技术介绍Keepalived通信方式时间同步 Keepalived配置案例Keepalived日志配置Keepalived服务配置全局配置段VRRP配置段Keepalived服务启动 服务异常检测 背景 在实际应用中,为了提高服务器的高可用性,往…...
Python程序化交易接口批量获取数据源码
小编举例下面是一个简单的示例代码,展示如何使用Python的程序化交易接口批量获取数据,例如开发文档参考:MetaTradeAPI (metatradeapi) - Gitee.com 签名 int Init(); 功能 API 初始化 参数 无 返回值 授权成功的交易账户数量 返回值 &…...
【强化学习】基本概念
基本大概框架 强化学习的主要角色是 智能体 (agent)和 环境,环境是智能体存在和互动的世界。智能体根据当前的环境做出action,action影响环境。然后智能体根据新的环境再进行action。 基础用语 状态(state, s)&…...
0001__安装electron失败 postinstall: `node install.js`
不一样的 npm 快速安装electron的方案 - 简书 2、手动下载出错的文件 打开浏览器输入 下述网址, 找到你要的版本号, 点击后找到你的平台点击即可下载了。https://registry.npmmirror.com/binary.html?pathelectron/ 作者:一颗人心 链接&…...
Linux测开常用命令总结
文章目录 Linux系统中文件目录树 基本指令的使用: Linux命令的帮助信息查看 --help command --help 说明: 显示command 命令的帮助信息通过man命令查看帮助信息 man command( 命令的名称) man 命令查看的帮助信息更加详细ls,pwd,…...
xml转化为txt数据的脚本,为yolo提供训练
这里写自定义目录标题 xml转化为txt数据的脚本 xml转化为txt数据的脚本 代码如下: import xml.etree.ElementTree as ET import os, cv2 import numpy as np from os import listdir from os.path import joinclasses []def convert(size, box):dw 1. / (size[0…...
【H5页面嵌入到小程序或APP中实现手机号点击复制和拨号功能】
在H5界面嵌入到小程序和移动应用(安卓和iOS)中实现手指点击手机号弹出弹窗,包含呼叫和复制选项,是可以实现的。下面我将为你提供一个基本的示例,并解释在小程序、安卓和iOS中要做的支持工作。 <!DOCTYPE html> …...
Kubernetes技术--k8s核心技术 configMap
1.概述 configMap最主要的作用是存储一些不加密的数据到/etcd,让pod以变量或者数据卷(volume)挂载到容器。 应用场景:配置文件、存储信息等 2.使用 -1.创建配置文件。 这里我们需要先编写一个配置文件。使用redis,如下所示:...
Springboot动态修改日志级别
在开发和运维过程中,我们经常需要调整日志级别来查看不同级别的日志信息。传统的做法是修改配置文件,然后重启应用程序。但是,在分布式系统中,重启应用程序可能比较麻烦,而且也影响了业务的正常运行。 Springboot提供…...
新手将最简单的springboot部署上tomcat出现的意外问题
现阶段springboot部署到tomcat的文章一抓一大把且都相同,便贴一个地址以展示流程: SpringBoot打war包部署Tomcat(最全)_spring boot war 部署tomcat_聊Java的博客-CSDN博客 那么就说一下我出现的问题: 在完整复现流程且确认代码无误的情况下,部署到tomcat,此时问题出现了:启动…...
P1177 【模板】排序(Sort排序)
题目描述 将读入的 N N N 个数从小到大排序后输出。 输入格式 第一行为一个正整数 N N N。 第二行包含 N N N 个空格隔开的正整数 a i a_i ai,为你需要进行排序的数。 输出格式 将给定的 N N N 个数从小到大输出,数之间空格隔开,…...
软件测试(黑盒测试、白盒测试、灰盒测试)
软件测试方法大类上分为黑盒测试、白盒测试和灰盒测试三种 一、黑盒测试 黑盒测试通俗来说即不知道代码是怎么写的。具体实现逻辑,基于代码输入有哪些应该输出什么进行测试的方法。其方法有:基于直觉和经验的方法(IEBT)、基于需…...
昨天面试的时候被提问到的问题集合。
1、vue的双向绑定原理是什么?里面的关键点在哪里? 2、实现水平垂直居中的方式? 3、常用伪元素有哪一些? 4、移动端如何适配不同屏幕尺寸? 5、本地存储有哪一些?他们三者有什么区别? 6、JS的数据…...
广电运营商三网融合监控运维方案
随着三网融合逐步发展、深化,广电网络从为用户提供原本单一的信息服务转向了集语音、文字、图像为一体的信息服务,同时也实现了由单一独立的网络向综合性网络的改变。如何在业务的融合与竞争中创造核心竞争力,利用自身网络覆盖率上的优势&…...
数据库锁简析
数据库大并发操作要考虑死锁和锁的性能问题。用T1代表一个数据库执行请求,T2代表另一个请求,也可以理解为T1为一个线程,T2 为另一个线程。T3,T4以此类推。下面以SQL Server为例。 锁的种类 共享锁(Shared lock) 例1:T1: select…...
说说广播流与普通流
分析&回答 user actions 可以看作是事件流(普通流)patterns 为广播流,把全量数据加载到不同的计算节点。 广播流 Broadcast是一份存储在TaskManager内存中的只读的缓存数据在执行job的过程中需要反复使用的数据,为了达到数据共享&am…...
内卷的本质和大数据在计量经济学领域的运用思考
内卷的本质和大数据在计量经济学领域的运用思考 今天我们来思考两个问题: 当下经济的困局在哪里?为何内卷越来越严重?内卷的本质是什么?为何会出现内卷?市场经济运行的底层逻辑是什么?西方经济学理论的指导…...
LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明
LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造,完美适配AGV和无人叉车。同时,集成以太网与语音合成技术,为各类高级系统(如MES、调度系统、库位管理、立库等)提供高效便捷的语音交互体验。 L…...
简易版抽奖活动的设计技术方案
1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...
【WiFi帧结构】
文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成:MAC头部frame bodyFCS,其中MAC是固定格式的,frame body是可变长度。 MAC头部有frame control,duration,address1,address2,addre…...
基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容
基于 UniApp + WebSocket实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...
条件运算符
C中的三目运算符(也称条件运算符,英文:ternary operator)是一种简洁的条件选择语句,语法如下: 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true,则整个表达式的结果为“表达式1”…...
【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例
文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...
多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验
一、多模态商品数据接口的技术架构 (一)多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如,当用户上传一张“蓝色连衣裙”的图片时,接口可自动提取图像中的颜色(RGB值&…...
Qt Http Server模块功能及架构
Qt Http Server 是 Qt 6.0 中引入的一个新模块,它提供了一个轻量级的 HTTP 服务器实现,主要用于构建基于 HTTP 的应用程序和服务。 功能介绍: 主要功能 HTTP服务器功能: 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...
Spring AI 入门:Java 开发者的生成式 AI 实践之路
一、Spring AI 简介 在人工智能技术快速迭代的今天,Spring AI 作为 Spring 生态系统的新生力量,正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务(如 OpenAI、Anthropic)的无缝对接&…...
基于matlab策略迭代和值迭代法的动态规划
经典的基于策略迭代和值迭代法的动态规划matlab代码,实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...
