數據埋點:用戶唯一標識

24 評論 31862 瀏覽 185 收藏 7 分鐘

用戶唯一標識,是用戶唯一的身份ID,相同的身份ID,就會被當做是相同的一個用戶。

01?為什么要建設用戶唯一標識

如何區分某個用戶就是他這個用戶,而不是另一個用戶,在數據埋點中,是一個非常重要的事情。因為如果做不到用戶的唯一識別,那凡是涉及到用戶的數據都將是錯的(比如用戶量、新增用戶數、活躍用戶數等等)。所以建設用戶唯一標識,尤為重要。

02?基本概念

設計埋點字段的時候,有兩個字段是一定要包括的,即設備ID和用戶ID。這兩個字段應該納入通用字段,每個埋點的事件都必須要集成收集。

(1)設備ID

使用相應的算法,生成一個設備ID,以唯一識別用戶的終端設備。不同終端的設備ID,其生成算法規則不一樣,以下列舉不同終端的設備ID的生成規則:

AndroidApp

安卓系統歷經多次升級,對權限控制越來越嚴格,唯一識別手機的方法也在發生變化。下面整理一下安卓系統適合做設備唯一標識符的幾個標識符,以及其特性:

數據埋點-用戶唯一標識

從表格中看出,IMEI是最適合做設備唯一標識的,奈何獲取IMEI需要授予權限且Android 10以后不再開放IMEI的權限。綜合起來,安卓系統中,應該按照IMEI ->OAID -> ANDROID_ID的順序生成設備ID。即先獲取IMEI號,獲取不到IMEI時獲取OAID,獲取不到OAID時,再獲取ANDROID_ID,然后使用相關算法生成設備ID。

IOS App

蘋果系統,可用于識別唯一設備的標識不多,如下圖。綜合起來,蘋果系統生成設備ID的標識符順序應該是IDFA -> IDFV ->UDID,即先獲取IDFA,獲取不到在獲取IDFV,獲取不到IDFV時,再獲取UDID,然后使用相關算法生成一個設備ID。

數據埋點-用戶唯一標識

Web網站

Web網站,使用cookie_id作為設備ID,并存儲在瀏覽器的cookie中。

微信小程序

通常做法使用openid作為設備ID,當然也可以自己生產一個ID,作為設備ID。如果用過openid作為設備ID,需要注意微信小程序的冷啟動問題(獲取 openid 是一個異步的操作,所以會導致數據上報的時候,可能還沒獲取到openid,這就是導致設備ID為空)。

2)用戶ID

用戶ID,即用戶在業務產品注冊的用戶賬號。

收集到設備ID和用戶ID后,就要想辦法將設備ID和用戶ID關聯起來,也即用戶唯一標識建模,詳見下文。

03?用戶唯一標識建設

設計一個字段,比如就叫distinct_id(設備ID命名為device_id,用戶ID命名為user_id)這個字段用于識別唯一用戶。凡是統計用戶相關的數據時,都以distinct_id作為用戶的唯一區別標識。下面,以具體案例進行闡述。

數據埋點-用戶唯一標識

步驟說明:

  1. 小明在一部手機上啟動了app。該手機的device_id為x1,此時生成一個dsitinct_id為d1;
  2. 小明在這個手機上用賬號u1進行登錄。此時device_id為x1,user_id為u1,dsitinct_id為d1;
  3. 小明繼續在這手機上使用app。此時device_id為x1,user_id為u1,dsitinct_id為d1;
  4. 小明退出自己的賬號,繼續使用app。此時仍然device_id為x1,user_id為u1,dsitinct_id為d1;
  5. 小明把手機給了小花,小花用自己的賬號u2登錄app。此時u2去關聯x1,因為x1已經與u1關聯,故關聯失敗。所以重新生成一個distinct_id為d2來標識此用戶(u2);
  6. 小花繼續使用app。此時device_id為x1,user_id為u2,dsitinct_id為d2;
  7. 小明換了部新手機,使用app。此時device_id為一個新的x2,后臺生成一個新的dsitinct_id為d3;
  8. 小明在新手機上,使用賬號u1登錄了app。此時u1去關聯x2,因為x2之前沒有與賬號關聯過,所以關聯成功,但是u1已經有一個dsitinct_id為d1,所以此時的dsitinct_id仍然為d1;
  9. 小明繼續在新手機上使用app。此時device_id為x2,user_id為u1,dsitinct_id為d1。

此時三個字段的映射關系為:

數據埋點-用戶唯一標識

(1)后續修復

事件字段修復

小明換新手機后,在登錄前,系統給分配的dsitinct_id為d3,不符合實際情況,故要將在新手機上登錄前的dsitinct_id修復為d1。如下:

數據埋點-用戶唯一標識

映射表修復

1)刪除d3與x2的映射關系

2)將x2添加到d1的device_id_list字段

數據埋點-用戶唯一標識

 

本文由 @如琴留音 原創發布于人人都是產品經理。未經許可,禁止轉載

題圖來自Unsplash,基于CC0協議

更多精彩內容,請關注人人都是產品經理微信公眾號或下載App
評論
評論請登錄
  1. 『新手機上登錄前的dsitinct_id修復為d1』 確實在新的行為中能很好的識別為同一個用戶。但是歷史行為的數據要還要處理(在換新手機且未登錄的情況下產生的行為數據),請問有沒有好的辦法?

    來自北京 回復
  2. 請問一下,小明把手機給小紅用了,但是小紅是在沒有登錄的情況下使用,這時候的行為是算誰的行為數據

    回復
    1. 4、小明退出自己的賬號,繼續使用app。此時仍然device_id為x1,user_id為u1,dsitinct_id為d1;

      來自浙江 回復
    2. 我理解,同一部設備,原賬號退出,只要在沒有新賬號登錄的情況都是認為是上一個賬號的行為。因為我們沒有手段去確認是否換人了。我感覺可行的是利用行為分析,現在的行為和上個賬號行為存在差異了認為是一個新賬號,但是會誤殺。一個技術的理解。

      來自北京 回復
  3. 我請教個問題,按照你的舉例,如果設備登錄小明和小紅的賬號(設備X1被兩個用戶ID都綁定了),此時設備退出了登錄的情況使用,設備是采用d1還是d2?

    來自廣東 回復
    1. 同問

      來自廣東 回復
    2. 最后一次的distinct_id吧,因為在最后一次用戶登錄的時候distinct_id已經被修正了;

      來自上海 回復
    3. d1是小明的話
      d2是小紅的話
      設備退出了 就是d3

      來自浙江 回復
  4. 請問你們埋點是接的三方服務嗎?

    來自北京 回復
  5. 哎,這也不是您的原創。這是神策數據對用戶標示的闡述啊。 你說的distinctid在大部分公司很難解決的。大部分使用的匿名ID和userID。

    回復
    1. 建設思路是參考神策的,之所以后面的例子也是用的它的例子,是因為人家神策這個例子很好,我沒必要在另外寫一套了。畢竟,最重要的是讓大家知道怎么做嘛

      回復
  6. 沒明白啊 最終的結果還是用戶ID是唯一的表示啊 跟設備id沒關系啊

    來自浙江 回復
    1. 表面上看起來,用戶user_id作為唯一標識也沒問題,因為user_id和dsitinct_id是一一對應的

      但是如果將user_id作為唯一標識的話,會有什么為題呢?
      1、不清楚登錄前和登錄后的行為是否是同一個用戶,因為登錄前的用戶ID為空。而dsitinct_id則不會有這個問題
      2、現實業務場景中,很多用戶都不會登錄賬號,這個時候用user_id算用戶量的話,就是不準確的,因為很多user_id為空

      而使用device_id作為用戶唯一標識符呢?
      使用device_id作為唯一標識符的話,那自己產品的賬號體系就完全失效了,明顯就不符合業務需求了

      同一個賬號可登陸多個設備,同一個設備也可登陸多個賬號,登錄賬號前和登錄賬號后,到底用設備ID還是用戶ID作為用戶唯一標識呢,問題就復雜了。而引入了distinct_id的概念后,統一用distinct_id作為用戶標識符,就簡單很多了。

      來自廣東 回復
    2. 怎么知道是小明換了把手機而不是另一個用戶未登錄使用呢

      來自福建 回復
    3. 那請問一下,如果小名換的是一部舊手機,剛好這個舊手機也被其他人未登錄使用過并且產生了使用數據,這時候小明再去進行使用并登錄,那么小明更換后的手機未登錄前的數據算誰的呢?

      來自廣東 回復
  7. dsitinct_id 以什么樣的規則生成呢? 應用卸載后,如果沒有用戶的情況下,將如何?

    來自浙江 回復
    1. 記錄的是用戶數據,即使卸載了,也不影響數據庫里的數據啊

      來自浙江 回復
  8. 不錯 學到了

    回復
  9. 您的d1 d2 最后就是u1 u2呢 hhh

    來自上海 回復
    1. 記了設備id

      回復
  10. 您好,方便加一下聯系方式嗎?

    來自河北 回復
    1. 能方便透露一下,是什么事嗎?

      來自廣東 回復
    2. 大概是想擴列吧

      來自浙江 回復
    3. 擴列,這是00后才懂的交友方式

      來自上海 回復