產品運營中Oneid的實現,如何合理標識用戶的唯一性?

0 評論 12767 瀏覽 37 收藏 20 分鐘

編輯導語:產品運營的基礎是埋點,這一過程中要對用戶進行唯一性標識。為何要對用戶進行標識?什么是用戶標識?如何合理標識用戶的唯一性?帶著這些疑問,我們來看看作者的回答。

“平生不修善果,只愛殺人放火。忽地頓開金繩,這里扯斷玉鎖。錢塘江上潮信來,今日方知我是我”,這是魯智深生前在杭州六合寺對自己的人生總結和一生的感悟。

仿佛在此之前的魯智深處于一種非?;煦绲臓顟B,不清楚自己是誰,像隱匿了自己身份的一個人。直至到了六合寺聽到錢塘江上潮信的瞬間,頓時參透人生真諦,把之前所有的事情關聯起來,找到了最真實的自己。

那么,魯智深的事情與本文要提及的產品運營中Oneid的實現有什么關系呢?

我們都知道產品運營的基礎是埋點,埋點中對用戶進行唯一性標識猶如魯智深在聽到錢塘潮信悟透自己的平生一樣,即在某種場景下觸發匿名身份的用戶和真實身份用戶之間的關聯,進而把兩種狀態下用戶行為歸集為一個用戶,完成用戶的唯一性標識。

一、為何要對用戶進行標識?

用戶唯一標識,是用戶唯一的身份ID,相同的身份ID,就會被當做是相同的一個用戶。在進行埋點數據采集方案設計時,如何對用戶唯一性進行標識對數據準確性影響較大。

即如何區分某個用戶是此用戶,而非彼用戶是至關重要的,因為如果做不到對用戶的唯一性進行識別,那么凡是涉及到用戶的數據將都是不準確的,比如:累計用戶量、新增用戶量、活躍用戶量。

因此,選取合適的用戶標識對于提高用戶行為分析的準確性顯得尤為重要,尤其是諸如漏斗、留存、分群等用戶相關的分析。

二、什么是用戶標識?

在互聯網高速發展的今天,我們都在積極主動的融入這個世界,信息在高速流轉,不再像以前那樣閉塞。

各類互聯網產品也在以一種前所未有的開放態度擁抱其用戶,用戶在觸達一款應用時,可以在匿名(非登錄)狀態下使用應用中的大部分功能,此時用戶的匿名ID一般是指設備ID。

在支付、充值、積分等一些關鍵的業務環節,應用會要求用戶以某種方式進行登錄。目前比較常見的登錄方式主要是手機號,金融、政務、醫療、教育相關的應用除手機號以外,還支持身份證號、卡號等登錄方式,我們稱之為登錄ID,下圖是我們中原銀行手機銀行登錄界面示例。

產品運營中Oneid的實現—合理標識用戶的唯一性

目前常見的需要做用戶唯一性標識進而提升數據準確性的場景大致如下:

1. 一個用戶在多個設備上使用同一個應用,需要對該用戶的唯一性進行標識,進而把用戶的行為歸屬到同一個用戶上

比如:用戶A在移動設備X上使用中原銀行手機銀行瀏覽并購買了我行的中原如意寶這款年化高、可自主選擇投資期限、比較符合自己投資意愿的理財產品,購買過程包含匿名訪問、登錄等操作。

一周后,用戶A在另外一個移動設備Y上登錄我行的手機銀行查看了其購買的理財的收益情況。若不對用戶進行唯一性標識,埋點數據上報的用戶量是2個,而實際應該是1個用戶。

2. 與一個用戶在多個設備上使用同一個應用相對應的是:多個用戶在同一臺設備上操作同一個應用。詳細的場景介紹,這里就不再描述,大家自行腦補

在進行埋點方案設計時,為了對用戶唯一性進行標識,需要在方案中寫明如何采集用戶匿名狀態下的ID(設備ID)及登錄狀態下的登錄ID,這里分別以first_id、second_id命名,后續文中涉及到的first_id、second_id均指匿名ID、登錄ID。

基于采集到的與用戶相關的first_id與second_id,在行為分析系統后臺通過一定的關聯規則,生成一個能夠唯一標識用戶的user_id,在以后的分析過程中,與用戶量有關的指標均以user_id為基礎進行統計分析。

匿名ID即設備ID,在不同類型的客戶端上有所不同,且同一類型的客戶端上,設備ID也并非是唯一的。例如 Web 端的 Cookies 有可能被各種安全衛士清空,而 iOS 端的 IDFV 在不同廠商的 App 間是不同的。

1)Android端

安卓系統經過多次升級,對權限控制越來越嚴格,唯一識別手機的方法也在不斷發生變化。

Android端適合作為設備ID標識符的有OAID、Android_id、UUID、IMEI,IMEI是最適合做設備唯一標識的,但獲取IMEI需要授予權限且Android 10以后不再開放IMEI的權限,App 卸載重裝 UUID會發生變化。

綜合起來,Android端比較適合作為標識符的是Android_id,如果 Android_Id 獲取不到,則獲取隨機的UUID。

2)iOS端

蘋果系統,可用于識別唯一設備的標識不像Andriod那樣多。綜合起來,蘋果系統生成設備ID的標識符先后順序應該是IDFA -> IDFV ->UDID,即優先獲取IDFA,獲取不到再獲取IDFV,獲取不到時,再獲取UUID。

3)JavaScript

默認情況下使用 cookie_id,存貯在瀏覽器的cookie中。

4)微信小程序

一般使用UUID,但是刪除小程序,UUID 會變。為了保證設備 ID 不變,建議獲取并使用 openid。

如果選擇使用 openid 的話,請注意操作暫存,由于獲取 openid 是一個異步的操作,但是冷啟動事件等會先發生,所以我們會把先發生的操作,暫存起來,等獲取到 openid 后才會發送數據。

三、如何做用戶標識?

在介紹用戶標識的實現方法前,先帶大家了解一下,當前行為數據分析系統數據儲存的模型。

目前主流的數據儲存模型是用一張events表存儲與用戶相關的事件,其中event表中有個distinct_id字段,在事件發生時用戶如處于匿名狀態,則記錄設備ID,登錄狀態下記錄登錄ID,用users表用來儲存用戶的匿名ID(設備ID)、登錄ID、基于關聯規則生成的user_id等用戶屬性。

這樣通過events表和users表,就可以成功的把用戶與事件聯系在一起。

1. 用戶唯一性標識方案一:只使用設備ID進行標識

適用場景:適合沒有用戶注冊體系,或者極少數用戶會進行多設備登錄的產品,如工具類產品、搜索引擎、部分電商等。

場景舉例:

產品運營中Oneid的實現—合理標識用戶的唯一性

行為序列說明:

  1. 某用戶在華為手機上新安裝了 App,并進行了一系列操作,events表中distinct_id為設備ID,記為X,分配得到的user_id為1,同時把1、X分別存入users表中的user_id、first_id中。
  2. 該用戶進行了注冊并登錄,設備未變,發送的 distinct_id 仍為 X,user_id仍為1。
  3. 該用戶登錄之后繼續進行一系列操作,發送的 distinct_id 仍 為 X,user_id仍為1。
  4. 該用戶把手機送給朋友了,朋友用自己的賬號登錄設備 X,發送的distinct_id 仍為 X,user_id仍為1。
  5. 該用戶的朋友一直使用自己的賬號在設備 X 上進行了一系列操作,由于設備未變,所以user_id仍為1。
  6. 該用戶更換了新的小米手機,進行一系列操作,此時設備ID 變為Y,發送的 distinct_id 為 Y,分配的user_id為 2,則將user_id 2、設備ID Y 存入 users 表的 id, first_id 字段。該用戶登錄之后的后續操作,都會以user_id 2標識,只要不更換設備。

在上述場景中,僅使用設備 ID 識別用戶的好處就是邏輯很簡單,當然局限性也很明顯:

  • 當用戶換手機后,用戶換手機前后的行為無法關聯上。
  • 當用戶把手機送給朋友后,朋友的行為卻仍記在該用戶下。

2. 用戶唯一性標識方案二:關聯設備ID與登錄ID(又稱一對一)

適用場景:成功關聯設備 ID 和登錄 ID 之后,用戶在該設備 ID 上或該登錄 ID 下的行為就會貫通,被認為是一個user_id發生的。在進行事件、漏斗、留存等用戶相關分析時也會算作一個用戶。所以一般來說,當遇到以下場景時,考慮一對一的關聯:

  • 需要貫通一個用戶在一個設備上注冊前后的行為。
  • 需要貫通一個注冊用戶在不同設備上登錄之后的行為。

場景舉例:

產品運營中Oneid的實現—合理標識用戶的唯一性

行為序列說明:

  1. 某用戶在小米手機上新安裝了 App,并進行了一系列操作,對應的設備ID為 X,事件表中 distinct_id 為 X,對應分配的user_id為 1,則將user_id 1、設備ID X 存入 users 表的user_id,,first_id 字段。
  2. 該用戶進行了注冊并登錄,其登錄ID為A,事件表中 distinct_id 為A,設備ID X 和登錄 ID A 關聯成功,將登錄ID A存入users 表的 second_id 字段,use_id仍為1。
  3. 該用戶登錄后繼續進行一系列操作,事件表中distinct_id為 A,user_id仍為1。
  4. 該用戶把手機送給朋友了,朋友用自己的賬號登錄設備 X,登錄ID為B,將設備 ID X與登錄ID B進行關聯,由于 X 已與 A 關聯,所以此次關聯會失敗,同時會分配一個新的user_id 2來標識此用戶,并將登錄ID B 同時存入users 表的 first_id 和 second_id 字段(用戶的朋友賬號上之前未關聯過別的設備,且首次登錄設備關聯失敗,則將登錄 ID 同時記錄到 first_id 上),此時又稱自關聯。
  5. 之后,該用戶的朋友一直使用賬號B在設備 X 上進行了一系列操作,事件表中的 distinct_id為B,后續會用user_id 2來標識此用戶。
  6. 該用戶更換了一個新的蘋果手機,并進行一系列操作,在未登錄前,用新設備ID Y來標識用戶,events表中的distinct_id 為Y,對應分配的user_id為3,將user_id 3 、設備ID Y 存入 users 表的 id, first_id字段。
  7. 該用戶在蘋果手機上使用賬號A進行登錄,此時將嘗試將設備ID Y與登錄ID A 進行關聯,由于 A 已經與 X 關聯,因此會關聯失敗,但是依然會切換到以A 為登錄ID的用戶,其對應的user_id為1。
  8. 該用戶登錄之后的后續操作,事件表中的distinct_id 為A,所以仍以user_id 1 標識。

在上述場景中,很大程度上已經實現了跨設備的用戶貫通,但仍存在局限性:

  1. 當用戶換手機后,雖然登錄賬號之后的行為與換手機之前的行為已經貫通,但是在新設備上首次登錄之前的行為仍沒法貫通,仍被識別為新的用戶的行為。
  2. 當用戶把舊手機送給朋友之后,由于舊手機已被關聯到自己的登錄ID,無法再與朋友的登錄 ID 關聯。后續使用這臺舊手機的用戶們,若不登錄就操作應用,則都會被識別為同一個用戶(舊手機成功關聯的登錄 ID)。

3. 用戶唯一性標識方案三:關聯登錄ID與多個設備ID(又稱多對一)

一對一雖然已經實現了跨設備的用戶貫通,但是對于某些應用場景還是不夠準確,因此產生了另外一種關聯方案,支持一個登錄 ID 綁定多個設備 ID 的方案,從而實現更準確的用戶追蹤。

適用場景:一個用戶在多個設備上進行登錄是一種比較常見的場景,比如 Web 端和 App 端可能都需要進行登錄。支持一個登錄 ID 下關聯多設備 ID 之后,用戶在多設備下的行為就會貫通,被認為是一個user_id發生的。

場景舉例:

產品運營中Oneid的實現—合理標識用戶的唯一性

行為序列說明:

  1. 某用戶在小米手機上新安裝了 App,并進行了一系列操作,對應的設備ID為 X,事件表中 distinct_id 為 X,對應分配的user_id為 1,則將user_id 1、設備ID X 存入 users 表的user_id,,first_id 字段。
  2. 該用戶進行了注冊并登錄,其登錄ID為A,事件表中 distinct_id 為A,設備ID X 和登錄 ID A 關聯成功,將登錄ID A存入users 表的 second_id 字段,use_id仍為1。
  3. 該用戶登錄后繼續進行一系列操作,事件表中distinct_id為A,user_id仍為1。
  4. 該用戶把手機送給朋友了,朋友用自己的賬號登錄設備 X,登錄ID為B,將設備 ID X與登錄ID B進行關聯,由于 X 已與 A 關聯,所以此次關聯會失敗,同時會分配一個新的user_id 2來標識此用戶,并將登錄ID B 同時存入users 表的 first_id 和 second_id 字段(用戶的朋友賬號上之前未關聯過別的設備,且首次登錄設備關聯失敗,則將登錄 ID 同時記錄到 first_id 上),此時又稱自關聯。
  5. 之后,該用戶的朋友一直使用賬號B在設備 X 上進行了一系列操作,事件表中的 distinct_id為B,后續會用user_id 2來標識此用戶。
  6. 該用戶更換了一個新的蘋果手機,并進行一系列操作,在未登錄前,用新設備ID Y來標識用戶,events表中的distinct_id 為Y,對應分配的user_id為3,將user_id 3 、設備ID Y 存入 users 表的 id, first_id字段。
  7. 該用戶在蘋果手機上使用賬號A進行登錄,此時將嘗試將設備ID Y與登錄ID A 進行關聯,關聯成功,其對應的user_id為依然1,同時將設備ID Y 添加到 users表中user_id 1 的 $device_id_list 字段。
  8. 該用戶登錄之后的后續操作,事件表中的distinct_id 為A,所以仍以user_id1 標識。

后續的修復如下:

  1. 由于設備 Y 被關聯到登錄 ID A 下,修復設備 Y 上登錄之前的數據:user_id 3 -> user_id 1。
  2. 將users表中user_id 3的用戶屬性合并到user_id 1上,并刪除 users 表user_id 3 這條數據。進行屬性合并時,如果user_id 1的用戶該屬性有值,則不會修改該屬性的值;如果user_id 1 的用戶該屬性沒值,且user_id 3 的用戶該屬性有值,則將對應的值合并到user_id 1 的用戶上,并刪除 users 表中user_id 3 這條數據。

在上述場景中,真正實現了跨設備的用戶貫通,通過修復解決了方案二中換手機登錄之前的行為貫通問題,但仍存在局限性:

一個設備只能關聯到一個登錄 ID 下,當用戶把舊手機送給朋友之后,由于舊手機已被關聯到自己的登錄 ID 了,無法再與朋友的登錄 ID 關聯。后續使用這臺舊手機的用戶們,若不登錄就操作,則都會被識別為同一個用戶(舊手機成功關聯的登錄 ID)。

而事實上,舊手機上后續的匿名登錄很難識別到底是誰,可能歸為匿名登錄之前最近一次登錄的用戶會更合理一些。

綜合起來看,以上三種對用戶唯一性進行識別的方案沒有對與錯,在決定采取哪種識別方案時,結合產品的具體應用場景以及埋點復雜度來選擇合適的方案即可。

 

作者:中原數據老工匠,一名金融科技從業者;微信公眾號:數匠筆談

本文由 @中原數據老工匠 原創發布于人人都是產品經理。未經許可,禁止轉載

題圖來自Unsplash,基于CC0協議

更多精彩內容,請關注人人都是產品經理微信公眾號或下載App
評論
評論請登錄
  1. 目前還沒評論,等你發揮!