风控算法-Synchrotrap

671 阅读3分钟

摘要

一句话总结,SynchroTrap是Facebook提出的基于用户之间相似性的聚类算法。它的基本想法是作弊账号在社交网络中的行为比较同步,即通过行为去捕捉作弊者团伙性。

During the active period, these malicious accounts follow the same set of users at around the same time. We call these actions loosely synchronized actions.

作者给出了两个案例来说明团伙性,一个是Facebook的图片上传场景(左),另一个是Instagram中的关注场景(右)。X轴都是用户发生动作的时间,Y轴是用户的ID。从图中可以观察出,Synchronized attack团伙的行为比较规整,而正常用户则是密密麻麻毫无规律。

算法流程

相似性计算

将用户的行为日志抽象化为<U,T,C>这样的三元组,U表示UserID、T表示时间戳、C表示目标对象。如果两个用户在相近的时间对同一个目标对象有动作则认为是等同的(action match),即:

   if Ci=Cj and TiTj<=Tsim \ ≈ \ \ if \ C_{i} = C_{j} \ and \ |T_{i}-T_{j}| <= T_{sim}

然后通过Jaccard similarity来计算用户之间的相似性

Sim(Ui,Uj)=AiAjAiAjSim(U_{i}, U_{j}) = \frac{|A_{i} \cap A_{j}|}{|A_{i} \cup A_{j}|},其中 AiA_{i}表示用户A所有的目标对象集合,集合交的判断条件为上面定义的约等于条件。

聚类算法

Synchrotrap采用自底向上的层次聚类算法(Single-linkage hierarchical clustering)进行更进一步的团伙挖掘,但是由于这种算法依赖于顺序地构建层次树图(dendrogram),在大数据问题中不好规模化(a straightforward implementation is difficult to scale),并且它最核心的步骤是将相似性大于阈值的团体不断合并。作者将其简化为1. 将相似性低于一定值的用户对直接过滤掉并建图; 2. 使用连通图挖掘团伙。

优化技巧

虽然Syncrotrap算法在原理上比较简单,但是作者提出的一些工程上的优化技巧还是挺有借鉴意义的。因为它是基于用户对之间的相似性的,所以它在理论上的时间复杂度肯定是O(n2)O(n^2),n方的东西在线上很多时候是跑不起来的。

数据流优化

首先可以对数据流进行一定的优化,将其做成可以多阶段执行的过程。比如最终要比较周级别的用户相似性,那么可以先计算天级的相似性然后再聚合为周级别的结果。

热点处理

真实环境中的情况往往比较复杂,比如在关注场景是存在数据倾斜问题的,即大量用户去关注大V。用户与目标对象之间的行为分布往往是服从幂律分布的,下图是用户登录使用的IP的分布图。

由于Syncrotrap的算法复杂度是n2的,所以在这些热点上一定是要进行优化的,因为它们会显著增大计算量。一个可行的方法是将数据更进一步地切分,同时还要能拿到Tsim时间窗口内的全部action match。作者给出的一个方法是基于滑窗的方法,具体来说:定义最小粒度是Tsim,那么将用户按照滑动的2Tsim进行切分,这样就可以保障Tsim边界处的action也不会被漏掉。但是滑窗会有重复的部分(图中灰色标记),为了保障不重复计算,只将每次切分的前半截action match进行输出。

对比CopyCatch

Syncrotrap是2014年的论文,它的基本出发点和2013年的copycatch存在一定的相似性。

CopyCatch, a Facebook internal system, detects fake likes casted in loose synchrony. SynchroTrap’s design is based on a similar insight that malicious accounts tend to act together. However, CopyCatch assumes that a user can perform a malicious action only once (e.g., like a page at most once) and models the detection problem as a co-clustering problem. When a user can repeat the same malicious action multiple times, such as log on from the same IP address repeatedly, the computational complexity of CopyCatch grows exponentially with the number of repeated actions.