實時用戶標簽生成系統設計

用戶標簽系統的用途

互聯網公司在有一定用戶積累之后,需要告別早期粗放式、高成本的營銷方式。走上根據用戶特征和價值精準化營銷的道路。
在無法實現大數據用戶畫像的條件下,為用戶打上價值標簽以實現用戶分類,簡單而有效。

標簽的定義

我司常用的標簽有:新用戶、老用戶、流失用戶、活躍用戶等。此外,還可以根據用戶以往行為,如投訴、訂單取消、查看報價等,為用戶打上相應的標簽。標簽系統提供了從多維度進行用戶分類的方法 。在用戶分類的基礎上,實現差異化營銷、差異化優惠,則可以節約營銷成本。

標簽的時效性

標簽如新用戶、流失用戶等 ,會隨用戶在系統中下單而失效。而活躍用戶會隨著用戶在系統中長期不下單而變成流失用戶。通常,用戶半年以前的行為參考性較低。用戶標簽需要根據用戶近期行為生成。因此,標簽必須與用戶的實際狀態同步,從而不誤導營銷決策。

標簽的使用需求

使用標簽的需求有2種。

  • 第一種是給定一個用戶,問用戶是否具有某標簽。在給用戶發放代金券時,用戶標簽可用于決定券的金額、券種。此種情況下,用戶標簽必須是實時的。
  • 第二種是給定一些標簽,問具有這些標簽的用戶有哪些。在節假日、重大營銷節點時,可通過為指定特征的用戶集中推送優惠信息,實現促銷。在這種情況下,用戶標簽為準實時即可。

實時計算用戶標簽

為用戶打上標簽本質上是為識別用戶的某種歷史行為特征并標記出來。由于標簽的時效性要求,需要分析用戶近期的行為。因此,我們將用戶的行為作為基本的記錄、分析單位。
一條記錄的例子如下:

用戶id 發生時間 行為類型 訂單id 其它
123 2016-10-20 12:10:32 取消訂單 orderId 。。。

每當用戶進行某個行為,則為用戶添加一條記錄。為方便實現更多的查詢、搜索拓展,我們把用戶行為數據實時導入到Elasticsearch中。

當計算給定用戶標簽時,從elasticsearch/數據庫中查詢到指定時間段內用戶行為,實時為用戶計算標簽返回。

由于用戶行為是實時導入的,而用戶標簽是根據用戶最新行為記錄生成的,因此生成的標簽具有實效性。由于每個用戶在一段時間內的訂單相關行為數據量不大,因此計算開銷可以忽略。

以上設計的好處在于,我們可以隨時調我們生成標簽所關心的時間段。可以關心最近3個月,或者突然改到半年。而標簽的定義也可以隨時更改。底層是最原始的用戶行為數據,不需要任何改變。

準實時標簽查詢用戶

根據標簽查詢用戶則要困難一些。我們必須提前為每個用戶計算好標簽。才可以根據標簽建立索引,最后實現查詢。在數據量較大的情況下,計算一次可能需要1-2天。如果只在少量時間節點使用此功能,這樣的時間開銷可以接受。

我們考慮如果需要經常使用此功能,如何實現?

由于我們已經有了實時計算給定用戶標簽的能力。因此,每當用戶有新的行為時,我們可以重新為此用戶計算標簽,并入庫。系統運行一段時間之后,在系統中有行為的用戶在數據庫中都有了記錄。行為越頻繁的用戶,其標簽狀態越實時。

為了保證用戶標簽不過時,我們記錄用戶標簽的更新時間。通過逐條掃庫的方式,更新數據庫中更新時間較為久遠的數據,重新計算標簽。

由于用戶最新的行為會導致標簽更新,因此掃庫的方式只是為了保證標簽不會因為時間的推移而過時。這方面的時效性要求在一周,一天以內都可以接受的。

用戶行為的監聽

一種監聽用戶行為的方法是通過異步消息。用戶的行為會在不同的服務器中發生。當服務器檢測到相關的事件時,通過消息系統發出消息通知,從而告知標簽系統。然而采用消息系統實現有以下2個問題:

  • 需要其它系統配合發出消息
  • 如果消息丟失、消息重復則標簽計算不準確
    消息重復的問題可以通過去重來解決,而其它問題則無法解決了。
    因此我們想到采用canal,通過監聽數據庫的變化,來得知訂單狀態變更的事件。這樣,不需要其它系統的配合,需要完成事件的可靠監聽。

總結

我們闡述了一種實現實時標簽系統的方法。通過存儲用戶的歷史行為,我們的底層系統具有了以不變應萬變的能力。通過實時計算標簽,用戶標簽的定義就可以隨時修改了。通過將用戶行為放入elasticsearch中,加快了用戶行為查詢的速度。

另一方面,通過實時重新計算用戶標簽,我們保證了用戶標簽根據用戶行為實時調整。而對于標簽的隨時間推移過時問題,我們通過掃庫的方式來逐漸更新。從而做到了用實時更新應對快速變化,用后臺任務應對慢速化。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容