# 结果分析

本案例中介绍的共现关系图 Co-Context Graph，是受到滴滴出行在 AAAI 19 上的一篇 Paper 《Spatiotemporal Multi-Graph Convolution Network for Ride-hailing Demand Forecasting》的启发。这是一个图神经网络领域的 Paper，目的是预测一个城市下一个时间段各个目标点 (Point) 的打车需求。这篇 Paper 将城市中所有的 Point 构成一张网络，Point 与 Point 之间存在多重关联，譬如地理位置(经纬度)上的欧几里得距离，道路上的连通性，功能上的相似性等。然后通过图神经网络的方式进一步探索 Point 之间流量在时间上的相关性，从而预测下一个时间点各个 Point 的打车需求。

在之前一个羊毛党识别案例中，虽然我们在图 Schema 中放入了诸如设备号、IP地址、订单等节点，但实际上 CC 的发现过程是依赖于**邀请关系**的，先通过邀请关系找到 CC，再想办法刻画 CC，然后尝试区别普通CC和黑产CC。

应该注意到，**这种方法是和业务强绑定**的，如果换一个场景，没有这种邀请关系，又或者邀请活动下线，方法就失效了。

因此本案例通过挖掘**隐式关系** ( implicit relationship ) 的方法，通过加入**时间约束**，确保节点之间的关系，**在概率上是可靠**的。

什么叫“在概率上是可靠的“ ？在一个咖啡厅中，有20个人连接了咖啡厅的 WIFI，在正常环境下，他们几乎不大可能在同一时间拿出手机去拼多多上下一单，即便有那么几个人真的同时下单了，这 20 个人能够形成的 CC 大小也不会太大。

### 实验

实验的数据用了某个电商APP大约 10 天的风控日志，日志中包含注册、登入、签到、下单、付款等事件。该风控系统同时有接入国内一家著名的云服务提供商提供的防刷单检测服务，即你提供手机号，该平台会返回，该手机号是否涉嫌刷单。

由于无法逐一排查每个账号是否真的来源自黑产，我们使用这家防刷单检测平台 (后面简称A平台) 的检测结果，辅助验证我们方法的可靠性，**即我们相信 A 平台的检测结果准确率很高，误报率很低**。

这 10 天的风控日志，过滤掉非登录状态下也能产生的事件，剩余日志包含约 120 万个账号，A 平台认为其中 76702 个账号为高风险。

以 60 秒为时间窗口，建立 `co-ip` 边，构建 Co-Context Graph，该 Graph 中包含 95817 个账号，其中 70086 个账号是 A 平台认为的高风险账号。也就是说，剩下 6000，约 10% 的账号，是不会出现在 Graph  上的，是我们这个方法无法检测出来的。

我们在 Co-Context Graph 中寻找 CC，取 10 作为阈值，输出我们认为的黑产账号。即，将`cc_size > 10` 的账号筛选出来，判定为黑产。

`cc_size > 10` 的账号一共有约 70000 个，其中有 69532 个账号， A平台认为是黑产。

仅仅依赖了 `co_ip` 这层隐式关联，取得的效果，还是非常不错的。

### 图数据库 v.s. 图计算框架

图分析方面，笔者只用过 [graph\_tool](https://graph-tool.skewed.de/) 这种单机版的算法包，并没有使用过 GraphX 这样的分布式图分析的相关经验，因此只能稍微谈谈我的一些浅见，如有错误，请指正。

使用图计算框架的好处是，可以处理大规模数据，方便实现一些复杂的图算法，适合对时效性要求不是那么高的离线计算场景。

使用图数据库的好处是，方便处理增量数据，方便对已有数据进行变更，适合对时效性要求较高的实时场景。缺点是运算效率可能不如专门的图计算框架。

对于我来说，TigerGraph 最具吸引力的地方有 2 点:

* 表现能力很强的查询语句 GSQL
* 强悍的计算性能

一些常用的图算法，用 GSQL 实现起来，难度不高，强悍的计算性能使得大多数运算可以在数据库中直接完成，而不需要再将数据导出至外部计算框架进行计算。这可以极大的缩短分析所需的时间，满足对时效性要求较高的场景。

### 后续思考

1. 最近关于图神经网络的研究很火热，也取得了不少突破。对于一些基于 Inductive Representation Learning 的深度学习算法，比如 GraphSage，可以通过邻居节点 Embedding  的加权计算，得到新加入节点的 Embedding 向量，而不需要涉及到全图的重训练。把模型推断部分，部署到图数据库中来，似乎是一个不错的研究方向。
2. 虽然本案例中提到的方法，相比于之前案例中的方法更加通用，对业务逻辑的假设较少。但有些场景并不适合使用这种方法，比如说秒杀活动。在秒杀、抢购活动中，一天中大多数流量会在短短几分钟内爆发，正常的账号，也有可能在短时间内出现在同一个公共 IP 中。因此它更适用于流量在全天内分布比较均匀的场景。
