在神策分析 1.2 版本中,我们推出了查询抽样功能,用于在数据量较大时,可以抽取少量用户的数据来快速获取查询结果,快速验证猜想。

1. 使用方法

行为事件分析、漏斗分析、留存分析和分布分析都提供了查询抽样功能,如下图所示: 

目前提供了从全量查询到对全量数据的1/64进行抽样的粒度,可以在实际查询时动态进行调整。

2. 抽样原理

抽样是按照神策分析系统内部的 user_id 来进行抽样的,在没有 track_signup 的情况下,它是对 distinct_id 取 hash 的结果,在有 track_signup 的情况下,是以较早的 distinct_id 为准进行计算的。

在进行 1/8 抽样的情况下,就是对根据 user_id 取模的结果,从所有用户中抽出 1/8 的用户的数据来进行查询,并根据这个查询结果反推出展现给使用者的值。例如,假设某个产品,目前一共有 100 万个用户,某一天某个事件的全量查询 PV 是 123456,而在进行 1/8 抽样时,我们是从这 100 万个用户中根据user_id值来取出大约 1/8 的用户的数据,然后发现这些用户里面在这一天这个事件的 PV 是 13500,因此,实际展现给使用值的最终的查询结果就是 13500 * 8 = 108000,与真实的全量查询是略有出入的。

查询如下几个指标时,不会对查询结果乘以抽样比例的倒数(例如,1/8 抽样时,结果不会乘以 8):

  • 人均次数(某个事件的人均触发次数)

  • 人均值(某个数字类型属性的人均值)

  • 最大值(某个数字类型属性的最大值)

  • 最小值(某个数字类型属性的最小值)

  • 人均 Session 次数

3. 使用场景

正如前面所描述的那样,查询抽样反推出来的结果和真实的全量查询结果会有出入,而且用户规模越大,数据分布越均匀,这个出入就会越小。当然,如果只是关注数据趋势,则在少部分用户群上做查询抽样,则查询抽样带来的误差通常就没那么重要了。

所以说,查询抽样主要是在数据量很大的情况下,单次查询速度很慢,则通过查询抽样来选择少部分用户的数据来快速验证猜想,观察趋势。在最终确定要关注和考核的具体指标时,则可以选择全量查询来获取精确的数值。