用戶畫像—打用戶行為標籤
用戶畫像中用戶行為標籤是很重要的一塊內容,這篇博客詳細講講如何打行為標籤。
數據倉庫
用戶畫像的應用流程從原始的數據輸入到模型應用可分為5塊(圖1),包括將操作型環境數據經ETL後集中存儲在數據倉庫,之後經過對數據的建模、挖掘、分析建立用戶畫像模型,最終將建好用戶畫像的數據介面調用到BI報表、經營分析、精準營銷、個性化推薦等各系統模塊。
用戶畫像開發,主要是對數據倉庫中的業務表、日誌表、埋點表中的相關數據進行各維度建模。所以要對數據倉庫和元數據非常熟悉。
案例
為了講清楚如何開發用戶行為標籤,這裡隨便舉一個某圖書電商網站的例子,在介紹清楚案例相關元數據的基礎上如何結合業務開發行為標籤,案例及相關的元數據如有雷同、純屬雷同。
某圖書電商網站擁有超過千萬的網購用戶群體,所售各品類圖書100餘萬種。用戶在平台上可進行瀏覽、搜索、收藏、下單、購買等瀏覽、交易行為。為了更好地運營網站產品,需要進一步了解用戶,以便做精準營銷和個性化推薦。為此需要開發出用戶行為標籤表。
相關元數據
商城自建立以來,數據倉庫中積累著大量業務數據、日誌數據及埋點數據。如何充分挖掘沉澱在數據倉庫中數據的價值,有效支持到用戶畫像的建設,成為當前的重要工作。
在本案例中,可以獲取到的數據按其類型可分為:業務類數據、用戶行為數據。其中業務類數據是指用戶在平台上下單、購買、收藏物品、貨物配送等與業務相關的數據;用戶行為數據指用戶搜索某條信息、訪問某個頁面、點擊某個按鈕、提交某個表單等通過操作行為產生(在解析日誌的埋點表中)的數據。
涉及到數據倉庫中的表主要包括:用戶信息表、商品訂單表、圖書信息表、圖書類目表、APP端日誌表、WEB端日誌表、商品評論表等,下面就用戶畫像建模過程中一些主要用到的數據表做詳細介紹。
這裡對上面的表做個匯總:
- 用戶信息表 (dwd.user_basic_info)
- 商品訂單表 (dwd.gdm_ord_order)
- 圖書信息表 (dwd.book_base_basic_info)
- 圖書類目表 (gdw.book_std_type_df)
- WEB端日誌表 (dwd.beacon_web_books_client_pv_log)
- APP端日誌表 (dwd.beacon_app_books_client_pv_log)
- 商品評論表 (dwd.book_comment)
- 用戶收藏表 (dwd.book_collection_df)
- 購物車信息表 (dwd.book_shopping_cart_df)
- 搜索日誌表 (dwd.app_search_log)
上面列舉了涉及到的10張表作為示例,在實際開發中涉及到的業務表、日誌表、埋點表...要比這多的多。
用戶行為標籤開發
一、開發背景
用戶行為標籤表是根據用戶在產品上的訪問行為、下單行為提取用戶標籤,用於定位用戶在產品上的訪問情況,進而根據用戶的瀏覽習慣、消費偏好做推薦和營銷。
其主要數據來源包括業務類數據表、日誌數據表和埋點數據表。其中日誌數據和埋點數據記錄了用戶在產品上的全部行為,如用戶瀏覽某個頁面、搜索某個關鍵詞、點擊了某個點位即會在日誌數據中有相應記錄。
日誌數據量非常大,需要數倉人員將其解析成結構化數據,落表以供調用。業務資料庫記錄用戶購買、添加購物車等業務相關行為。
[ 數據來源 ]:用戶行為屬性標籤主要來自用戶屬性標籤表、商品訂單表、圖書信息表、圖書類目表、WEB端日誌表、APP端日誌表、商品評論表、用戶收藏表、購物車信息表、搜索日誌表、行為權重配置表
最終建模後的目標——用戶行為標籤表表結構:
下面介紹這張行為標籤表如何建模產生。
二、數據開發
本案例基於hadoop平台的Hive數據倉庫進行開發。
這裡首先確定用戶行為標籤表的表結構,包含哪些欄位,這些欄位都是什麼數據類型,用戶屬性表創建代碼如下:
在開發用戶行為標籤表,將用戶與圖書相關行為的標籤打在用戶身上的過程中,需要建立系列臨時表,下面分5步詳細介紹用戶個性化標籤表的建立過程。
Step1:建立臨時表獲取圖書和圖書類型的信息
從圖書信息表和圖書類型表中抽取圖書id、圖書名稱、圖書類型等信息建立圖書相關信息的臨時表1,其中圖書信息表和圖書類型維表通過圖書id相關聯。代碼執行如下:
Step2:建立臨時表從日誌數據中提取用戶瀏覽信息
日誌數據對用戶的每一次操作行為都進行了記錄,對於探究用戶行為偏好具有非常重要的意義。例如用戶在WEB端瀏覽過某個圖書詳情頁,對應的在WEB日誌表中記錄該次瀏覽行為,包括時間、日期、頁面url、來源頁url、用戶id、設備id、ip地址等數據。一般商品頁面鏈接中包含有該商品id的參數,通過對url進行解析可以找到該商品的id。
這裡從日誌相關的表中(包括APP日誌表和WEB日誌表)獲取用戶瀏覽圖書對應的頁面鏈接,通過正則表達式匹配出用戶瀏覽圖書頁面鏈接所對應的圖書id,代碼執行如下:
上面這段邏輯中用了嵌套語句,匹配出頁面鏈接中detail/後面的對應該圖書的id參數。
Step3:將用戶行為產生的圖書標籤插入到用戶行為標籤表中
用戶行為標籤表記錄了用戶在平台上購買、瀏覽、評論、收藏、取消收藏、放入購物車、搜索等各種行為過程所帶來的標籤。需要開發的表結構包括用戶編碼、標籤id、標籤名稱、用戶行為類型、標籤類型、行為日期、行為次數共計7個欄位。開發過程中需要將相關表的數據經過抽取、清洗後插入到用戶行為標籤表中。關於行為標籤表的7個欄位,各欄位的釋義如下:
- 用戶id(user_id):用戶唯一id;
- 標籤id(tag_id):圖書id;
- 標籤名稱(tag_name):圖書名稱;
- 用戶行為次數(cnt):用戶當日產生該標籤的次數,如用戶當日瀏覽一本圖書4次,則記錄4;
- 行為日期(date_id):產生該條標籤對應日期;
- 標籤類型(tag_type_id):在本案例中通過與圖書類型表相關聯,取出每本圖書對應的類型,如《鋼鐵是怎麼煉成的》對應「名著」;
- 用戶行為類型(act_type_id):即用戶的購買、瀏覽、評論等操作行為,在本例中通過預設數值1~7來定義用戶對應的行為類型。1:購買行為,2:瀏覽行為,3:評論行為,4:收藏行為,5:取消收藏行為,6:加入購物車行為,7:搜索行為;
下面通過7段代碼來講述如何將用戶每一種行為所帶來的標籤插入到用戶標籤表中。
行為類型1:用戶購買圖書行為帶來的標籤,代碼執行如下:
在該段HQL邏輯中,我們從商品訂單中抽取用戶購買圖書行為帶來的標籤數據放入該表中。對於第8行的邏輯,這裡我們通過將數值1定義為用戶購買行為,邏輯寫死。後面當需求查看用戶購買行為帶來的標籤時只需要添加限制條件「where as act_type_id=1」即可。同理下面幾段業務邏輯中,我們分別為act_type_id設置值2、3、4、5、6、7來代表用戶相應行為。
這裡雖然將act_type_id的數值與對應的用戶行為邏輯寫死,但是每個用戶行為帶來的標籤都是從與該行為相關的表中抽取,這裡保證了每類行為帶來標籤的完整性及便於維護性。
行為類型2:用戶瀏覽圖書行為帶來的標籤,代碼執行如下:
行為類型3:用戶評論圖書行為帶來的標籤,代碼執行如下:
上述代碼中在解析評論帶來的圖書標籤時,首先需要將商品評論表和商品訂單表關聯(通過訂單id),然後從商品訂單表中找到對應的圖書id。
行為類型4:用戶收藏圖書行為帶來的標籤,代碼執行如下:
行為類型5:用戶取消收藏圖書行為帶來的標籤,代碼執行如下:
行為類型6:用戶加入購物車行為帶來的標籤,代碼執行如下:
行為類型7:用戶搜索圖書行為帶來的標籤,代碼執行如下:
到這裡,用戶個性化標籤表的創建工作就完成了。用戶個性化標籤表記錄了用戶在WEB/APP端每一次操作帶來標籤的明細數據,並且該表每天增量更新昨天產生的數據(數倉T+1天更新數據)。
增量更新保證了用戶所有歷史行為的全量記錄,如用戶甲2017年6月20日瀏覽了圖書《鋼鐵是怎樣煉成的》,標籤表中會在6月20日打上這樣一條記錄,該用戶隔了兩天6月22日又瀏覽了《鋼鐵是怎樣煉成的》,標籤表同樣在6月22日再次打上一條記錄(不會覆蓋歷史數據)。
文末總結一句:做用戶畫像需要對業務、對數據倉庫建模和與業務相關的元數據非常熟悉,對這兩樣非常熟悉才能保障畫像數據質量,畫像的有效性
推薦閱讀: