數(shù)據(jù)埋點(diǎn):用戶唯一標(biāo)識(shí)
用戶唯一標(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í)符,以及其特性:
從表格中看出,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。
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)行闡述。
步驟說明:
- 小明在一部手機(jī)上啟動(dòng)了app。該手機(jī)的device_id為x1,此時(shí)生成一個(gè)dsitinct_id為d1;
- 小明在這個(gè)手機(jī)上用賬號(hào)u1進(jìn)行登錄。此時(shí)device_id為x1,user_id為u1,dsitinct_id為d1;
- 小明繼續(xù)在這手機(jī)上使用app。此時(shí)device_id為x1,user_id為u1,dsitinct_id為d1;
- 小明退出自己的賬號(hào),繼續(xù)使用app。此時(shí)仍然device_id為x1,user_id為u1,dsitinct_id為d1;
- 小明把手機(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);
- 小花繼續(xù)使用app。此時(shí)device_id為x1,user_id為u2,dsitinct_id為d2;
- 小明換了部新手機(jī),使用app。此時(shí)device_id為一個(gè)新的x2,后臺(tái)生成一個(gè)新的dsitinct_id為d3;
- 小明在新手機(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;
- 小明繼續(xù)在新手機(jī)上使用app。此時(shí)device_id為x2,user_id為u1,dsitinct_id為d1。
此時(shí)三個(gè)字段的映射關(guān)系為:
(1)后續(xù)修復(fù)
事件字段修復(fù)
小明換新手機(jī)后,在登錄前,系統(tǒng)給分配的dsitinct_id為d3,不符合實(shí)際情況,故要將在新手機(jī)上登錄前的dsitinct_id修復(fù)為d1。如下:
映射表修復(fù)
1)刪除d3與x2的映射關(guān)系
2)將x2添加到d1的device_id_list字段
本文由 @如琴留音 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理。未經(jīng)許可,禁止轉(zhuǎn)載
題圖來自Unsplash,基于CC0協(xié)議
『新手機(jī)上登錄前的dsitinct_id修復(fù)為d1』 確實(shí)在新的行為中能很好的識(shí)別為同一個(gè)用戶。但是歷史行為的數(shù)據(jù)要還要處理(在換新手機(jī)且未登錄的情況下產(chǎn)生的行為數(shù)據(jù)),請問有沒有好的辦法?
請問一下,小明把手機(jī)給小紅用了,但是小紅是在沒有登錄的情況下使用,這時(shí)候的行為是算誰的行為數(shù)據(jù)
4、小明退出自己的賬號(hào),繼續(xù)使用app。此時(shí)仍然device_id為x1,user_id為u1,dsitinct_id為d1;
我理解,同一部設(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ù)的理解。
我請教個(gè)問題,按照你的舉例,如果設(shè)備登錄小明和小紅的賬號(hào)(設(shè)備X1被兩個(gè)用戶ID都綁定了),此時(shí)設(shè)備退出了登錄的情況使用,設(shè)備是采用d1還是d2?
同問
最后一次的distinct_id吧,因?yàn)樵谧詈笠淮斡脩舻卿浀臅r(shí)候distinct_id已經(jīng)被修正了;
d1是小明的話
d2是小紅的話
設(shè)備退出了 就是d3
請問你們埋點(diǎn)是接的三方服務(wù)嗎?
哎,這也不是您的原創(chuàng)。這是神策數(shù)據(jù)對用戶標(biāo)示的闡述啊。 你說的distinctid在大部分公司很難解決的。大部分使用的匿名ID和userID。
建設(shè)思路是參考神策的,之所以后面的例子也是用的它的例子,是因?yàn)槿思疑癫哌@個(gè)例子很好,我沒必要在另外寫一套了。畢竟,最重要的是讓大家知道怎么做嘛
沒明白啊 最終的結(jié)果還是用戶ID是唯一的表示啊 跟設(shè)備id沒關(guān)系啊
表面上看起來,用戶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í)符,就簡單很多了。
怎么知道是小明換了把手機(jī)而不是另一個(gè)用戶未登錄使用呢
那請問一下,如果小名換的是一部舊手機(jī),剛好這個(gè)舊手機(jī)也被其他人未登錄使用過并且產(chǎn)生了使用數(shù)據(jù),這時(shí)候小明再去進(jìn)行使用并登錄,那么小明更換后的手機(jī)未登錄前的數(shù)據(jù)算誰的呢?
dsitinct_id 以什么樣的規(guī)則生成呢? 應(yīng)用卸載后,如果沒有用戶的情況下,將如何?
記錄的是用戶數(shù)據(jù),即使卸載了,也不影響數(shù)據(jù)庫里的數(shù)據(jù)啊
不錯(cuò) 學(xué)到了
您的d1 d2 最后就是u1 u2呢 hhh
記了設(shè)備id
您好,方便加一下聯(lián)系方式嗎?
能方便透露一下,是什么事嗎?
大概是想擴(kuò)列吧
擴(kuò)列,這是00后才懂的交友方式