在神策分析 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. 使用場景

正如前面所描述的那樣,查詢抽樣反推出來的結果和真實的全量查詢結果會有出入,而且用戶規模越大,數據分佈越均勻,這個出入就會越小。當然,如果只是關注數據趨勢,則在少部分用戶群上做查詢抽樣,則查詢抽樣帶來的誤差通常就沒那麼重要了。

所以說,查詢抽樣主要是在數據量很大的情況下,單次查詢速度很慢,則通過查詢抽樣來選擇少部分用戶的數據來快速驗證猜想,觀察趨勢。在最終確定要關注和考核的具體指標時,則可以選擇全量查詢來獲取精確的數值。