聊聊數(shù)倉(cāng)建模之 ID Mapping
顧名思義我們知道ID Mapping 的操作對(duì)象是ID,目標(biāo)或者是動(dòng)作是Mapping,也就是說(shuō)我們要做的事情其實(shí)就是想把不同平臺(tái)不同設(shè)備上的ID 打通,從而更好的去刻畫(huà)用戶(hù),也就是說(shuō)我們希望能打通用戶(hù)各個(gè)維度的數(shù)據(jù),從而更好的去服務(wù)業(yè)務(wù)服務(wù)用戶(hù)。
通常公司有產(chǎn)品矩陣,而每個(gè)產(chǎn)品都有自己的注冊(cè)賬號(hào)產(chǎn)生的用戶(hù)ID。從公司全局,整合用戶(hù)表,用戶(hù)行為數(shù)據(jù)來(lái)看,確定不同產(chǎn)品的用戶(hù)ID是相同一個(gè)人非常重要, 選取合適的用戶(hù)標(biāo)識(shí)對(duì)于提高用戶(hù)行為分析的準(zhǔn)確性有非常大的影響,尤其是對(duì)用戶(hù)畫(huà)像、推薦、漏斗、留存、Session 等用戶(hù)相關(guān)的分析功能。
其實(shí)對(duì)于任何分析都是一樣的,如果我們不能準(zhǔn)確標(biāo)識(shí)一個(gè)用戶(hù),那么我們的計(jì)算結(jié)果就沒(méi)有準(zhǔn)確性可言,其實(shí)對(duì)于數(shù)據(jù)服務(wù)方而言,數(shù)據(jù)的準(zhǔn)確性是我們的第一要?jiǎng)?wù),我們寧愿不出數(shù)據(jù),也不要出錯(cuò)誤的數(shù)據(jù)。
ID Mapping 的背景
網(wǎng)絡(luò)身份證
假如沒(méi)有網(wǎng)絡(luò)身份證,那么每個(gè)商家(App)只能基于自己的賬號(hào)體系標(biāo)識(shí)用戶(hù),并記錄用戶(hù)的行為。而有了統(tǒng)一的網(wǎng)絡(luò)身份證之后,各個(gè)商家之間的數(shù)據(jù)就可以打通了,天貓不僅知道用戶(hù)A在淘寶系的購(gòu)物數(shù)據(jù),也能了解到該用戶(hù)在社交網(wǎng)絡(luò)的行為,以及旅游的喜好,等等。
在現(xiàn)實(shí)的數(shù)據(jù)中,由于,用戶(hù)可能使用各種各樣的設(shè)備,有著各種各樣的前端入口,甚至同一個(gè)用戶(hù)擁有多個(gè)設(shè)備以及使用多種前端入口,就會(huì)導(dǎo)致,日志數(shù)據(jù)中對(duì)同一個(gè)人,不同時(shí)間段所收集到的日志數(shù)據(jù)中,可能取到的標(biāo)識(shí)個(gè)數(shù)、種類(lèi)各不相同。
比如用戶(hù)可能使用各種各樣的設(shè)備,其次是不同設(shè)備有不同的操作系統(tǒng),設(shè)置是軟件本身的版本也會(huì)影響我們對(duì)用戶(hù)的標(biāo)識(shí)。
- 手機(jī)、平板電腦、PC
- 安卓手機(jī)、ios手機(jī)、winphone手機(jī)
- 安卓系統(tǒng)有各種版本 ( 5.0 6.0 7.0 8.0 9.0 )
- ios系統(tǒng)也有各種版本(3.x 4.x 5.x 6.x 7.x … 12.x )
存在的問(wèn)題
- 用戶(hù)設(shè)備的標(biāo)識(shí),沒(méi)辦法輕易定制一個(gè)規(guī)則來(lái)取某個(gè)作為唯一標(biāo)識(shí):
- mac地址:手機(jī)網(wǎng)卡物理地址, 若干早期版本的ios,winphone,android可取到
- imei(入網(wǎng)許可證序號(hào)):安卓系統(tǒng)可取到,若干早期版本的ios,winphone可取到,運(yùn)營(yíng)商可取到
- imsi(手機(jī)SIM卡序號(hào)):安卓系統(tǒng)可取到,若干早期版本的ios,winphone可取到,運(yùn)營(yíng)商可取到
- androidid :安卓系統(tǒng)id
- openuuid(app自己生成的序號(hào)) :卸載重裝app就會(huì)變更
- IDFA(廣告跟蹤碼)
擴(kuò)展 IDFA
IDFA,英文全稱(chēng) Identifier for Advertising ,可以理解為廣告id,蘋(píng)果公司提供的用于追蹤用戶(hù)的廣告標(biāo)識(shí)符,可以用來(lái)打通不同app之間的廣告。每個(gè)設(shè)備只有一個(gè)IDFA,不同APP在同一設(shè)備上獲取IDFA的結(jié)果是一樣的。
蘋(píng)果為了保護(hù)用戶(hù)隱私,早在2012年就不再允許其生態(tài)中的玩家獲取用戶(hù)的唯一標(biāo)識(shí)符,但是商家在移動(dòng)端打廣告的時(shí)候又希望能監(jiān)控到每一次廣告投放的效果,因此,蘋(píng)果想出了折中的辦法,就是提供另外一套和硬件無(wú)關(guān)的標(biāo)識(shí)符,用于給商家監(jiān)測(cè)廣告效果,同時(shí)用戶(hù)可以在設(shè)置里改變這串字符,導(dǎo)致商家沒(méi)有辦法長(zhǎng)期跟蹤用戶(hù)行為。這個(gè)就叫做廣告標(biāo)識(shí)符(IDFA),設(shè)置路徑是“設(shè)置->隱私->廣告->還原廣告標(biāo)識(shí)符”,如下圖所示(iOS9):
img
常見(jiàn)的標(biāo)識(shí)
設(shè)備 ID
需要注意的是,設(shè)備 ID 并不一定是設(shè)備的唯一標(biāo)識(shí)。例如 Web 端的 Cookies 有可能被清空(例如各種安全衛(wèi)士),而 iOS 端的 IDFV( Identifier For Vendor)在不同廠商的 App 間是不同的,而且重新安裝IDFV會(huì)被重置。
設(shè)備 | 規(guī)則 |
Android | 1.10.5 之前版本,默認(rèn)使用 UUID(例如:550e8400-e29b-41d4-a716-446655440000),App 卸載重裝 UUID 會(huì)變,為了保證設(shè)備 ID 不變,可以通過(guò)配置使用 AndroidId(例如:774d56d682e549c3);1.10.5 及之后的版本 SDK 默認(rèn)使用 AndroidId 作為設(shè)備 ID,如果 AndroidId 獲取不到則獲取隨機(jī)的 UUID。 |
iOS | 1.10.18 及之后版本,如果 App 引入了 AdSupport 庫(kù),SDK 默認(rèn)使用 IDFA 作為匿名 ID。1.10.18 之前版本,可以?xún)?yōu)先使用 IDFV(例如:1E2DFA10-236A-47UD-6641-AB1FC4E6483F),如果 IDFV 獲取失敗,則使用隨機(jī)的 UUID(例如:550e8400-e29b-41d4-a716-446655440000),一般情況下都能夠獲取到 IDFV。如果使用 IDFV 或 UUID ,當(dāng)用戶(hù)卸載重裝 App 時(shí)設(shè)備 ID 會(huì)變。也可以通過(guò)配置使用 IDFA(例如:1E2DFA89-496A-47FD-9941-DF1FC4E6484A),如果開(kāi)啟 IDFA ,可以?xún)?yōu)先獲取 IDFA,如果獲取失敗再?lài)L試獲取 IDFV。使用 IDFA 能避免用戶(hù)在重裝 App 后設(shè)備 ID 發(fā)生變化的情況,需要注意的是IDFA 也是可以被重置的 |
登錄 ID
登錄 ID 通常是業(yè)務(wù)數(shù)據(jù)庫(kù)里的主鍵或其它唯一標(biāo)識(shí)。所以 登錄 ID,相對(duì)來(lái)說(shuō)更精確更持久。但是,用戶(hù)在使用時(shí)不一定注冊(cè)或者登錄,而這個(gè)時(shí)候是沒(méi)有登錄 ID 的。
平臺(tái) ID
設(shè)備 | 規(guī)則 |
JavaScript | 默認(rèn)情況下使用 cookie_id(例如:15ffdb0a3f898-02045d1cb7be78-31126a5d-250125-15ffdb0a3fa40a),cookie_id 存貯在瀏覽器的 cookie 中,依然有被重置的風(fēng)險(xiǎn) 這里還有一個(gè)問(wèn)題,就是 cookie 只能隸屬于同一個(gè)域名,也就是說(shuō)你訪問(wèn)郵箱的 cookie ,與百度廣的 cookie 并不是同一個(gè),所以在網(wǎng)站與網(wǎng)站也要做 ID Mapping ,這就是為什么你在百度上搜索了“養(yǎng)生”,到購(gòu)物網(wǎng)站上就會(huì)給你推薦“枸杞”。 |
微信小程序 | 默認(rèn)情況下使用 UUID(例如:1558509239724-9278730-00c1875d5f63f8-41373096),但是刪除小程序,UUID 會(huì)變。為了保證設(shè)備 ID 不變,建議獲取并使用 openid(例如:oWDMZ0WHqfsjIz7A9B2XNQOWmN3E)。如果選擇使用 openid 的話(huà),請(qǐng)注意【操作暫存】,由于獲取 openid 是一個(gè)異步的操作,但是冷啟動(dòng)事件等會(huì)先發(fā)生,這時(shí)候這個(gè)冷啟動(dòng)事件的 distinct_id 就不對(duì)了。所以我們會(huì)把先發(fā)生的操作,暫存起來(lái),等獲取到 openid 等后調(diào)用 sa.init() 后才會(huì)發(fā)送數(shù)據(jù)。openid 的獲取和操作暫存的方法。 |
其實(shí)這里的平臺(tái)指的一些大的生態(tài)系統(tǒng),例如微信的生態(tài)、今日頭條等,我們很多依賴(lài)這些平臺(tái)的應(yīng)用就可以使用用戶(hù)在這些平臺(tái)上的用戶(hù)標(biāo)識(shí)作為標(biāo)識(shí),當(dāng)然我們也可以在此基礎(chǔ)上為我們自己平臺(tái)上的用戶(hù)創(chuàng)建屬于本平臺(tái)的用戶(hù)表示,往往就是用戶(hù)的登錄ID。
方案詳解
因此,我們?cè)谶M(jìn)行任何數(shù)據(jù)接入之前,都應(yīng)當(dāng)先確定如何來(lái)標(biāo)識(shí)用戶(hù)。下面會(huì)介紹幾種用戶(hù)標(biāo)識(shí)方案的原理,以及幾種典型情況下的用戶(hù)標(biāo)識(shí)方案。
方案一:只使用設(shè)備 ID
適合沒(méi)有用戶(hù)注冊(cè)體系,或者極少數(shù)用戶(hù)會(huì)進(jìn)行多設(shè)備登錄的產(chǎn)品,如工具類(lèi)產(chǎn)品、搜索引擎、部分電商等。這也是絕大多數(shù)其它數(shù)據(jù)分析產(chǎn)品唯一提供的方案。
局限性
- 同一用戶(hù)在不同設(shè)備使用會(huì)被認(rèn)為不同的用戶(hù),對(duì)后續(xù)的分析統(tǒng)計(jì)有影響。
- 不同用戶(hù)在相同設(shè)備使用會(huì)被認(rèn)為是一個(gè)用戶(hù),也對(duì)后續(xù)的分析統(tǒng)計(jì)有影響。
- 但如果用戶(hù)跨設(shè)備使用或者多用戶(hù)共用設(shè)備不是產(chǎn)品的常見(jiàn)場(chǎng)景的話(huà),可以忽略上述問(wèn)題。
方案二:關(guān)聯(lián)設(shè)備 ID 和登錄 ID(一對(duì)一)
僅使用 設(shè)備 ID 標(biāo)識(shí)用戶(hù)雖然簡(jiǎn)單,但是對(duì)于某些應(yīng)用場(chǎng)景這種方式不夠準(zhǔn)確,因此我們可以采用 設(shè)備 ID 和 登錄 ID 的方案,在一定程度上融合 設(shè)備 ID 和 登錄 ID,從而實(shí)現(xiàn)更準(zhǔn)確的用戶(hù)追蹤。
成功關(guān)聯(lián)設(shè)備 ID 和登錄 ID 之后,用戶(hù)在該設(shè)備 ID 上或該登錄 ID 下的行為就會(huì)貫通,被認(rèn)為是一個(gè)用戶(hù) ID 發(fā)生的。在進(jìn)行事件、漏斗、留存等用戶(hù)相關(guān)分析時(shí)也會(huì)算作一個(gè)用戶(hù)。
關(guān)聯(lián)設(shè)備 ID 和登錄 ID 的方法雖然實(shí)現(xiàn)了更準(zhǔn)確的用戶(hù)追蹤,但是也會(huì)增加埋點(diǎn)接入的復(fù)雜度。所以一般來(lái)說(shuō),我們建議只有當(dāng)同時(shí)滿(mǎn)足以下條件時(shí),才考慮進(jìn)行 ID 關(guān)聯(lián):
- 需要貫通一個(gè)用戶(hù)在一個(gè)設(shè)備上注冊(cè)前后的行為。
- 需要貫通一個(gè)注冊(cè)用戶(hù)在不同設(shè)備上登錄之后的行為。
局限性
- 一個(gè)設(shè)備 ID 只能和一個(gè)登錄 ID 關(guān)聯(lián),而事實(shí)上一臺(tái)設(shè)備可能有多個(gè)用戶(hù)使用。
- 一個(gè)登錄 ID 只能和一個(gè)設(shè)備 ID 關(guān)聯(lián),而事實(shí)上一個(gè)用戶(hù)可能用一個(gè)登錄 ID 在多臺(tái)設(shè)備上登錄。
方案三:關(guān)聯(lián)設(shè)備 ID 和登錄 ID(多對(duì)一)
關(guān)聯(lián)設(shè)備 ID 和登錄 ID(一對(duì)一)雖然已經(jīng)實(shí)現(xiàn)了跨設(shè)備的用戶(hù)貫通,但是對(duì)于某些應(yīng)用場(chǎng)景還是不夠準(zhǔn)確,因此這里提供一個(gè)新的關(guān)聯(lián)方案,支持一個(gè)登錄 ID 綁定多個(gè)設(shè)備 ID 的方案,從而實(shí)現(xiàn)更準(zhǔn)確的用戶(hù)追蹤。
也就是跨端,其實(shí)這是非常常見(jiàn)的一種場(chǎng)景,例如你在PC 端和 移動(dòng)端使用同一個(gè)產(chǎn)品。
一個(gè)用戶(hù)在多個(gè)設(shè)備上進(jìn)行登錄是一種比較常見(jiàn)的場(chǎng)景,比如 Web 端和 App 端可能都需要進(jìn)行登錄。支持一個(gè)登錄 ID 下關(guān)聯(lián)多設(shè)備 ID 之后,用戶(hù)在多設(shè)備下的行為就會(huì)貫通,被認(rèn)為是一個(gè)ID 發(fā)生的。
局限性
- 一個(gè)設(shè)備 ID 只能和一個(gè)登錄 ID 關(guān)聯(lián),而事實(shí)上一臺(tái)設(shè)備可能有多個(gè)用戶(hù)使用 多用戶(hù)使用同一個(gè)設(shè)備這個(gè)問(wèn)題是無(wú)解的。
- 一個(gè)設(shè)備 ID 一旦跟某個(gè)登錄 ID 關(guān)聯(lián)或者一個(gè)登錄 ID 和一個(gè)設(shè)備 ID 關(guān)聯(lián),就不能解除(自動(dòng)解除)。而事實(shí)上,設(shè)備 ID 和登錄 ID 的動(dòng)態(tài)關(guān)聯(lián)才應(yīng)該是更合理的。
方案對(duì)比
將上述三個(gè)方案放到一起,可以明顯看到三種方案的區(qū)別,如下表所示:
- 方案一:僅使用設(shè)備 ID,不管用戶(hù)是誰(shuí),只要設(shè)備未變,設(shè)備ID 就不變,即使多人使用同一個(gè)設(shè)備,也會(huì)被識(shí)別為同一個(gè)用戶(hù)。
- 方案二:關(guān)聯(lián)設(shè)備 ID 和登錄 ID(一對(duì)一),
當(dāng)用戶(hù)換手機(jī)后,登錄賬號(hào)之后的行為與換手機(jī)之前的行為貫通了,但是在新設(shè)備上首次登錄之前的行為仍沒(méi)法貫通,仍被識(shí)別為新的用戶(hù)的行為。
當(dāng)用戶(hù)把舊手機(jī)送給朋友之后,由于舊手機(jī)已被關(guān)聯(lián)到自己的登錄 ID 了,無(wú)法再與朋友的登錄 ID 關(guān)聯(lián)。后續(xù)使用這臺(tái)舊手機(jī)的用戶(hù)們,若不登錄就操作,則都會(huì)被識(shí)別為同一個(gè)用戶(hù)。
- 方案三:關(guān)聯(lián)設(shè)備 ID 和登錄 ID(多對(duì)一)
當(dāng)用戶(hù)把舊手機(jī)送給朋友之后,由于舊手機(jī)已被關(guān)聯(lián)到自己的登錄 ID 了,無(wú)法再與朋友的登錄 ID 關(guān)聯(lián)。后續(xù)使用這臺(tái)舊手機(jī)的用戶(hù)們,若不登錄就操作,則都會(huì)被識(shí)別為同一個(gè)用戶(hù))。
而事實(shí)上,舊手機(jī)上后續(xù)的匿名登錄很難識(shí)別到底是誰(shuí),可能歸為匿名登錄之前最近一次登錄的用戶(hù)會(huì)更合理一些。
其實(shí),三種方案沒(méi)有對(duì)與錯(cuò),我們應(yīng)該結(jié)合自己的業(yè)務(wù)場(chǎng)景以及埋點(diǎn)復(fù)雜度來(lái)選擇合適的方案。
總結(jié)
ID Mapping 就如同它的名字一樣,我們要做的就是將一系列的ID 關(guān)聯(lián)起來(lái),一些列的ID 可能是用戶(hù)在不同平臺(tái)上的標(biāo)識(shí),也可能是用戶(hù)在不同設(shè)備上的標(biāo)識(shí),也可能是用戶(hù)在不同狀態(tài)下的標(biāo)識(shí),總之我們就是要將這一系列的ID 關(guān)聯(lián)起來(lái),盡可能地將用戶(hù)的數(shù)據(jù)打通,從而提供更加全面準(zhǔn)確的分析。
我們知道只有打破數(shù)據(jù)孤島數(shù)據(jù)才能發(fā)揮更大的價(jià)值,可能很多人都知道數(shù)據(jù)倉(cāng)庫(kù)的數(shù)據(jù)集成環(huán)節(jié)其實(shí)就是為了打破數(shù)據(jù)孤島,其實(shí)我們的ID Mapping 也是為了打破數(shù)據(jù)孤島,其實(shí)ID Mapping 就兩個(gè)使命 1. 多端數(shù)據(jù)的識(shí)別;2. 多源數(shù)據(jù)的打通,其他的都是基于ID Mapping 的應(yīng)用。