基于大数据聚类社群的做弊用户发现方法

前面的文章中咱们讲道,像趣头条类的APP对于收徒和阅读行为给予用户现金奖励的方式势必会受到大量羊毛党黑产的注意,其实单个用户能薅到的钱是没有多少的,为了达到利益最大化,黑产确定会利用各类手段构建大量帐号来薅APP运营企业的羊毛,由于收徒的奖励远高于阅读,因此赚取收徒奖励就成了最严重的薅羊毛手段。前文提到为了更好的识别出这些异经常使用户,咱们利用用户的师徒关系构建连通图,把同一个连通图上的用户视为一个社群,利用Spark Grahpx实现了一个简单高效的社群发现功能。具体内容能够查看上一篇文章《基于Spark Grahpx+Neo4j 实现用户社群发现》,但生成社群不是目的,咱们的目标是可以对社群用户进行分析,根据规则和算法的方法找出社群内的异经常使用户及异常社群,从而达到风控的目的。算法

规则的方法主要是,咱们在设备,IP,用户基础信息,用户行为信息等维度组合构建用户的风控画像,而后开发规则引擎,制定阈值,过滤出超过阈值的异经常使用户。但只经过规则的方法每每是不够的,大量的用户单从个体上看看不出多少异常,但若是上升一个层次,从社群的总体角度去分析,就会发现用户的不少类似之处。数组

就像咱们以前文章说的坏人每每是扎堆的,物以类聚,人以群分,并且黑产想达到必定规模,确定会借助做弊设备,脚本,机器等手段,机器的行为通常都有一些类似性,咱们就能够利用这些类似性对用户进行聚类分析,因此除了规则的方法外,咱们还能够用机器学习的方法将具备类似行为的用户进行聚类,而后求出类簇的TOP N类似特征,查看是否可疑,好比设备是否类似,行为是否类似,基本信息,帐号等是否类似,经过机器学习的方法,咱们能找出不少规则无法断定的异经常使用户。app

聚类就是把类似的用户聚在一块儿,通常的方法就是计算两个用户特征向量的类似度,这就遇到了第一个问题,对于大量用户来讲,两两用户计算类似度计算量是很是可怕的,好比50万用户两两计算类似度,总共要计算50w * 50w =2500亿次,这计算量就太大了,若是用户量再大点根本没法计算。对于这种状况,人们通常会利用局部敏感哈希等优化算法将数据进行降维,而后经过哈希把类似的用户尽量的放到同一个桶里,最后再对同一个桶里的数据进行两两计算,这样计算量就小不少了。机器学习

下图是局部敏感哈希算法的一个示意图,普通的哈希算法是尽可能将数据打散到不一样的桶里,达到减小碰撞的目的,但局部敏感哈希旨在将类似的用户放到相同的桶里。Spark的Mllib库里也提供了LSH局部敏感哈希算法的实现,有兴趣的朋友能够自行查看。学习

不过咱们在用Spark LSH跑数据的过程当中,遇到了每次都是最后几个task特别缓慢的状况,可能跟数据倾斜或CPU计算能力不足有关,屡次调试都没有太好的效果,又限于资源有限,只能另想别的方法,突然想到咱们以前已经按师徒关系生成的社群,自己就是一种把类似用户放到同一个桶里的操做,并且咱们根据师徒关系构建连通图获得的社群应该是已经很好的把有多是一个团伙的人聚到了一块儿,这样的话,只需对每一个社群进行类似度计算就能够了。优化

计算类似度的方法有多种,像欧氏距离,汉明距离,余弦类似度,Jaccard 系数等都是经常使用的度量方法,但鉴于咱们提取的用户特征既有数值型,又有字符型,并且用户特征维度同样,咱们想经过定义用户有多少个共同特征就判为类似的逻辑,因此咱们选择了一个比较简单的f,即对比两用户特征数组相同特征数,知足阈值即为类似。调试

不一样社群用户数上图是咱们根据师徒关系生成的不一样社群及社群人数,下图为咱们基于这些社群,分别计算出的社群内类似用户及用户的类似特征。cdn

从上图能够看出这些类似用户,有些社群所有是同一个手机型号,而且开机时间相同,手机一直处于充电状态,师徒高度集中等等,这些都是比较可疑的用户,须要风控人员重点分析。blog

至此,咱们经过社群类似度计算实现了一个简单的风控聚类模型,基于这个模型找出了一些类似用户,并且咱们能够增长更多的用户特征,调节模型阈值来达到更好的风控效果。后面咱们还计划给每一个特征定义权重,这样就能够对社群进行打分,进而能够更直观的判断社群的优劣与否。资源

定义特征权重以下

打分规则目前类似社群风控分数打分规则为:

  1. 特征占比大于等于50%的特征为该类似社群的类似特征;
  2. 类似社群风控分数 = 类似特征占比乘以特征权重的累加和
  3. 若是存在权重大于等于10的类似特征,类似社群风控分数要再加上用户数mod 100,即每100用户加1分

好比下面为类似社群的用户数和类似特征占比

778 //类似社群用户数

97% of 'app_ver' is '3.9.1', //权重为2

72% of 'masterid' is '599aa668c0d9db00014239e7', //权重为5

53% of 'battery_consumption' is '100' //权重为10

//计算类似社群风控分数以下Score = 0.972 + 0.725 + 0.5310 + (778 mod 100) 1 = 17.84

查询结果表以下

相关文章
相关标签/搜索