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