金融风控反欺诈之图算法

2023-11-04

先介绍下金融借贷业务流程:用户前来申请借贷,会先经过欺诈识别,把欺诈团伙和主观欺诈的个人拒绝掉,然后对通过的人做信用评估,最后根据额度模型,算出利润最大化时放款金额。

刚才提到了团队欺诈,举个真实的例子。宜人贷在他们的财报中公布的,他们被一个团伙成功撸走了2000多单,当时宜人贷的件均4w, 一下损失了8000w!!

那么如何防范这种风险呢。这就是今天要分享的图算法。图可以将这些一个个有良好记录的个体关联起来,一网打尽。

再举一些团伙欺诈的行为。比如一个团伙,注册真实的淘宝商家,然后刷出良好的淘宝购物记录。或者来回转账,刷出良好的银行流水。

刚才前两位老师都没有提到额度模型,简单介绍下,如果只给用户放款5000,可能坏账风险很小,但是利息也少,如果放款10000,利息虽然收到利息多了,但是坏账风险高岭,所以需要做个权衡

Graph简介

G=(V,E)G=(V,E)

  • V:vertex set

  • E:edge set (有向,无向,有权重和没有权重)

举例,两个人之间的联系, A给B买了东西,A和B之间的通话次数时长多于A和C之间。

  • 度中心性(Degree Centrality) - 表示连接到某节点的边数。在有向图中,我们可以有2个度中心性度量:流入和流出。一个节点的节点度越大就意味着该节点在网络中就越重要。

  • 接近中心性(Closeness Centrality) - 从某节点到所有其他节点的最短路径的平均长度。反映在网络中某一节点与其他节点之间的接近程度。

  • 介中心性(Betweenness Centrality) - 某节点在多少对节点的最短路径上。介数中心性是比较能体现节点在图中桥梁作用的中心性度量方法。介数反映了相应的节点或者边在整个网络中的作用和影响力,具有很强的现实意义。例如,在交通网络中,介数较高的道路拥挤的概率很大;在电力网络中,介数较高的输电线路和节点容易发生危险。

社团发现算法一般有:

  • 最小割, 正则化割:通过计算图的最小割,即将网络划分为预定的分组数,并使连接各分组的边的条数最少。

  • 非负矩阵分解:基本原理是将原始矩阵分解得到社区指示矩阵和基矩阵

  • 基于模块度的社区划分

  • 基于节点相似性的社区划分

最小割算法广泛应用在分布式计算的负载均衡中,对集群节点的分组有利于减少不相关节点之间的通信。然而由于该算法限定了网络最终分组的个数,而不能通过算法“发现”节点间的内在联系并自然地构成若干个社区,因此最小割算法应用较为局限。

本文主要分享这两类的主要算法,基于模块度的 louvain和基于信息熵infomap,基于相似度的node2vec

模块度(Modularity)公式及简化

优化目标:一般认为社团内部的点之间的连接相对稠密,而不同社团的点之间的连接相对稀疏。

所以模块度也可以理解是社区内部边的权重减去所有与社区节点相连的边的权重和,对无向图更好理解,即社区内部边的度数(内部的连线数)减去社区内节点的总度数。

模块度公式的解释

节点i和节点j之间边的权重,网络不是带权图时,所有边的权重可以看做是1;

表示所有与节点i相连的边的权重之和(度数);

表示节点i所属的社区;

表示所有边的权重之和(边的数目)。

其中表示社区c内的边的权重之和,表示与社区c内的节点相连的边的权重之和,即社区c节点的度之和(包含与其他社区相连边的度)。

从概率的角度去看:

 

表示实际情况下,c社区内产生边的概率。

 

表示在一种理想情况下,给定任意节点i的的度ki,对节点i和节点j进行随机连边,边属于社区c的概率期望。

 

于是上式就表示了社区内连边数与随机期望的一个差值。连边数比随机期望值越高,表明社区划分的越好。

一般使用后面简化的公式,简化后的公式删除了判断两个节点是否划为同一个社区的函数,所以在一定程度上大大减少了Q值计算量。

Louvain

Louvain算法的思想很简单:

第一阶段称为Modularity Optimization,主要是将每个节点划分到与其邻接的节点所在的社区中,以使得模块度的值不断变大;

第二阶段称为Community Aggregation,主要是将第一步划分出来的社区聚合成为一个点,即根据上一步生成的社区结构重新构造网络。重复以上的过程,直到网络中的结构不再改变为止。

移动

是社区c内节点与节点i的边权重之和,再乘以2

前面部分表示把节点i加入到社区c后的模块度,后一部分是节点i作为一个独立社区和社区c的模块度

1. 模块度与Louvain社区发现算法

http://www.cnblogs.com/fengfenggirl/p/louvain.html

2. Spark GraphX分布式图计算实战

 

infomap

从信息论的角度出发,假设一个random worker 在图上进行随机游走,那么怎么用最少的编码长度来表示其路径呢?

如果节点存在社区结构,那么社区内的节点就可以共享社区的bit位码,可以得到更小的平均比特, 所以社区划分的越好,那么表示任意一条随机游走的路径所需的平均比特就越小。

如果我们能够计算出每个节点的到达概率,就可以依据信息熵的公式来量化平均比特了:

怎么计算每个点的到达概率呢?

一个暴力的办法是在图上进行长时间的随机游走,最后统计每个节点的出现概率。太暴力了。

利用pagerank思路,初始化了每个节点的到达概率之后,就可以不断地迭代更新每个节点的到达概率,这个结果会很快趋于收敛。

其实这过程就是一个马尔科夫随机过程,随机初始化起始值,然后随机游走就相当于不停地用概率转移矩阵相乘,最后就可以达到马尔科夫稳态。

把随机游走事件归为三类:进入某个社团,离开某个社团,再社团内部游走。

定义清楚各类事件的发生概率,依据信息熵公式,就可以得到此时编码所需的平均比特了,其本质就是从信息论的角度出发。

 

Infomap算法的迭代过程

  1. 初始化,对每个节点都视作独立的社区;

  2. while 平均比特的值不再下降;

  3. 对图里的节点随机采样出一个序列,按顺序依次尝试将每个节点赋给邻居节点所在的社区,取平均比特下降最大时的社区赋给该节点,如果没有下降,该节点的社区不变。

参考链接

1. The map equation

http://www.mapequation.org/apps/MapDemo.html

2. https://mp.weixin.qq.com/s/qUxMesQA-edSyHeudQRRGA

3. DEEP GRAPH INFOMAX 阅读笔记

https://zhuanlan.zhihu.com/p/58682802

Graph embeddings

Deepwalk

  1. 使用随机游走(RandomWalk)的方式在图中进行节点采样获得节点共关系,

  2. 使用skip-gram,根据步骤1中生成的节点序列学习每个节点的向量表示。skip-gram就是根据给定输入的节点,预测上下文节点。

Deepwalk有多不足,比如泛化能力,有新节点加入时,它必须重新训练模型以表示该节点。

其中一个就是采样,从其邻居中随机采样节点作为下一个访问节点,是一种可重复访问已访问节点的深度优先遍历算法。

node2vec是一种综合考虑DFS邻域和BFS邻域的graph embedding方法

node2vec

这个node2vec优化目标函数,因为它跟大名鼎鼎的word2vec是一样。

我们最初是用一个Python写的包,跑一遍算法需要一周。后来想,既然优化目标是一样的,那能不能用word2vec包,因为word2vec用c写的,而且还采用了 Hierarchical Softmax,negative sampling加速。

然后在网上找到了一个套用word2vec实现的node2vec包,速度快很多。

随机游走的方式

复杂网络处理的任务其实离不开两种特性,前面也提到过:一种是同质性,就是之前所说的社区。一种就是结构相似性,值得注意的是,结构相似的两个点未必相连,可以是相距很远的两个节点。

能不能改进DeepWalk中随机游走的方式,使它综合DFS和BFS的特性呢?所以本文引入了两个参数用来控制随机游走产生的方式。

 

Z是分子的归一化常数

如果已经采样了 (t,v) ,也就是说现在停留在节点v上,那么下一个要采样的节点x是哪个?作者定义了一个概率分布,也就是一个节点到它的不同邻居的转移概率:

直观的解释一下这个分布:

简而言之:

参数p控制重复访问刚刚访问过的顶点的概率,

参数q控制着游走是向外还是向内,若q>1,随机游走倾向于访问和t接近的顶点(偏向BFS)。若q<1,倾向于访问远离t的顶点(偏向DFS)。

缺点

  1. 先embedding再聚类,感觉这两个过程很割裂!!融合一下

comE

Graphembedding得到向量后,可以做很多事情,在我们这个主题可以简单的通过聚类来讲节点分组。

但是这个过程比较割裂,先优化node2vec,然后再优化聚类。能不能整体上一次性优化完呢。

comE这个算法优化目标中加入了社区的检测和嵌入。通过一个混合高斯模型将节点划分开。

优化目标中前面两项跟LINE定义的相似度相似:

1. https://blog.csdn.net/u012151283/article/details/87013915

2. Learning Community Embedding with Community Detection and Node Embedding on Graphs

https://zhuanlan.zhihu.com/p/36924789

3. Learning Community Embedding with Community Detection and Node Embedding on Graphs

https://github.com/vwz/ComE

4. http://sentic.net/community-embedding.pdf

评价指标

Modularity

标准化互信息 NMI ( Normalized Mutual Information )

实时社区发现

1. 基于个体稳定度博弈的动态社区发现算法研究

http://www.deliwenku.com/p-84779.html

2. 基于标签传播的实时社区发现算法研究

http://www.doc88.com/p-1055432963471.html

3. 基于 spark streaming 的动态社区发现及其在个性化推荐应用中的研究

http://www.doc88.com/p-6991331093268.html

4. 一种基于局部模块度的增量式动态社区发现算法

http://www.doc88.com/p-9146960189736.html

5. 基于标签传播的实时社区发现算法研究

http://www.doc88.com/p-1055432963471.html

6. 图流合璧——基于Spark Streaming和GraphX的动态图计算

https://wenku.baidu.com/view/fa65268159eef8c75fbfb3a6.html?re=view

参考佳文

1. 深度学习时代的图模型,清华发文综述图网络

2. 社区发现(Community Detection)算法

https://blog.csdn.net/cleverlzc/article/details/39494957

3. 社区发现算法FastUnfolding的GraphX实现

http://www.aboutyun.com/forum.php?mod=viewthread&tid=19817

4. 谱聚类(spectral clustering)原理总结

https://www.cnblogs.com/pinard/p/6221564.html

5. GraphWave:一种全新的无监督网络嵌入方法

6. 社团划分结果评估指标:Q、ARI、NMI

https://blog.csdn.net/DreamHome_S/article/details/78167267

7. 论文解读:从乌合之众到群体智慧的一步之遥

8. 2017CIKM-Network Embedding专题论文分享

https://yq.aliyun.com/articles/294450

9. node2vec: Scalable Feature Learning for Networks 

https://www.jianshu.com/p/a9a2ed8b98be

10. node2vec: Scalable Feature Learning for Networks 

https://arxiv.org/pdf/1607.00653.pdf

11. node2vec: Scalable Feature Learning for Networks 阅读笔记

https://zhuanlan.zhihu.com/p/30599602 

12. 基于PageRank的复杂网络社区发现

https://blog.csdn.net/qq_32284189/article/details/80827899

13. Modularity的计算方法——社团检测中模块度计算公式详解

http://www.yalewoo.com/2017/03/10/modularity_community_detection/

14. 社区发现算法 - Fast Unfolding(Louvian)算法初探

https://www.cnblogs.com/LittleHann/p/9078909.html

15. 论文 | 蚂蚁金服亮相数据挖掘顶会KDD 2018,这些你不可错过!

作者介绍:

张行军,Abakus高级风控算法经理。曾先后工作于百度、360等公司。

转发:https://mp.weixin.qq.com/s?__biz=MzU1NTMyOTI4Mw==&mid=2247489851&idx=1&sn=8b214e028188b176b6acc8533af4e1a6&chksm=fbd4ab57cca3224162fc762eb5dcb8cb6013dcf28b96c928d9d3c1d5e6898525b8425552d65a&mpshare=1&scene=23&srcid=#rd

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

金融风控反欺诈之图算法 的相关文章

  • 第21章_瑞萨MCU零基础入门系列教程之事件链接控制器ELC

    本教程基于韦东山百问网出的 DShanMCU RA6M5开发板 进行编写 需要的同学可以在这里获取 https item taobao com item htm id 728461040949 配套资料获取 https renesas do
  • C语言详解系列——循环语句详解(1)while语句的语法结构

    文章目录 while语句 break continue while语句 之前的学习中我们了解到了if语句的用法 这个语句只会执行一次 但在我们的生活当中有许多事情是需要重复去做的 那我们应该怎么实现呢 C语言当中给我们引入了 while语句
  • Day 9

    1 在主函数定义一维数组并赋值 要求 定义函数实现冒泡排序 有参无返函数 定义函数实现输出 有参无返函数 include
  • CPU负载怎么理解?是不是CPU利用率?

    http www hackbase com tech 2011 08 16 64970 html 昨天查看Nagios警报信息 发现其中一台服务器CPU负载过重 机器为CentOS系统 信息如下 2011 2 15 星期二 17 50WAR
  • 这应该是最全的,Fiddler手机App抓包详解,看完还不会来找我...

    目录 导读 前言 一 Python编程入门到精通 二 接口自动化项目实战 三 Web自动化项目实战 四 App自动化项目实战 五 一线大厂简历 六 测试开发DevOps体系 七 常用自动化测试工具 八 JMeter性能测试 九 总结 尾部小
  • [转自华尔街的强帖]怎样才能嫁给有钱人

    一个年轻漂亮的美国女孩在美国一家大型网上论坛金融版上发表了这样一个问题帖 我怎样才能嫁给有钱人 我下面要说的都是心里话 本人 25 岁 非常漂亮 谈吐文雅 有品位 想嫁给年薪 50 万美元的人 你也许会说我贪心 但在纽约年薪 100 万才算
  • YOLOV7详细解读(三)技术要点归纳

    YOLOV7技术要点归纳 技术要点归纳 YOLOV7技术要点归纳 前言 一 YOLOV7是什么 二 论文贡献 三 相关工作 四 网络架构 五 重参数化 六 模型缩放 七 E ELAN 结构图 分组卷积 八 损失函数 九 动态标签分配策略 步

随机推荐

  • Kubernetes Deployment

    Deployment是Kubernetes1 2引入的新概念 引入的目的是为了更好的解决Pod的编排问题 为此Deployment内部使用了Replica Set来实现目的 Deployment 相对于RC的一个最大升级是我们可以随时知道当
  • 使用Rider断点调试lua代码

    记录一下 新建调试配置 在 Rider 工具栏的 Debug Config 中点击 Editor Configigurations 然后点击 号 新建一个 Emmy Debugger NEW 输入调试器名字为 Tcp Debugger co
  • Linux中cmake指定特定版本gcc

    最近因为服务器上有多个gcc 编译llvm的时候需要使用5 1以上的 但是由于默认目录 usr bin下的gcc是4 8 5 在另外的目录下有一个7 3 1的 cmake默认使用老版本的gcc 导致cmake失败 报错 输入which gc
  • websocked基础

    websocked基础 http与websocked区别 http websocked websocked特点 如何使用websocked 补充blob对象或Arraybuffer对象 http与websocked区别 http 只能由客户
  • cannot find reference ‘keras’ in ‘__init__.py‘

    文章目录 起因 原因 解决办法 参考来源链接 起因 在网上找了开源代码 之前看的都是jupyter notebook编写的 今天用pycharm调试一个开源程序 发现总是不能调试 检查了好几遍编译环境都没问题 运行正常 就是不能调试 报错是
  • 早期计算机语言称为,程序设计语言是软件的基础和组成部分,也称为计算机语言...

    原标题 程序设计语言是软件的基础和组成部分 也称为计算机语言 程序是对计算任务的处理对象和处理规则的描述 必须装入计算机内部才能工作 没有操作系统 系统无用 程序设计语言是软件的基础和组成部分 也称为计算机语言 定义计算机程序的语法规则 由
  • torch.nn.Linear()函数讲解

    函数讲解 in features指的是输入的二维张量的大小 即输入的 batch size size 中的size out features指的是输出的二维张量的大小 即输出的二维张量的形状为 batch size output size
  • 【Matlab】智能优化算法_灰狼优化算法GWO

    Matlab 智能优化算法 灰狼优化算法GWO 1 背景介绍 2 基本思想 2 1 等级制度 2 2 狩猎方式 3 公式推导 3 1 社会等级制度 3 2 包围猎物 3 3 包围猎物 3 4 攻击猎物 3 5 搜索猎物 4 算法流程图 5
  • 史上最详细springboot vue UEditor整合(包括遇到的各种坑)

    Vue中引入UEditor看这篇教程https blog csdn net kshon article details 102667318 接下来说说springboot中配置UEditor遇到的各种坑 1 将UEditor中目录下的con
  • IM即时通讯-推荐框架

    CIM https gitee com farsunset cim CIM是一套基于mina或netty框架下的推送系统 或许有一些企业有着自己一套即时通讯系统的需求那么CIM为您提供了一个解决方案 目前CIM支持websocket and
  • java map取第一个元素_java常用对象Map集合中关于取出元素的说明

    之前在上一篇 java常用对象API中集合框架之Map的用法 文章中简单的例举了一些Map集合中的一些简单方法和一些常用的子类 那么本章将对例举的方法和子类进行一一的详细说明和举例 这样也是为了让更多的朋友们学习java能够得到另一种启发而
  • 将手机、平板变成电脑第二屏

    将手机 平板变成电脑第二屏 过年回家了 带着大包小包 显示器总不能再带在身上吧 常年双屏使用者 当没有了双屏 感觉很难受 于是找到了开源项目deskreen Deskreen 是一款桌面应用程序 可以通过 WiFi 局域网下 将任何带有浏览
  • 华为OD机试 Python 【恢复数字序列】

    描述 给你一个由正整数拼接而成的字符串 但中间有些字符位置被打乱了 比如原来有 89101112 它可能被打乱为 90811211 这时整数10就变成了0和1两部分 请你找出原始字符串中的最小正整数是什么 输入 一行 包括被打乱的字符串和原
  • RabbitMQ 消息丢失的场景,如何保证消息不丢失?

    一 RabbitMQ消息丢失的三种情况 第一种 生产者弄丢了数据 生产者将数据发送到 RabbitMQ 的时候 可能数据就在半路给搞丢了 因为网络问题啥的 都有可能 第二种 RabbitMQ 弄丢了数据 MQ还没有持久化自己挂了 第三种 消
  • 【C#】.Net 腾讯云一句话识别 【实例】

    腾讯云一句话识别实例 using System using System Threading Tasks using TencentCloud Common using TencentCloud Common Profile using T
  • 编写高质量代码:改善Java程序的151个建议(第10章:性能和效率,第11章:开源世界,第12章:思想为源___建议132~151)...

    第10章 性能和效率 建议132 提升Java性能的基本方法 建议133 若非必要 不要克隆对象 建议134 推荐使用 望闻问切 的方式诊断性能 建议135 必须定义性能衡量标准 建议136 枪打出头鸟 解决首要系统性能问题 建议137 调
  • 素数筛【朴素,埃氏,欧拉】(持续优化ing)

    一 朴素筛法 定义部分说明 int prime 11000 存素数 int ans 0 计数 计prime数组中有多少个素数 代码实现部分 void getPrime int n prime ans 2 for int i 3 i lt n
  • Docker开发指南(自用)

    Docker开发指南 自用 本指南总结归纳菜鸟教程上的常用指令 并在文末给出了一个应用实例 序言 Docker是什么 Docker 是一个开源的应用容器引擎 基于 Go 语言 并遵从 Apache2 0 协议开源 Docker 可以让开发者
  • 【C语言练习题】计算1 * 2 * 3+3 * 4 * 5+5 * 6 * 7+...+99 * 100 * 101的值。

    计算1 2 3 3 4 5 5 6 7 99 100 101的值 错误版本 循环结束后仍执行i i 多余 include
  • 金融风控反欺诈之图算法

    先介绍下金融借贷业务流程 用户前来申请借贷 会先经过欺诈识别 把欺诈团伙和主观欺诈的个人拒绝掉 然后对通过的人做信用评估 最后根据额度模型 算出利润最大化时放款金额 刚才提到了团队欺诈 举个真实的例子 宜人贷在他们的财报中公布的 他们被一个