应用:风控用户识别方法前言接下来,让我们来讲讲,一期我们做了什么?为了用Isolation Forest而不用其他的识别算法?为什么用当前的算法进行识别而不用其他的识别算法?当前的设计下存在哪些问题?

前言

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版本下更新了一个简单识别的方法,之后会优化更好的算法替代掉的。只要数据量太大无法计算的问题,我之后会采取矩阵切割分块计算的方法,这个是后话了。

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

#安装
pip install Frcwp

自动识别过程:

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)

相关的结果显示:

# 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,希望对大家有一些帮助。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏CreateAMind

大规模人类活动检测比赛-模型代码论文ppt视频

11620
来自专栏AI科技评论

谷歌机器学习白皮书全解析 43条黄金法则(二)

【AI科技评论按】:此白皮书为谷歌总结的机器学习(ML)最优实践方法,浓缩了其多年技术积累与经验,尤其是 YouTube、Google Play 和 Googl...

37460
来自专栏数据派THU

这5个机器学习项目你不可错过!(附代码)

本文共2299字,建议阅读6分钟。 本文将给大家介绍五个十分可怕但还鲜为人知的机器学习项目,囊括了一些潜在的机器学习的新想法。

10730
来自专栏智能算法

美团推荐算法实践

前言 推荐系统并不是新鲜的事物,在很久之前就存在,但是推荐系统真正进入人们的视野,并且作为一个重要的模块存在于各个互联网公司,还是近几年的事情。 随...

48350
来自专栏人工智能头条

我们从250个机器学习开源项目中挑出了Top 10,Github平均star979

17530
来自专栏目标检测和深度学习

Github 平均 Star 979!一文了解 Top 10 机器学习开源项目

15020
来自专栏用户画像

Facebook 推荐算法

版权声明:本文为博主-姜兴琪原创文章,未经博主允许不得转载。 https://blog.csdn.net/jxq0816/article/details/816...

23430
来自专栏机器之心

现在,所有人都可以在18分钟内训练ImageNet了

该团队的主要训练方法是:fast.ai 用于分类任务的渐进式调整大小和矩形图像验证;英伟达的 NCCL 库,该库整合了 PyTorch 的 all-reduce...

11810
来自专栏新智元

比谷歌快46倍!GPU助力IBM Snap ML,40亿样本训练模型仅需91.5 秒

【新智元导读】近日,IBM 宣布他们使用一组由 Criteo Labs发布的广告数据集来训练逻辑回归分类器,在POWER9服务器和GPU上运行自身机器学习库Sn...

387100
来自专栏IT派

我们从250个机器学习开源项目中挑出了Top 10,Github平均star979

在过去一个月中, Mybridge 从 250 个机器学习开源项目中挑选出了 Top 10。Mybridge AI 比较了这期间发布的新项目和重大项目,然后依据...

12630

扫码关注云+社区

领取腾讯云代金券