zoukankan      html  css  js  c++  java
  • 风控用户识别方法

    风控用户识别方法

    update:
    18.1.1 :Frcwp已如期上线,满足本文中的所有方法,欢迎拍砖

    前言

    因为工作方向相关,之前我也尝试着在Google、arXiv、wikipedia等等地方搜一些风控识别的资料或者思路,但是事与愿违的是,绝大多数的与风控算法都毫无关系,基本上都是推销自己家的产品的,所以,我之前也尝试着写了一些方法的梳理,如:

    但是在我前几天再回过头去看自己写的这些东西的时候,作为一个老司机来说,我都不想去看一篇又一篇动则上千字的文章,理论交错,文笔粗陋,正巧现在公司内部也有一个风控的项目,所以,我准备做一个开源的项目Frcwp,核心在于:

    • 简单操作,几乎不用多少调参,自动识别异常点
    • 理论清晰,支持的方法多,兼容性好
    • 集成数据预处理的过程,减轻前置工作量

    “纠结”了几个朋友的情况下,一期已经完工,主要是搭建了最简单的框架,我相信,这只是一个开始,欢迎大家试用,也欢迎每一个人来批评,更希望有想法的同学一起来做这个事情。


    接下来,让我们来讲讲,一期我们做了什么?

    核心我们一期做的异常点识别中,核心是利用的14年周志华教授提出的isolation forest算法进行识别,详细的理论部分请参见:Isolation Forest,重复说一个事情的意义也不大。这边需要解释几点:

    • 具体是怎么得到当前的算法流程的呢?
    • 为什么用当前的算法进行识别而不用其他的识别算法?
    • 当前的设计下存在哪些问题?
    • 未来的方向会在哪边?

    让我们来一一来回答这些问题。

    为了用Isolation Forest而不用其他的识别算法?

    在设计这套算法之前,我们其实是遇到了一个实际的业务问题,黑产撞库。相信大家毫不陌生这个词,无论是阿里、京东、滴滴还是腾讯,被撞库是一件普通了不能再普通的事情,“黑产”的人从第三方渠道,获取到你历史上的手机号和一些你曾经用的密码,重复的登陆,暴力的尝试,如果你的密码设置的比较简单,比如:“123456”,“qwerty”…非常容易被破解,然后再根据你历史下单的情况,进行假冒“客服”退款,进行诈骗,百度一搜就有一堆这样的新闻:

    所以,我们需要阻止“黑产”人员进行这样的暴力破解,获取用户的资料,由此而引发了我们对这个问题的思考。我们在对这个问题分析的时候,巧妙的发现了如下的一些信息:

    因为涉及公司机密,这边隐去了具体坐标和值,很容易发现以下问题:

    • 正常扇面内数据分布密集,未知扇面内数据分布松散,异常扇面内数据分布稀疏
    • 正常扇面内的数据量占全量数据的绝大多数
    • 不存在明显的分割线,正常扇面和异常扇面存在过度地带

    这个给了我们一些启发,我们做了如下的分析:

    • 我们观察了异常扇面内的用户黑白比,如我们预计的黑白比为20:3,也就是说分布远离大量数据点的用户绝大多数存在问题
    • 为止区域的用户黑白比为1:2,这说明在黑白用户之间不存在明显的界限,有交错地带
    • 正常区域内也存在黑名单用户,比例在504:1,也就是说,我们划分有一定识别能力,但是还是不能做到全量识别

    综合上述这些预先的处理,我们要用算法完成三件事情:
    1.切分全量用户,做到识别出正常,未知,异常用户
    2.识别出异常用户和正常用户之间的差异约束切割
    3.在异常用户+未知用户里面,找出利用差异约束切割出黑名单

    为什么用当前的算法进行识别而不用其他的识别算法?

    切分数据的时候,我们这边采用的是切比雪夫切割。非理工科的同学可能比较疑惑什么是切比雪夫切割,这边如果数据是正态下,箱式图的Q3+3/2xQI作为上top点进行切割,大家就应该很熟悉了,其实利用的就是数据出现的概率。
    来源于百度百科
    上面这张图很好的解释了,在数据服从正态分布的情况下,出现数据值比均值+3x标准差要大的概率不足0.1%,所以,我们可以认为这些数据是异常点了。那现在出现了一个问题,日常数据分布都不一定是正态的,所以引出来了类似的切比雪夫理论,它用的是马氏距离距离中心点的程度,详细的马氏距离理论见马氏距离分布

    切分完成数据之后,我们要做寻找差异约束切割逻辑。从最上面的扇面图,我们很容易发现,正常数据与异常数据之间的密度差异很明显,所以如何识别密度差异的算法就是我们需要的,这边我大概找了6、7种常见的切分方法,这边主要讲三种:isolation forest,lof,distance similarity。理论我之前也讲过,贴上地址,不废话了:密度算法。这边主要展示效果差异:

    通过68个数据集,很明显的可以看出LOF的识别出来的用户的异常用户异常程度是低于Isolation Forest和Distince Similarity的,起码在我们这些数据集样本中,Isolation Forest和Distince Similarity识别效果差异不大,所以,我们再考虑了另一个性能问题:

    我们用了CV=10的交叉检验,发现,平均下来,Isolation Forest识别速度是Distince Similarity的1/3以下。综合上述,还有一些其他因素,最后我们选择了Isoation Forest的方法。

    当前的设计下存在哪些问题?

    上面说的都是比较正面的问题,让我们看看,有哪些缺点。
    首先,从头到尾,我们一直在围绕密度差异这个问题,但是就我平时做的一些小爬虫都知道,降低暴力获取的速度,慢慢搞,这时候就以上的方法就无法做到有效的识别。除此之外,因为我们用了切比雪夫不等式,所以对其有概念的同学知道,算马氏距离的时候需要算协方差矩阵,当数据量异常异常大(我测算的是12mx100)的时候计算资源紧张,可能算不出来;数据量异常异常小的时候feature严重共线性,也可能计算不出来。

    未来的方向会在哪边?

    所以,后续我们会新增其他算法,支持过大过小情况下的识别方法。针对数据量过小的识别情况,我在V0.0.3版本下更新了一个简单识别的方法,之后会优化更好的算法替代掉的。只要数据量太大无法计算的问题,我之后会采取矩阵切割分块计算的方法,这个是后话了。

    最后,我们以当前算法包的使用来结束整篇介绍:

    1
    2
    #安装
    pip install Frcwp

    自动识别过程:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    from Frcwp import Frcwp
    traindata = pd.read_table('../路径')#数据可以在https://github.com/sladesha/machine_learning/tree/master/data下的data_all.csv获取
    frc = Frcwp()
    traindata = frc.changeformat(traindata, index=0)
    # You can define your own outlier size , the details of these params can be got from ../Frcwp/Frcwp.py:
    params = {
    'na_rate': 0.4,
    'single_dealed': 1,
    'is_scale': 0,
    'distince_method': 'Maha',
    'outlier_rate': 0.05,
    'strange_rate': 0.15,
    'nestimators': 150,
    'contamination': 0.2
    }

    # train the frc model
    frc.fit(traindata, **params)

    相关的结果显示:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    # predict outliers with the trained frc model
    predict_params = {
    'output': 20,
    'is_whole': 1
    }
    frc.predict(frc.potentialdata_set, **predict_params)

    # if you want get the whole probability of your potential outliers
    frc.similarity_label

    以上部分内容截取自我的github,希望对大家有一些帮助。

  • 相关阅读:
    hibernate对应关系详解(转)
    mybatis genertor两种使用方式(文件+项目)
    YII2 union 不同数据结构时 解决方案
    Yii2 分表后 使用 union all 分页实现代码
    Beyond Compare 4.2.10手动破解
    Xshell 6+Xftp 6官方下载免费版
    Navicat Premium
    yii2的Console定时任务创建
    内嵌多个youtube视频并展现该频道所有视频列表
    video.js 动态获取URL 并播放youtube视频
  • 原文地址:https://www.cnblogs.com/bonelee/p/9728663.html
Copyright © 2011-2022 走看看