金融风控项目复盘

目标:基于知识图谱,搭建一个二分类风控模型,来预测一个借款申请进件是否会逾期。

本项目提供了以下的数据文件:
—person.txt:申请人实体数据3000条, 包含了每个申请人的属性,包括姓名、年龄、电话、黑白名单标志等字段
—phone.txt:电话号码实体数据20000条,每一件记录标记给定的电话号码是否在黑名单里
—phone2phone.txt:通话记录关系数据163万,详细的通话记录,包括主叫、被叫、通话开始时间和结束时间等字段
—apply_train.txt:进件信息实体数据5590条,模型训练样本集,最后一个字段是进件的状态,这个数据用于训练模型
—apply_test.txt:进件信息实体数据1400条,模型测试集,里面没有进件状态,这个数据用于测试模型

对数据中的几个属性做简单说明:
—amount:申请人所申请的贷款额度
—term:还贷期限(比如20个月)
—status:进件状态,对于一个进件,可能有多种状态,OVERDUE(逾期),IN_PROGRESS(正在审核中),RETURNING(偿还中),REPAID(已偿还)。为了方便起见,我们把OVERDUE以外的状态都看成正常状态。
—flag:黑/白名单标志
—apply_train.txt中的applicant申请人ID字段,是与person.txt中的申请人ID相对应的
—phone.txt中的电话号码部分存在于person.txt中(即phone.txt中的电话号码与person.txt中的电话号码有部分交集)

题目:请根据给定的上述数据,搭建知识图谱,根据图谱设计一套有效的风控特征,然后利用提取出的特征向量,选择合适的二分类(逾期/非逾期)预测算法,训练出分类模型,并用该模型对测试数据进行分类,给出测试结果,以及模型的衡量指标结果。

具体建模流程

  1. 导入mysql并分析数据,分析其中的关系得:
    (1) people节点与apply节点之间有fill关系;
    (2)apply节点与phone节点之间有parent_phone、colleague_phone、company_phone等关系;
    (3)people与phone之间有has_phone的关系;
    然后通过上述关系,进而可推得如下的关系:
    (4)parent_phone的持有人与进件的申请人为parent_of关系,同理可推得colleague_of关系;
    (5)通过通话记录可推得两个people节点之间的known关系。
    知识图谱关系图:金融风控项目复盘_第1张图片
  2. 数据清洗处理 (pre_deal_data.py)
    查看是否有缺失值,异常值,对其进行处理
  • 删除:针对缺失值所在行(前提是缺失行的比例非常低,如5%以内) 或删除缺失值所对应变量(前提是该变量中包含的缺失值比例非常高,如70%左右)
  • 替换:用均值、中位数、众数进行替换。处理缺失值速度快,但容易产生有偏估计,准确率下降。
  • 插补法:利用有监督的机器学习方法(如回归模型、树模型、网络模型等)对缺失值作预测,其优势在于预测的准确性高,缺点是需要大量的计算,导致缺失值的处理速度大打折扣
    本课题针对count=0的异常值,用平均值进行替换
  1. 用networkx构建知识图谱,得到一个进件人关系图
    以电话为实体,以电话是否是黑名单为实体属性构建知识图谱
    电话————call(通话时长)————电话
    进件人电话————parent of————父母电话
    进件人电话————collegue of————同事电话
    进件人电话————company of————公司电话

  2. 提取特征
    4.1 使用node2vec将知识图谱得关系用向量表示

deepwork类似word2vec利用节点和节点得共现关系来学习节点的向量表示。通过随机游走randowalk的方式在途中进行节点采样。
randwork 重复访问已访问节点的深度有限遍历算法

node2vec的思想同DeepWalk一样:生成随机游走,对随机游走采样得到(节点,上下文)的组合,用处理词向量的方法对这样的组合建模得到网络节点的表示。不过在生成随机游走过程中做了一些创新。分析了两种图的游走方式,深度优先游走(Depth-first Sampling,DFS)和广度优先游走(Breadth-first Sampling,BFS)
BFS反映的是邻近性,节点在图上的距离越近越好
DFS反映的是同构性,两个节点周围结构越相似,则越相近
金融风控项目复盘_第2张图片
金融风控项目复盘_第3张图片
金融风控项目复盘_第4张图片

4.2 提取特征(33个特征)
对图节点向量进行处理,提取关于每个进件id实体的向量,PCA降维
业务特征:金额,周期归一化,性别 onehot
将status overdue为1,否则为0 作为训练标签
申请人进件逾期数、申请人标识,父母同事公司黑名单标识
从知识图谱中提取进件人一、二维关系人数及其黑名单数
通话次数

  1. 非平衡数据集处理
    5.1欠采样:可以生成更简洁的平衡数据集,并减少学习成本,但会删除一些有用的样本
    5.2过采样:通过复制少类别样本的方法处理非平衡数据集,容易产生过拟合

    解决:
    采样smote算法:
    a. 对于少数类中的每一个样本X,以欧氏距离为标准计算它到少数类样本集中所有的样本的距离,得到其K近邻
    b. 据样本不平衡比例设置一个采样比例以确定采样倍率N,对于每一个少数样本X,从其K近邻中随机选取若干样本,假设选择的近邻为Xn
    c. 对于每一个随机选取的近邻Xn,分别与原样本按照如下的公式构建新的样本
    在这里插入图片描述
    实际上就是对每个少数类样本a,从它的最近邻中随机选一个样本b,然后在a、b之间的连线上随机选一点作为新合成的少数类样本。
    金融风控项目复盘_第5张图片
    6 选取模型
    6.1 xgboost + smote

Xgboost是Boosting算法的其中一种,Boosting算法的思想是将许多弱分类器集成在一起,形成一个强分类器。因为Xgboost是一种提升树模型,所以它是将许多树模型集成在一起,形成一个很强的分类器。而所用到的树模型则是CART回归树模型。
优点:
(1)正则化:Xgboost在代价函数里加入了正则项,用于控制模型的复杂度。防止过拟合
(2)并行处理:每一颗树的构造都依赖于前一棵树,决策树学习最耗时的一个步骤就是对特征的值进行排序,xgboost在训练前预先对特征进行了排序,然后保存为block结构,便于后边重复使用,减少计算量,也正是这个block结构使并行成为可能,在进行节点分类的时候计算每个特征的增益,最终选择最大的去做分裂,每个特征的增益计算可以开多线程进行
(3)灵活性:支持用户自定义目标函数和评估函数
金融风控项目复盘_第6张图片
金融风控项目复盘_第7张图片
(4)缺失值处理:对于特征的值有缺失的样本,Xgboost可以自动学习出他的分裂方向。Xgboost内置处理缺失值的规则。
(5) 剪枝:Xgboost先从顶到底建立所有可以建立的子树,再从底到顶反向机芯剪枝,比起GBM,这样不容易陷入局部最优解
(6) 交叉验证:Xgboost允许在每一轮Boosting迭代中使用交叉验证。因此可以方便的获得最优Boosting迭代次数,而GBM使用网格搜索,只能检测有限个值。

6.2 随机森林

集成学习有两个流派,一个是boosting,特点是各个弱学习器之间有依赖关系;一个是bagging,特点是各个弱学习器之间没依赖关系,可以并行拟合。bagging的结合策略也比较简单,对于分类问题,通常使用简单投票法,得到最多票数的类别或者类别之一为最终的模型输出。对于回归问题,通常使用简单平均法,对T个弱学习器得到的回归结果进行算术平均得到最终的模型输出。金融风控项目复盘_第8张图片

RF使用了CART决策树作为弱学习器,这让我们想到梯度提升树GBDT。
在决策树的基础上,RF对决策树的建立做了改进,对于普通的决策树,我们会在节点上所有的n个样本特征中选择一个最优的特征来做决策树的左右子树划分,但是RF通过的随机选择节点上的一部分样本特征,这个数字小于n,假设为nsub,然后在这些随机选择的nsub(小于n)个样本特征中,选择一个最优的特征来做决策树的左右子树划分。这样进一步增强了模型的泛化能力。
金融风控项目复盘_第9张图片

RF的主要优点有:
(1) 训练可以高度并行化,对于大数据时代的大样本训练速度有优势。个人觉得这是的最主要的优点。
(2) 能够处理高维数据,并且不做特征选择
(3)由于采用了随机采样,训练出的模型的方差小,泛化能力强。
(4) 每次学习使用不同的训练集,一定程避免了过拟合
(5) 相对于Boosting系列的Adaboost和GBDT, RF实现比较简单。
(6) 对部分特征缺失不敏感。
RF的主要缺点有:
(1)在某些噪音比较大的样本集上,RF模型容易陷入过拟合。
(2) 取值划分比较多的特征容易对RF的决策产生更大的影响,从而影响拟合的模型的效果。

6.3 神经网络

激活功能(传递函数)
激活函数用于将非线性引入神经网络。它会将值缩小到较小的范围内。Sigmoid激活函数的压缩范围为0到1之间。在深度学习中有许多激活函数可用,ReLU,SeLU和TanH均优于Sigmoid激活函数。小亮这里还想多说几句:关于激活函数为什么要引入激活函数呢?其实,上面的z已经是一个计算结果了,但是呢它不是我们最终想要的结果!!!上面的z有可能是0到1的一个数字,也可以是任意一个可能大于0或者小于0的整数,但是呢我们一般用神经网络是想解决分类问题,大多数时候,我们需要输出一个0或者1,代表是或者否,那么如何处理呢?如果大于0,我们就把它作为1,如果小于0,我们就把它输出为0,这是最简单的传递函数的一种用法,我们可以把它看作格式化输出结果,将结果变成我们可以使用的一种符号或者数字。 金融风控项目复盘_第10张图片

针对样本不均衡问题,提出Focal_loss损失函数,用来降低大量简单负样本在训练中所占的比重
金融风控项目复盘_第11张图片
加入平衡因子alpha,用来平衡正负样本本身的比例不均:文中alpha取0.25,即正样本要比负样本占比小,这是因为负例易分。
gamma调节简单样本权重降低的速率,当gamma为0时即为交叉熵损失函数,当gamma增加时,调整因子的影响也在增加。实验发现gamma为2是最优。

7.在训练集上各评价指标表现良好,到训练集上表现很差,模型可能出现过拟合,泛化能力差:
解决:

模型过于简单时,容易发生欠拟合(high bias);模型过于复杂时,又容易发生过拟合(high variance)。为了达到一个合理的 bias-variance 的平衡,此时需要对模型进行认真地评估。这里简单介绍一个有用的cross-validation技术K-fold Cross Validation (K折交叉验证),
这个方法将帮助我们获得模型关于泛化误差(generalization error)的可信的估计,所谓的泛化误差也即模型在新数据集上的表现。在训练数据上面,我们可以进行交叉验证(Cross-Validation)。
K折交叉验证,初始采样分割成K个子样本,一个单独的子样本被保留作为验证模型的数据,其他K-1个样本用来训练。交叉验证重复K次,每个子样本验证一次,、我们便可获得 k 个模型及其性能评价。平均K次的结果或者使用其它结合方式,最终得到一个单一估测。

当K值大的时候, 我们会有更少的Bias(偏差), 更多的Variance。
当K值小的时候, 我们会有更多的Bias(偏差), 更少的Variance。
金融风控项目复盘_第12张图片
8. 评价指标
金融风控项目复盘_第13张图片
准确率:判断为正,且实际为正/判断为正的数量(precision,P)
在这里插入图片描述
召回率,又称查全率(Recall,R):判断为正,且实际为正/实际为正的数量
在这里插入图片描述
F1-Score:是精准率和召回率的调和平均值
在这里插入图片描述
分类阀值,即设置判断样本为正例的阀值 THR

你可能感兴趣的:(数据分析)