數(shù)據(jù)埋點(diǎn):用戶唯一標(biāo)識(shí)

24 評(píng)論 32725 瀏覽 185 收藏 7 分鐘

用戶唯一標(biāo)識(shí),是用戶唯一的身份ID,相同的身份ID,就會(huì)被當(dāng)做是相同的一個(gè)用戶。

01?為什么要建設(shè)用戶唯一標(biāo)識(shí)

如何區(qū)分某個(gè)用戶就是他這個(gè)用戶,而不是另一個(gè)用戶,在數(shù)據(jù)埋點(diǎn)中,是一個(gè)非常重要的事情。因?yàn)槿绻霾坏接脩舻奈ㄒ蛔R(shí)別,那凡是涉及到用戶的數(shù)據(jù)都將是錯(cuò)的(比如用戶量、新增用戶數(shù)、活躍用戶數(shù)等等)。所以建設(shè)用戶唯一標(biāo)識(shí),尤為重要。

02?基本概念

設(shè)計(jì)埋點(diǎn)字段的時(shí)候,有兩個(gè)字段是一定要包括的,即設(shè)備ID和用戶ID。這兩個(gè)字段應(yīng)該納入通用字段,每個(gè)埋點(diǎn)的事件都必須要集成收集。

(1)設(shè)備ID

使用相應(yīng)的算法,生成一個(gè)設(shè)備ID,以唯一識(shí)別用戶的終端設(shè)備。不同終端的設(shè)備ID,其生成算法規(guī)則不一樣,以下列舉不同終端的設(shè)備ID的生成規(guī)則:

AndroidApp

安卓系統(tǒng)歷經(jīng)多次升級(jí),對權(quán)限控制越來越嚴(yán)格,唯一識(shí)別手機(jī)的方法也在發(fā)生變化。下面整理一下安卓系統(tǒng)適合做設(shè)備唯一標(biāo)識(shí)符的幾個(gè)標(biāo)識(shí)符,以及其特性:

數(shù)據(jù)埋點(diǎn)-用戶唯一標(biāo)識(shí)

從表格中看出,IMEI是最適合做設(shè)備唯一標(biāo)識(shí)的,奈何獲取IMEI需要授予權(quán)限且Android 10以后不再開放IMEI的權(quán)限。綜合起來,安卓系統(tǒng)中,應(yīng)該按照IMEI ->OAID -> ANDROID_ID的順序生成設(shè)備ID。即先獲取IMEI號(hào),獲取不到IMEI時(shí)獲取OAID,獲取不到OAID時(shí),再獲取ANDROID_ID,然后使用相關(guān)算法生成設(shè)備ID。

IOS App

蘋果系統(tǒng),可用于識(shí)別唯一設(shè)備的標(biāo)識(shí)不多,如下圖。綜合起來,蘋果系統(tǒng)生成設(shè)備ID的標(biāo)識(shí)符順序應(yīng)該是IDFA -> IDFV ->UDID,即先獲取IDFA,獲取不到在獲取IDFV,獲取不到IDFV時(shí),再獲取UDID,然后使用相關(guān)算法生成一個(gè)設(shè)備ID。

數(shù)據(jù)埋點(diǎn)-用戶唯一標(biāo)識(shí)

Web網(wǎng)站

Web網(wǎng)站,使用cookie_id作為設(shè)備ID,并存儲(chǔ)在瀏覽器的cookie中。

微信小程序

通常做法使用openid作為設(shè)備ID,當(dāng)然也可以自己生產(chǎn)一個(gè)ID,作為設(shè)備ID。如果用過openid作為設(shè)備ID,需要注意微信小程序的冷啟動(dòng)問題(獲取 openid 是一個(gè)異步的操作,所以會(huì)導(dǎo)致數(shù)據(jù)上報(bào)的時(shí)候,可能還沒獲取到openid,這就是導(dǎo)致設(shè)備ID為空)。

2)用戶ID

用戶ID,即用戶在業(yè)務(wù)產(chǎn)品注冊的用戶賬號(hào)。

收集到設(shè)備ID和用戶ID后,就要想辦法將設(shè)備ID和用戶ID關(guān)聯(lián)起來,也即用戶唯一標(biāo)識(shí)建模,詳見下文。

03?用戶唯一標(biāo)識(shí)建設(shè)

設(shè)計(jì)一個(gè)字段,比如就叫distinct_id(設(shè)備ID命名為device_id,用戶ID命名為user_id)這個(gè)字段用于識(shí)別唯一用戶。凡是統(tǒng)計(jì)用戶相關(guān)的數(shù)據(jù)時(shí),都以distinct_id作為用戶的唯一區(qū)別標(biāo)識(shí)。下面,以具體案例進(jìn)行闡述。

數(shù)據(jù)埋點(diǎn)-用戶唯一標(biāo)識(shí)

步驟說明:

  1. 小明在一部手機(jī)上啟動(dòng)了app。該手機(jī)的device_id為x1,此時(shí)生成一個(gè)dsitinct_id為d1;
  2. 小明在這個(gè)手機(jī)上用賬號(hào)u1進(jìn)行登錄。此時(shí)device_id為x1,user_id為u1,dsitinct_id為d1;
  3. 小明繼續(xù)在這手機(jī)上使用app。此時(shí)device_id為x1,user_id為u1,dsitinct_id為d1;
  4. 小明退出自己的賬號(hào),繼續(xù)使用app。此時(shí)仍然device_id為x1,user_id為u1,dsitinct_id為d1;
  5. 小明把手機(jī)給了小花,小花用自己的賬號(hào)u2登錄app。此時(shí)u2去關(guān)聯(lián)x1,因?yàn)閤1已經(jīng)與u1關(guān)聯(lián),故關(guān)聯(lián)失敗。所以重新生成一個(gè)distinct_id為d2來標(biāo)識(shí)此用戶(u2);
  6. 小花繼續(xù)使用app。此時(shí)device_id為x1,user_id為u2,dsitinct_id為d2;
  7. 小明換了部新手機(jī),使用app。此時(shí)device_id為一個(gè)新的x2,后臺(tái)生成一個(gè)新的dsitinct_id為d3;
  8. 小明在新手機(jī)上,使用賬號(hào)u1登錄了app。此時(shí)u1去關(guān)聯(lián)x2,因?yàn)閤2之前沒有與賬號(hào)關(guān)聯(lián)過,所以關(guān)聯(lián)成功,但是u1已經(jīng)有一個(gè)dsitinct_id為d1,所以此時(shí)的dsitinct_id仍然為d1;
  9. 小明繼續(xù)在新手機(jī)上使用app。此時(shí)device_id為x2,user_id為u1,dsitinct_id為d1。

此時(shí)三個(gè)字段的映射關(guān)系為:

數(shù)據(jù)埋點(diǎn)-用戶唯一標(biāo)識(shí)

(1)后續(xù)修復(fù)

事件字段修復(fù)

小明換新手機(jī)后,在登錄前,系統(tǒng)給分配的dsitinct_id為d3,不符合實(shí)際情況,故要將在新手機(jī)上登錄前的dsitinct_id修復(fù)為d1。如下:

數(shù)據(jù)埋點(diǎn)-用戶唯一標(biāo)識(shí)

映射表修復(fù)

1)刪除d3與x2的映射關(guān)系

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

數(shù)據(jù)埋點(diǎn)-用戶唯一標(biāo)識(shí)

 

本文由 @如琴留音 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理。未經(jīng)許可,禁止轉(zhuǎn)載

題圖來自Unsplash,基于CC0協(xié)議

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

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

    回復(fù)
    1. 4、小明退出自己的賬號(hào),繼續(xù)使用app。此時(shí)仍然device_id為x1,user_id為u1,dsitinct_id為d1;

      來自浙江 回復(fù)
    2. 我理解,同一部設(shè)備,原賬號(hào)退出,只要在沒有新賬號(hào)登錄的情況都是認(rèn)為是上一個(gè)賬號(hào)的行為。因?yàn)槲覀儧]有手段去確認(rèn)是否換人了。我感覺可行的是利用行為分析,現(xiàn)在的行為和上個(gè)賬號(hào)行為存在差異了認(rèn)為是一個(gè)新賬號(hào),但是會(huì)誤殺。一個(gè)技術(shù)的理解。

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

    來自廣東 回復(fù)
    1. 同問

      來自廣東 回復(fù)
    2. 最后一次的distinct_id吧,因?yàn)樵谧詈笠淮斡脩舻卿浀臅r(shí)候distinct_id已經(jīng)被修正了;

      來自上海 回復(fù)
    3. d1是小明的話
      d2是小紅的話
      設(shè)備退出了 就是d3

      來自浙江 回復(fù)
  4. 請問你們埋點(diǎn)是接的三方服務(wù)嗎?

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

    回復(fù)
    1. 建設(shè)思路是參考神策的,之所以后面的例子也是用的它的例子,是因?yàn)槿思疑癫哌@個(gè)例子很好,我沒必要在另外寫一套了。畢竟,最重要的是讓大家知道怎么做嘛

      回復(fù)
  6. 沒明白啊 最終的結(jié)果還是用戶ID是唯一的表示啊 跟設(shè)備id沒關(guān)系啊

    來自浙江 回復(fù)
    1. 表面上看起來,用戶user_id作為唯一標(biāo)識(shí)也沒問題,因?yàn)閡ser_id和dsitinct_id是一一對應(yīng)的

      但是如果將user_id作為唯一標(biāo)識(shí)的話,會(huì)有什么為題呢?
      1、不清楚登錄前和登錄后的行為是否是同一個(gè)用戶,因?yàn)榈卿浨暗挠脩鬒D為空。而dsitinct_id則不會(huì)有這個(gè)問題
      2、現(xiàn)實(shí)業(yè)務(wù)場景中,很多用戶都不會(huì)登錄賬號(hào),這個(gè)時(shí)候用user_id算用戶量的話,就是不準(zhǔn)確的,因?yàn)楹芏鄒ser_id為空

      而使用device_id作為用戶唯一標(biāo)識(shí)符呢?
      使用device_id作為唯一標(biāo)識(shí)符的話,那自己產(chǎn)品的賬號(hào)體系就完全失效了,明顯就不符合業(yè)務(wù)需求了

      同一個(gè)賬號(hào)可登陸多個(gè)設(shè)備,同一個(gè)設(shè)備也可登陸多個(gè)賬號(hào),登錄賬號(hào)前和登錄賬號(hào)后,到底用設(shè)備ID還是用戶ID作為用戶唯一標(biāo)識(shí)呢,問題就復(fù)雜了。而引入了distinct_id的概念后,統(tǒng)一用distinct_id作為用戶標(biāo)識(shí)符,就簡單很多了。

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

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

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

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

      來自浙江 回復(fù)
  8. 不錯(cuò) 學(xué)到了

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

    來自上海 回復(fù)
    1. 記了設(shè)備id

      回復(fù)
  10. 您好,方便加一下聯(lián)系方式嗎?

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

      來自廣東 回復(fù)
    2. 大概是想擴(kuò)列吧

      來自浙江 回復(fù)
    3. 擴(kuò)列,這是00后才懂的交友方式

      來自上海 回復(fù)