金融风控10

news2024/11/16 8:01:20

深度学习与金融风控

反欺诈生命周期

第一层设备与网络

- 代理检测

- IDC检测

- 模拟器/虚拟机检测

- 木马检测

第二层用户行为

- 注册行为

- 登录行为

- 交易行为

- 事件行为

- 时间间隔异常

第三层业务频次

- 注册频次

- 登录频次

- 交易频次

- 地域频次

- 时间间隔频次

第四层业务异常

- 注册异常

- 登录异常

- 交易异常

- 地域异常

- 时间段异常

第五层诈骗团伙图谱

- 羊毛党发现

- 代理池发现

- 羊毛党设备发现

- 肉鸡网络发现

- 跨应用欺诈团伙

反欺诈规则的缺点  

反欺诈一般通过两种方式,一种是设定规则,另一种是通过算法。

规则在反欺诈实践中应用也较多,但是缺点也明显,主要表现为:  

- 策略性较强,命中直接拒绝,而且黑名单本身的误伤性也较强;  

- 无法给出用户的欺诈风险有多大;  

- 未考虑用户从信用风险向欺诈风险的转移,尤其是在行业不景气时。  

以上缺点机器学习可以进行有效的避免,如可计算用户的欺诈概率有多大,从而采取一定的措施争取客户,而不是直接拒绝,同时也可以通过模型计算用户从信用风险转移为欺诈风险的概率,从而金融机构可及时进行风险控制与准备。

深度学习风控场景

序列数据建模:代表算法LSTM

图谱建模:代表算法Word2Vec Node2Vec GCN

传统特征衍生:CNN XDeepFM

循环神经网络

(Recurrent Neural Network,RNN)通常应用在自然语言处理、语音识别等领域,是一个拥有对时间序列显示建模能力的神经网络。

代表场景是拥有顺序的序列数据:B卡,盗号检测,失联模型,文本分类

异常的行为隐藏在行为序列中,总会找到蛛丝马迹。我们把一个时间段内的所有行为按先后顺序给机器学习,在学习大量样本后,它就能找出其中的细微差别,这就是RNN时间序列算法对于金融的价值所在。

为什么要LSTM?

因为简单的RNN很容易就发生梯度消失和梯度爆炸,其中主要的原因是RNN中求导,引起的链式法则,对时间上的追溯,很容易发生系数矩阵的累乘,矩阵元素大于1,那么就会发生梯度爆炸;矩阵元素小于1,就会发生梯度消失。

LSTM通过门的控制,可以有效的防止梯度消失,但是依旧可能出现梯度爆炸的问题,所以训练LSTM会加入梯度裁剪(Gradient Clipping)。

- 记忆门

- 遗忘门

- 输出门

为什么要用BiLSTM

Bi代表双向。其实使用BiLSTM还是蛮有争议,因为人类理解时序信号的默认顺序其实是时间流逝的顺序,那么将时间倒叙的信号还有没有意义?有人说有,譬如说看一个人写一个字的具体笔画顺序其实不影响我们猜测这个字;有人说没有,倒着听一个人说话就不行。不管有什么争议,但是架不住BiLSTM在实际应用中效果十有八九好于LSTM,所以就用吧。

具体双向LSTM的结构其实相当简单,就是两个单向LSTM各自沿着时间和网络层向前传播,然后最后的输出拼接在一起。

rom torch import nn

class BLSTM(nn.Module):

    """

        Implementation of BLSTM Concatenation for sentiment classification task

    """

    def __init__(self, embeddings, input_dim, hidden_dim, num_layers, output_dim, max_len=40, dropout=0.5):

        super(BLSTM, self).__init__()
        self.emb = nn.Embedding(num_embeddings=embeddings.size(0),
                                embedding_dim=embeddings.size(1),
                                padding_idx=0)
        self.emb.weight = nn.Parameter(embeddings)
        
        self.input_dim = input_dim
        
        self.hidden_dim = hidden_dim
        
        self.output_dim = output_dim
        
        # sen encoder
        self.sen_len = max_len
        
        self.sen_rnn = nn.LSTM(input_size=input_dim,

                               hidden_size=hidden_dim,

                               num_layers=num_layers,

                               dropout=dropout,

                               batch_first=True,

                               bidirectional=True)

        self.output = nn.Linear(2 * self.hidden_dim, output_dim)

    def bi_fetch(self, rnn_outs, seq_lengths, batch_size, max_len):

        rnn_outs = rnn_outs.view(batch_size, max_len, 2, -1)

        # (batch_size, max_len, 1, -1)

        fw_out = torch.index_select(rnn_outs, 2, Variable(torch.LongTensor([0])).cuda())

        fw_out = fw_out.view(batch_size * max_len, -1)

        bw_out = torch.index_select(rnn_outs, 2, Variable(torch.LongTensor([1])).cuda())

        bw_out = bw_out.view(batch_size * max_len, -1)

        batch_range = Variable(torch.LongTensor(range(batch_size))).cuda() * max_len

        batch_zeros = Variable(torch.zeros(batch_size).long()).cuda()

        fw_index = batch_range + seq_lengths.view(batch_size) - 1

        fw_out = torch.index_select(fw_out, 0, fw_index)  # (batch_size, hid)

        bw_index = batch_range + batch_zeros

        bw_out = torch.index_select(bw_out, 0, bw_index)

        outs = torch.cat([fw_out, bw_out], dim=1)

        return outs

    def forward(self, sen_batch, sen_lengths, sen_mask_matrix):

        """
        :param sen_batch: (batch, sen_length), tensor for sentence sequence

        :param sen_lengths:

        :param sen_mask_matrix:

        :return:

        """

        ''' Embedding Layer | Padding | Sequence_length 40'''

        sen_batch = self.emb(sen_batch)

        batch_size = len(sen_batch)

        ''' Bi-LSTM Computation '''

        sen_outs, _ = self.sen_rnn(sen_batch.view(batch_size, -1, self.input_dim))

        sen_rnn = sen_outs.contiguous().view(batch_size, -1, 2 * self.hidden_dim)  # (batch, sen_len, 2*hid)

        ''' Fetch the truly last hidden layer of both sides

        '''
        sentence_batch = self.bi_fetch(sen_rnn, sen_lengths, batch_size, self.sen_len)  # (batch_size, 2*hid)

        representation = sentence_batch

        out = self.output(representation)

        out_prob = F.softmax(out.view(batch_size, -1))

        return out_prob

 卷积神经网络

CNN中的卷积本质上就是利用一个共享参数的过滤器(kernel),通过计算中心像素点以及相邻像素点的加权和来构成feature map实现空间特征的提取,加权系数就是卷积核的权重系数。

场景:用于有拓扑关系的数据上

将可以求和的数据展开成feature-map的样子即可做卷积,从而实现特征交叉,挖掘更深层次的特征

深度学习另一个非常重要的领域——知识图谱

word2Vec

word2vec基本流程

 

如何在图上找临近节点?如何生成节点序列?

1、广度优先遍历

 

2、深度优先遍历 

随机游走Random walk

随机漫步(Random Walk)思想最早由Karl Pearson在1905年提出,它是一种不规则的变动形式,在变动过程当中的每一步都是随机的。假如我们有下面这样一个小的关系网络。

 

 

node2vec

可以改善random walk,更好地反映同质性与结构相似性  

以下图为例,选择 t 为初始节点,并引入两个参数 p和q  

返回概率参数(Return parameter)p,对应BFS,p控制回到原来节点的概率,如图中从t跳到v以后,有1/p的概率在节点v处再跳回到t  

离开概率参数(In outparameter)q,对应DFS,q控制跳到其他节点的概率  

 

 

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

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

相关文章

计算机组成原理笔记记录(第二章)

次为笔记记录&#xff0c;原视频链接为B站视频链接&#xff0c;若有错误请指出&#xff0c;看到就会改正 进制 r进制数及其转换成十进制数 r^n就是第n位的维权,n<0就是小数部分的位权。 例子:1011 为十进制的时候:10111103010211011100 为二进制的时候 1011123022121120(10…

Scipy误差函数详解

文章目录误差函数简介复平面上的误差函数与误差函数相关的函数误差函数简介 误差函数的实质是正态分布的概率&#xff0c;其重要性可见一斑&#xff0c;其表达式为 erf⁡2π∫0xe−t2dt\operatorname{erf}\frac{2}{\sqrt{\pi}}\int^x_0e^{-t^2}\text dt erfπ​2​∫0x​e−t2…

vue老项目增加提交格式化功能[eslint+prettier+husky+lint-staged]

一、当前项目情况说明 当前项目是已经开发迭代很久的项目&#xff0c;之前因为需求紧急&#xff0c;所以没有对代码格式话进行规范要求&#xff0c;导致每个开发人员提交的代码格式千差万别&#xff0c;增加了阅读难度及后期的维护成本&#xff0c;如果直接run lint&#xff0…

网络拓扑七大类型:总线、环形、星形、网状、树形、点对点、混合,我背的滚瓜烂熟!

大家好&#xff0c;这里是网络技术联盟站。 在网络世界中&#xff0c;经常会看到各种各样的网络拓扑&#xff0c;网络拓扑主要就是描述网络中各个元素的对应关系&#xff0c;那么网络中包含哪些类型的拓扑呢&#xff1f; 如上图所示&#xff0c;网络拓扑一般有两大类型&#x…

JS---数组的方法

一、方法 1.1、Pushing和Poping arr.push(1)&#xff1a;往arr数组的最后面压入1&#xff0c;push() 方法返回新数组的长度。 var fruits ["Banana", "Orange", "Apple", "Mango"]; fruits.push("Kiwi"); // fruits …

Ruoyi-Cloud框架学习-【04 用户登录】

前端 路由配置在router/index.js里 首页在views/index.vue4 前端端口与后台端口在vue.config.js里定义 vue.config.js 前台端口 后台端口 Ruoyi-Cloud登录流程 Login.vue 定义了登录handlerlogin&#xff0c;具体方法调用modules/user.js store/index.js 调用了modul…

【Stm32杂谈】:Stm32F103野火指南针开发板红外遥控程序问题记录和解析(个人理解)

项目场景&#xff1a; 最近在使用Stm32F103野火指南针开发板开发红外遥控外设得时候&#xff0c;用得是野火得开发板&#xff0c;本来发现应该很简单的事情&#xff0c;官方也很贴切的提供了官方例程。但是居然有问题&#xff0c;无法正常使用。 于是这篇文章应运而生&#xff…

环保数采仪 5G无线环保数采仪 智能环保数采仪

计讯物联智能环保数采仪&#xff0c;无线远距离数据传输、采集、控制、存储。支持全网通5G/4G移动网络、北斗、有线通信&#xff0c;数据上报云监控中心&#xff0c;支持GPS定位分散设备远程统一管理。支持环保协议&#xff0c;对接各省市县级监管平台&#xff0c;广泛应用于废…

Kubernetes集群搭建

Kubernetes集群搭建 目录 前言前期准备K8S集群安装 虚拟机设置安装K8S集群k8s部署Nginx 附录1 Docker安装附录2 yum k8s 问题附录3 k8s start问题附录4 k8s master init附录5 node节点添加进集群失败&#xff0c;可以删除节点重新添加 前言 本文指定Docker与K8s版本&#xf…

DynaSLAM-3 DynaSLAM中Mask R-CNN部分源码解析(Ⅱ)

目录 1.FPN 1.1 FPN层原理 1.2 FPN代码解析 2. 候选框的生成 2.1 根据特征图生成候选框 1.FPN 1.1 FPN层原理 在Faster R-CNN网络中&#xff0c;提取特征的时候&#xff0c;将原始数据经过一系列的卷积层&#xff0c;我们只用最后一层的特征图进行提取。 比如五层卷积神经…

C++(36)-VS2019- 动态库调用

1.被调用的动态库 MyDll 2.调用的可执行文件 MyExe 源码实例链接&#xff1a;MFC-VS2019-EXE调用DLL-demo.zip-C代码类资源-CSDN下载 1.MyDll 1.1 MyDll头文件&#xff1a;MyDll.h 声明此动态库为导出动态库。 声明导出函数。 #pragma once#define MYDECLARE_PUB…

【05】FreeRTOS的中断管理

目录 1.什么是中断 2.中断优先级分组 2.1中断优先级分组-介绍 2.2中断优先级分组-配置 2.3中断优先级分组-特点 3.中断相关寄存器 3.1寄存器地址 3.2在FreeRTOS中配置PendSV和Systick中断优先级 3.3中断相关寄存器 4.FreeRTOS中断管理实验 4.1修改freertos_demo.c …

2023.1.30作业-【尝试移植TF-A】

1、解压源码&#xff0c;进入目录如图一 2、解压源码包 3、进入解压后的目录&#xff0c;打入官方补丁 4、查看SD卡的分区&#xff0c;发现正常无需重新分区 5、导入编译工具查看是否正常导入 6、添加设备树等相关文件 7、修改上层目录下的 Makefile.sdk中添加 stm32mp157a-fsm…

chatGPT模型简介

ChatGPT的工作原理 chatGPT 是一款由 OpenAI 开发的聊天机器人模型&#xff0c;它能够模拟人类的语言行为&#xff0c;与用户进行自然的交互。它的名称来源于它所使用的技术—— GPT-3架构&#xff0c;即生成式语言模型的第3代。 chatGPT的核心技术是 GPT-3 架构。它通过使用大…

vue 自动生成swagger接口请求文件

前端: vue-element-admin 后端: .net core (6.0) 找了很多自动生成的代码的&#xff0c;感觉不太行&#xff0c;可能是我不太懂。所以自己根据swagger.json去生成了js请求文件。 后端很简单&#xff0c;就不说了&#xff0c;只要能访问到swagger的地址就可以&#xff0c;主要…

【My Electronic Notes系列——低频功率放大器】

目录 序言&#xff1a; &#x1f3c6;&#x1f3c6;人生在世&#xff0c;成功并非易事&#xff0c;他需要破茧而出的决心&#xff0c;他需要永不放弃的信念&#xff0c;他需要水滴石穿的坚持&#xff0c;他需要自强不息的勇气&#xff0c;他需要无畏无惧的凛然。要想成功&…

【自学Docker】Docker rename命令

Docker rename命令 大纲 docker rename命令教程 docker rename 命令可以用于重命名一个 Docker容器。docker rename命令后面的 CONTAINER 可以是容器Id&#xff0c;或者是容器名。 docker rename语法 haicoder(www.haicoder.net)# docker rename CONTAINER NEW_NAME案例 重…

【Kubernetes 企业项目实战】05、基于云原生分布式存储 Ceph 实现 K8s 数据持久化(下)

目录 一、K8s 对接 ceph rbd 实现数据持久化 1.1 k8s 安装 ceph 1.2 创建 pod 挂载 ceph rbd 二、基于 ceph rbd 生成 pv 2.1 创建 ceph-secret 2.2 创建 ceph 的 secret 2.3 创建 pool 池 2.4 创建 pv 2.5 创建 pvc 2.6 测试 pod 挂载 pvc 2.7 注意事项 1&#xf…

软考高项—第一章信息系统项目管理基础

项目特点 1、临时性&#xff1a;有明确的开始时间和结束时间 2、独特的产品、可交付成果 3、逐步完善&#xff1a;项目团队从开始的粗略计划到详细计划&#xff0c;在到完成项目 4、资源约束&#xff1a;每个项目都需要各种资源保证&#xff0c;资源是有限的 5、目的性&#x…

C语言重点复习大纲

目录数据存储(3星)判断大小端写一个函数判断大小端截断与整形提升数组和指针(5星)几个特殊的指针数组传参字符串数组库函数的实现(4星)atoi与itoamemcpy与memmove内存重叠自定义类型(4星)内存对齐结构体&#xff0c;联合体&#xff0c;枚举位段编译链接(3星)编译和链接的过程条…