精华内容
下载资源
问答
  • 风控建模

    2019-10-13 09:44:54
    文章目录风控建模inputvector词袋模型地理位置风险评估(瞬间位移距离)userAgent 风控建模 inputvector 自定义jquery插件完成用户输入表单控件的输入行为的追踪,形成用户输入向量,将用户输入向量封装成cookie对接...

    风控建模

    inputvector

    自定义jquery插件完成用户输入表单控件的输入行为的追踪,形成用户输入向量,将用户输入向量封装成cookie对接给后台用户登录服务

    //首先这个输入向量的长度如果不够的话就没有评估的必要直接返回false
    var n=historyVector.length
        if(n<2){
          return ("FORM_INPUT",false)
        }
    
    首先计算平均向量
    //计算平均向量 得到一个double数组 这个数组的每个元素 都是一个输入的向量加起来除以个数
    //比如全部的用户名输入向量加起来除以历史个数 就是用户名的平均向量
        var avgVector=new Array[Double](currentInputVector.length)
        for(i <- 0 until  currentInputVector.length ){
          avgVector(i) = historyVector.map(v=>v(i)).reduce(_+_)/historyVector.length
        }    
    
     //n个历史向量间 彼此距离
        var distances=new ListBuffer[Double]
        for(i<- historyVector ;j <- historyVector;if(i!=j)){ //任意两个点坐标的距离
           //必须保证 i!=j 计算 i和j的距离
           var total:Double=0
           for( item<- 0 until avgVector.length){
           //Math.pow(x,y)表示x的y次方
             total+=  Math.pow((i(item)-j(item)),2)
           }
          //添加距离 开根号
           distances += Math.sqrt(total)
          //将向量从historyVector中移除
          historyVector -= i
        }
    
    //对distances结果进行排序
        distances=distances.sortBy(distance=>distance)
    
    //计算当前输入向量和平均向量的距离
        var curentDistance:Double=0
        for( item<- 0 until avgVector.length){
          curentDistance+=  Math.pow((avgVector(item)-currentInputVector(item)),2)
        }
        curentDistance=Math.sqrt(curentDistance)
    
     //获取比对阈值 这里的distance是上面的listbuffer[Double]集合 取其中大约1/3处作为阈值
        var  threshold: Double = distances((n * (n - 1))/6)
    
    //最后一步如果 当前输入向量和平均向量的距离大于阈值 值输出为true 否则为false
    return  ("FORM_INPUT",curentDistance>threshold)
    

    词袋模型

    //第一步首先要是没有历史密码这一步就不用评估了
     if(historyPasswords.size<1){
          return ("PASSWORD_INPUT",false)
        }
    
    //这一步是建立词袋模型 将历史密码摊平 去重 排序 adcb3212变成 abcd123
    val wordBag = historyPasswords.flatMap(password=> password.toCharArray).distinct.toList.sortBy(c=>c)
    
    //这一步就是将abc12变成1110110 将历史的密码都和词袋模型做对比 然后得出的向量组 组成一个listBuffer
     var historyPwddwordVectors=new ListBuffer[Array[Int]]
        for(pwd<-historyPasswords){
          val vector = convertString2Vectors(wordBag,pwd)
          historyPwddwordVectors += vector
        }
    
    //当前输入的密码也转为一个当前向量
    val currentVector = convertString2Vectors(wordBag,currentPawssword)
    
    //用当前的向量去和历史向量组成的listBuffer[Array[Int]]一一去做余弦相似度 然后求最大的相似度 
    var simlarity:Double=0.0
        for(v <- historyPwddwordVectors){
          var s:Double=calculateSimlarity(currentVector,v)
          println("s:"+s)
          if(s>simlarity){ //获取自大相似度
            simlarity=s
          }
        }
    
    //最后如果这个相似度小于我们定下的阈值0.95就是true 超过了就是false
    if(simlarity < 0.95){
          return  ("PASSWORD_INPUT",true)
        }
        return ("PASSWORD_INPUT",false)
    

    余弦相似度
    在这里插入图片描述

    地理位置风险评估(瞬间位移距离)

    后台使用geo-ip转换工具将ip地址转换为经纬度信息,然后在求出在地球上的距离 最后除以俩次登录的时间 求出瞬间位移距离 如果大于高铁时速代表有风险

    userAgent

    用@RequestHeader这个注解提取User-Agent设备信息通过前期制定的Flume+logback 将用户登录信息存储在分布式日志系统中

    def doEvaluate(lastAgent: String, lastAgents: ListBuffer[String]): (String, Boolean) = {
        return ("AGENT_INPUT",lastAgents.indexOf(lastAgent) == -1)
      }
    
    
    展开全文
  • 特征生成在风控建模过程中,最重要的过程之一就是特征工程,也是最耗时的一步,而最后的跑模型定参数相反是最简单的一步,一般而言特征工程的好坏决定了整个模型好坏的上限!一般从数据库中提取出的原始数据,在模型...

    特征生成

    在风控建模过程中,最重要的过程之一就是特征工程,也是最耗时的一步,而最后的跑模型定参数相反是最简单的一步,一般而言特征工程的好坏决定了整个模型好坏的上限!一般从数据库中提取出的原始数据,在模型表现上较差,尤其是金额类变量波动较大,无法直接在模型中使用,因此需要进行特征生成。本章节主要讨论在风控建模中特征生成的思路以及python代码实现。

    特征生成的思路

    在风控项目中是按照数据源划分大类搭建衍生框架,如按数据源可分为大类:人行征信数据、工商税务数据、司法数据等;在按照大类划分小类,以风控中最经常用到的人行征信数据为例,可划分为小类:基础信息、信贷历史、逾期表现等,小类的划分可以按照数据信息块或者业务理解进行划分,主要思路是便于业务理解(将信息表现相同的划为一类)以及在建模时方便覆盖各类型信息(提高模型精度以及避免共线性)。

    在大类以及小类确定时,就可以进行具体的变量设计,具体变量的设计思路可以分为三类:

    依据经验结合产品特性直接设计变量(AHP问卷调查法,以后专门写一章吧。。),也就是专家规则,这类方法的好处就是有衍生工作量较少,快速建模,有专家经验加成,对于产品积累数据较少或者没有的项目,可以做到冷启动,待数据积累后再进行数据驱动建模。缺点也显而易见,可能错过表现较好的变量,极度依赖建模人员的经验(如果经验不足,设计变量总体上都较差,那么AHP也是矮子里拔高个)

    第二种方法就是划分维度,按照维度组合设计变量,还是以人行征信中信贷历史小类变量设计举例,信贷历史中有时间及各个月的还款表现,那么就可以划分维度为:信贷产品维度、时间维度(最近N个月)、还款表现维度(逾期状态、逾期次数等)、统计维度(最大、最小、求和、平均、占比、计数等)。下面就是维度组合,如循环贷下最近3个月逾期状态为1的次数。这种拉网式组合衍生变量的数量多、覆盖面广;缺点就是工作量大,衍生出的变量大部分存在严重共线性,在后续建模中会被筛掉大部分,如时间维度一般会选取最近3、6、12个月;另外由于衍生的变量较多,在后续的特征分箱、转换及变量挑选都会消耗大量时间。

    第三类方法就是利用算法生成变量,如决策树算法生成各类节点,通过节点组合生成变量,又比如神经网络算法,自动抽取和生成新变量,但这些方法面临的问题是:解释性差、模型表现不稳定等

    特征生成的python代码

    由于第一类衍生变量的思路是完全按照经验而定,没有固定或者抽象成函数的方法,因此没必要讨论其python代码。

    第二类衍生变量思路的python代码

    下面是以某类变量的代码实现举例,在编写衍生变量代码函数时,需要注意的点是衍生函数的通用性

    举一个简单的例子,现在计算每个用户的额度使用率,记为特征ft,按照时间轴以月份为切片展开,得到申请前30天内的额度使用率ft1,申请前30天至60天内的额度使用率ft2,申请前60天至90天内的额度使用率ft3,…,申请前330天至360天内的额度使用率ft12,于是得到一个用户的12个特征

    e5aefbc024f324bcede2ab1f1af43e13.png

    可以根据这个时间序列进行基于经验的人工特征衍生,例如设计一个函数,计算最近p个月特征值大于0的月份数:

    def month_count(ft_name, p):
        '''
        input:
            ft_name: String, 特征名
            p: Integer, 最近p个月
    
        function: 计算最近p个月特征值大于0的月份数
        '''
        df=data.loc[:,ft_name+'1':ft_name+str(p)]
        auto_value=np.where(df>0,1,0).sum(axis=1)
        return ft_name+'_num'+str(p),auto_value

    第三类衍生变量思路的python代码

    以下讨论的是决策树算法在变量设计中的运用,在前面的章节(风控建模之客户分群二三事)有运用到决策树算法分群,其实可以通过各个阀值点组合,按是否命中、命中的统计量(计数、最大、最小等)进行变量衍生

    0d8ae20e864813f6f52db57e514f397c.png
    # x['n1'] = x.apply(lambda x:1 if x.amount_tot>9614.5                           
    #                       and coupon_amount_cnt<=6.0 else 0)  
    
    # x['n2'] = x.apply(lambda x:1 if x.amount_tot>9614.5   
    #                       and coupon_amount_cnt>6.0 else 0)
    展开全文
  • 特征生成在风控建模过程中,最重要的过程之一就是特征工程,也是最耗时的一步,而最后的跑模型定参数相反是最简单的一步,一般而言特征工程的好坏决定了整个模型好坏的上限!一般从数据库中提取出的原始数据,在模型...

    特征生成

    在风控建模过程中,最重要的过程之一就是特征工程,也是最耗时的一步,而最后的跑模型定参数相反是最简单的一步,一般而言特征工程的好坏决定了整个模型好坏的上限!一般从数据库中提取出的原始数据,在模型表现上较差,尤其是金额类变量波动较大,无法直接在模型中使用,因此需要进行特征生成。本章节主要讨论在风控建模中特征生成的思路以及python代码实现。

    特征生成的思路

    在风控项目中是按照数据源划分大类搭建衍生框架,如按数据源可分为大类:人行征信数据、工商税务数据、司法数据等;在按照大类划分小类,以风控中最经常用到的人行征信数据为例,可划分为小类:基础信息、信贷历史、逾期表现等,小类的划分可以按照数据信息块或者业务理解进行划分,主要思路是便于业务理解(将信息表现相同的划为一类)以及在建模时方便覆盖各类型信息(提高模型精度以及避免共线性)。

    在大类以及小类确定时,就可以进行具体的变量设计,具体变量的设计思路可以分为三类:

    依据经验结合产品特性直接设计变量(AHP问卷调查法,以后专门写一章吧。。),也就是专家规则,这类方法的好处就是有衍生工作量较少,快速建模,有专家经验加成,对于产品积累数据较少或者没有的项目,可以做到冷启动,待数据积累后再进行数据驱动建模。缺点也显而易见,可能错过表现较好的变量,极度依赖建模人员的经验(如果经验不足,设计变量总体上都较差,那么AHP也是矮子里拔高个)

    第二种方法就是划分维度,按照维度组合设计变量,还是以人行征信中信贷历史小类变量设计举例,信贷历史中有时间及各个月的还款表现,那么就可以划分维度为:信贷产品维度、时间维度(最近N个月)、还款表现维度(逾期状态、逾期次数等)、统计维度(最大、最小、求和、平均、占比、计数等)。下面就是维度组合,如循环贷下最近3个月逾期状态为1的次数。这种拉网式组合衍生变量的数量多、覆盖面广;缺点就是工作量大,衍生出的变量大部分存在严重共线性,在后续建模中会被筛掉大部分,如时间维度一般会选取最近3、6、12个月;另外由于衍生的变量较多,在后续的特征分箱、转换及变量挑选都会消耗大量时间。

    第三类方法就是利用算法生成变量,如决策树算法生成各类节点,通过节点组合生成变量,又比如神经网络算法,自动抽取和生成新变量,但这些方法面临的问题是:解释性差、模型表现不稳定等

    特征生成的python代码

    由于第一类衍生变量的思路是完全按照经验而定,没有固定或者抽象成函数的方法,因此没必要讨论其python代码。

    第二类衍生变量思路的python代码

    下面是以某类变量的代码实现举例,在编写衍生变量代码函数时,需要注意的点是衍生函数的通用性

    举一个简单的例子,现在计算每个用户的额度使用率,记为特征ft,按照时间轴以月份为切片展开,得到申请前30天内的额度使用率ft1,申请前30天至60天内的额度使用率ft2,申请前60天至90天内的额度使用率ft3,…,申请前330天至360天内的额度使用率ft12,于是得到一个用户的12个特征

    可以根据这个时间序列进行基于经验的人工特征衍生,例如设计一个函数,计算最近p个月特征值大于0的月份数:

    def month_count(ft_name, p):

    '''input:ft_name: String, 特征名p: Integer, 最近p个月function: 计算最近p个月特征值大于0的月份数'''

    df=data.loc[:,ft_name+'1':ft_name+str(p)]

    auto_value=np.where(df>0,1,0).sum(axis=1)

    return ft_name+'_num'+str(p),auto_value

    第三类衍生变量思路的python代码

    以下讨论的是决策树算法在变量设计中的运用,在前面的章节(风控建模之客户分群二三事)有运用到决策树算法分群,其实可以通过各个阀值点组合,按是否命中、命中的统计量(计数、最大、最小等)进行变量衍生

    # x['n1'] = x.apply(lambda x:1 if x.amount_tot>9614.5 \

    # and coupon_amount_cnt<=6.0 else 0)

    # x['n2'] = x.apply(lambda x:1 if x.amount_tot>9614.5 \

    # and coupon_amount_cnt>6.0 else 0)

    展开全文
  • 风控建模教程

    2018-12-15 18:40:55
    可以说是非常全面的一本关于风控建模的书了,工程性非常强,而不是只是理论知识,同时也有一些理论知识。
  • 写在前面:此文为一个简单的风控决策模型的开发逻辑及细节,仅供科技金融领域做风控建模的新手参考,以具备能够看懂并且尝试风控模型开发及部署的能力。一 模型开发流程1、模型开发(1)数据源测试: 测试需要对接的...

    e0ea0e96089e321ef6f9c5f3a6b9fbb8.png

    写在前面:

    此文为一个简单的风控决策模型的开发逻辑及细节,仅供科技金融领域做风控建模的新手参考,以具备能够看懂并且尝试风控模型开发及部署的能力。

    一 模型开发流程

    1、模型开发

    (1)数据源测试: 测试需要对接的三方数据源,可分为线下测试和线上测试两种。通过类似覆盖率、交叉矩阵、KS等指标判断数据质量。

    (2)aip测试接口对接:如果数据源质量ok,开发人员对接数据源接口,取数调参。

    (3)函数式编程代码块:代码结构化分块编程,防止重复编写,同样提升调用效率。

    2、模型部署

    (1)路由配置: 配置好模型路由

    (2)api正式接口对接: 完成数据源接口的对接,部署到线上。

    (3)模型调用: 支持传参调用整个模型(包括规则集和机器学习模型),返回最终决策结果。

    3、模型监测

    (1)运营指标

    • ①数据源调用率
    • ②单模型拒绝率
    • ③整体通过率
    • ④单一规则触碰比

    (2)风控指标

    • ①AUC
    • ②KS

    4、模型调优

    • ①调整数据源的部署逻辑
    • ②调整规则集
    • ③调整评分卡
    • ④整体上的目的就是降低损失的同时提高通过。

    二 代码逻辑

    整体逻辑如下:

    678ff4aaf8e7b1a26e671c6fd1463eb9.png

    1、测试文件test或线上访问url

    5e5738457798114651875061c292a070.png

    2、调用视图views中的模型解释器@app.route

    3b6d6a70f2b37ede57518c64ec3da6a5.png

    3、数据源derived

    ccf0416e83b71a77774da16dc3f91b1d.png

    4、规则集rule

    3aa6b522efdd100080c98f9279f1d4b7.png

    5、机器学习模型model

    1e6a40b5a28610b8aef5e770486be732.png

    这里评分卡模型,基本是用标准评分卡和树结构的评分卡实现的。

    我是正阳, 很高兴能通过文字认识你,点个关注,后会有期。

    微信公众号:正阳能量场

    4a46499cf06900a004cf5cc2814f8c57.png
    展开全文
  • 风控建模
  • 2016中国大数据建模风控建模年终总决赛赛题
  • 特征筛选在建模之前的一步就是将特征工程做好的变量进行筛选,在风控项目中筛选分为两步:初步筛选、逐步回归筛选以及稳定性筛选。初步筛选通常评分卡模型的特征筛选主要从以下4个角度出发: 缺失率(一般变量较少时...
  • vintage分析 风控建模系列 01

    千次阅读 2019-08-19 18:01:58
    vintage分析 风控建模系列 01 在工作中发现,目前没有一个很好的系列帖子对风控建模中的各项细节做讲解,本人为一个金融科技公司的风控算法建模师,希望在此将风控建模的知识成体系、有深度、易吸收地分享给大家 ...
  • (本文是写给风控入门同学的建议!)一 准备工作根据核心职业CD法则,找工作前,你得先清楚自己有什么,自己要什么;面试单位有什么,面试单位要什么。就笔者近一年的学习及工作经验总结而言:科班同学,最好直接从...
  • 风控建模二:建模方案拟定引言一、是否需要分客群建模 引言 好坏标签定义完成并整理好数据集并不意味着建模工作可以正式开始,在建模之前我们还需要拟定好建模方案,具体而言,需要解决以下三个问题:一是否需要分...
  • 风控建模教程.pdf

    2020-02-01 18:57:06
    2.4 风控建模 2.5 数据管理 风控总监训练营 ......................................................................................................792 4 节课玩转信用评分卡模型...........................
  • 风控建模二:模型训练
  • 风控建模篇: 卡方分箱篇 处女文章 1:PART 3.1 风控建模卡方分箱步骤详解篇 发布时间:2019年02月11日 2:PART 3.2 风控建模卡方分箱前期数据处理篇 发布时间:2019年02月13日 3:PART 3.3 风控建模卡方分箱...
  • 认知系列之——理解风控建模

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 936
精华内容 374
关键字:

风控建模