貝殼用戶偏好挖掘的思考與實踐

1 背景

1.1 什麼是用戶偏好挖掘

用戶偏好,即對用戶內在需求的具體刻畫。通過用戶的歷史行爲和數據,對用戶進行多角度全方位的刻畫與描述,利用統計分析或算法,來挖掘出用戶潛在的需求傾向。

用戶在平臺有多種多樣的行爲,用戶的行爲都是有內在的驅動因素的,而挖掘用戶偏好可以幫助我們從雜亂的信息中抽象出對用戶需求的具體描述,從而指導搜索、推薦、push等策略的制定,圈定用戶羣,進行精準營銷與精細化運營。

1.2 偏好挖掘工作面臨的挑戰

  1. 準確表達:用戶偏好挖掘工作對準確的要求是天然存在的,有兩點需要考慮:首先,用戶偏好的準確應當如何度量,決定了我們以何爲目標;其次,用戶的偏好可能存在多峯的情況,因此在挖掘任務中需要對多峯的特性做出準確反映。
  2. 可理解:本質上我們希望對用戶的偏好信息進行編碼和傳遞,基於貝殼的業態,下游不止有規則與算法,還有運營與經紀人等‘人’,這對偏好挖掘輸出的可理解提出了要求。
  3. 高維的偏好:在偏好挖掘工作中,另一個重點是,存在部分高維非序數偏好,比如房產場景下的地理位置屬性。如何有效的對高維偏好進行挖掘,是我們要面臨的第三個問題。

2 常見的偏好挖掘思路

偏好的挖掘是通過用戶的歷史行爲來判斷一個用戶在各種屬性的不同維度上的偏好程度,進而挖掘出用戶的潛在需求。比如,在貝殼的場景下,衡量一個用戶偏好200萬還是偏好300萬、喜歡二居室還是三居室。常見的偏好挖掘的方法可以分爲統計和模型兩類。

2.1 基於統計的偏好挖掘

通過統計的方法挖掘用戶偏好的思想是基於一定的業務假設的,即用戶行爲越多則偏好越重、距當前時間越近越偏好。

技術方案

用戶偏好通過用戶在不同屬性的維度上行爲次數的帶衰減的線性加權求和,再進行歸一化得到。

這裏有兩個關鍵點:

第一個關鍵點是:不同行爲的權重如何衡量

用戶有着多種不同的行爲,例如,在購物網站,用戶可能發生瀏覽、收藏、加購物車、下單等行爲,顯然,下單的成本要比普通的瀏覽成本要高,即在不同行爲上花費的成本是存在差異的,在數據上的反映是不同行爲的權重差異很大,如何定義、衡量並驗證不同行爲的權重是一件並不容易的事情。

我們採用的權重計算方法有:

  • 後驗轉化率的方法,轉化率的倒數作爲權重;
  • 有監督的方法,bagging+LR模型,可以將成交或者下單作爲label,模型得到的特徵重要性作爲權重;
  • 通過貝葉斯模型計算權重。

第二個關鍵點是:衰減係數的定義

用戶的需求並不是持續穩定的,會隨時間會發生變化和轉移,這種需求的變化需要被偏好捕捉到,因此,距離當前越近的行爲越能反映現在的需求。對於衰減形式,我們採取了指數衰減以及階躍形式衰減。

  • 指數形式

用戶行爲對未來偏好的影響程度,隨着時間的拉長呈指數型下降,對於t天前的行爲,衰減因子爲λ的t次方;

  • 階躍形式

將時間人爲劃分成若干不同的時間區間,同一個時間區間內的行爲的衰減因子是相同的。

因此,增加了衰減係數和行爲權重的偏好計算公式爲:

挑戰

  • 很難證明什麼樣的行爲權重是最優的,且很難找到優化方向;
  • 人爲選定的衰減方式以及衰減因子的選取具有主觀因素,並不適用於所有的偏好;
  • 基於統計的偏好挖掘難以優化。

2.2 基於模型的偏好計算

基於統計的偏好計算方法的優點是直觀,可解釋性強,但缺點是難以優化,因此我們考慮通過有監督模型的方式解決偏好預估的優化問題。

技術方案

對於低維且等長的偏好,可以通過有監督的多分類模型。利用用戶過去發生不同行爲所對應的屬性,預測未來在不同屬性上發生重行爲的概率。需要解決的問題主要是歷史行爲的時間窗口的劃分,這類低維、行爲相對稠密、長度統一的偏好,可以採用有監督模型XGBoost、DNN,以及時序模型LSTM和GRU等。

然而,對於枚舉值較多的屬性的用戶偏好,例如地理位置相關的屬性,用戶在不同枚舉值上的行爲稀疏,且用戶過去行爲覆蓋的位置Item數目不同,導致召回的候選集長度不統一,因此使用傳統意義上的多分類模型很難去完成。

對於這類偏好,常見的方法是embedding,通過用戶近期交互過的物品,將偏好預估視爲top-n推薦,使用pair-wise訓練策略訓練模型,得到個性化的用戶偏好向量。

雖然用embedding表徵用戶偏好在推薦系統中取的了很好的效果,然而這種向量化的偏好表徵方法不可解釋,在需要人去理解不同偏好意義的場景中具有侷限性。

挑戰

  • 高維、稀疏的偏好,很難預估;
  • 輸出需要是可解釋的。

3 偏好挖掘在貝殼找房的實踐

貝殼找房作爲一個居住服務類的平臺,將用戶、經紀人和房源鏈接在一起,幫助用戶找到更滿意的居住環境,幫助經紀人更好地服務用戶,對用戶的偏好進行挖掘可以幫助平臺更好的瞭解用戶。

偏好挖掘在貝殼找房主要有兩類的應用場景,一方面是對業務賦能,有助於平臺算法和策略的制定,如個性化推薦、定向push等場景;另一方面是給人傳達可理解的用戶需求,比如幫助運營人員圈人羣包,進行精細化運營和定向推送,或者在用戶從線上轉線下的過程中,將用戶的需求無損地傳遞給經紀人,更快地瞭解用戶。

3.1 基於多分類的偏好挖掘

3.1.1 問題抽象

問題定義

在用戶信息交互中,如果用戶對某一屬性的Item付出了較大成本,則說明用戶對Item背後的屬性有較強的偏好,基於此假設,在已知用戶過去發生不同行爲及行爲對應的屬性維度,將偏好預估問題定義爲預測未來時間段內發生重行爲所對應的屬性維度。

樣本構造

我們需要思考偏好的主要應用場景,以及環境對動作的解釋能力。如果我們對線上行爲的採集能力明顯高於線下環節,那麼我們在思考“重行爲”時,就要考慮如果使用大量生命週期末端的線下行爲,基於線上的特徵是否可以很好的解釋。

優化目標

模型的目標爲預估用戶在不同屬性的Item上發生重行爲的概率。這裏我們要考慮用戶的偏好是multi-hot還是one-hot,基於這兩種形式,我們需要考慮對輸出層的構造方法。但需要強調的是,使用one-hot並不意味着否定用戶多峯偏好的事實。

離線後驗

這是一個被高頻提問的點,即偏好的質量如何評估,自然我們可以從下游應用的角度進行評估,但該評估方式存在實驗難、效果回收慢、影響因素多等諸多不便。

從中臺角度我們更希望建立中間指標實現對偏好質量的獨立可衡量,建立小閉環。我們通過預估向量與真實行爲向量的內積或交叉熵來衡量預估的效果,內積越大、交叉熵越小,則預估越準確。

如何選擇適合自己的指標建議從下游應用出發,例如下游使用內積的方式進行排序操作,那麼內積可能更爲合適。但使用內積的方式進行評價可能存在與模型的優化方向不一致的問題,需要在模型評價時考慮進來。

3.1.2 樹模型、DNN模型

思想

通過用戶的行爲,構建一個有監督的分類模型,預估用戶的各維度的偏好。

特徵工程

特徵工程的原問題是什麼可以反應用戶的偏好,需要考慮兩個層面,一是,基於用戶歷史與屬性Item交互反應用戶願爲什麼屬性付出成本;二是考慮用戶當前的業務進程,反應了用戶的偏好是否在未來發生髮幅度的遷移和改變,即用戶的偏好預估多大程度上依託歷史交互行爲。基於這兩點思考,我們將兩類信息編碼進特徵中:

  • 用戶歷史與不同Item交互,例如,用戶在某個屬性上訪問次數、頻率、轉化率等;
  • 用戶的生命週期,例如,用戶當前各類行爲的帶衰減線性加權,或用戶最重行爲的one-hot都可以表達用戶的生命週期。

優化點

特徵工程實際上是對用戶個體與用戶歷史交互序列進行了編碼,編碼的過程中引入了較多的人工先驗知識,例如人爲劃分行爲聚合時間的長度。

3.1.3 在模型中引入用戶行爲序列

思想

用戶偏好是個複雜且不穩定的問題,當前偏好與過去的不同階段的行爲量及偏好有關係,而傳統的神經網絡很難去捕捉不同時間對當前階段的偏好的影響,因此我們把將偏好預估問題抽象爲一個多變量時間序列預測的問題,將用戶行爲按照時間劃分成不同週期,根據每個週期內的行爲,預估下一週期用戶發生重行爲所在的屬性維度。這樣,模型可以感知到過去偏好的變化情況,通過時序模型學習到過去對未來偏好的影響。

LSTM時序模型

圖 3.1 LSTM結構及計算公式

LSTM是一種特殊的循環神經網絡,可以將過去的信息與當前的目標之間建立連接,例如,在空氣質量預測中,用過去每個時間點的天氣狀況、氣溫、風速等特徵,來幫助推測下一個時間點的空氣質量。

LSTM有兩個傳輸狀態,一個cell state(C_t),一個hidden state(h_t),其中 C_t 改變較爲緩慢,作爲貫穿整個cell的傳送帶,保存長期記憶,而 h_t 在每個cell內的區別相對較大。

LSTM通過“門”來決定將哪些信息保留、哪些信息刪除,forget gate決定了上一時刻的單元狀態C_t-1 有多少保留到當前時刻 C_t;input gate決定了當前時刻網絡的輸入 x_t有多少保存到單元狀態C_t,output gate控制單元狀態 C_t有多少輸出到 LSTM 的當前輸出值 h_t。其網絡結構和前向計算公式如圖3.1所示。

特徵工程

劃定週期,將一個週期內的行爲次數與屬性Item、行爲類別進行交叉聚合。週期的選擇根據下游場景的需求和業務類型,選擇不同長度的週期,對於用戶需求相對穩定、下游場景不需要緊隨用戶當前實時偏好的場景中,可以選擇周爲週期粒度,反之,如果需要實時關注用戶當前的偏好變化,可以以天爲週期粒度。

優化點

在貝殼平臺,由於城市對用戶偏好的影響很大,所以我們加入城市作爲特徵,先將城市進行embedding,再將embedding後的結果與sequence特徵經過LSTM的結果進行拼接,進入全連接層。

技術路線:

  • 獲取用戶每個週期內的行爲次數與屬性Item、行爲類別作交叉得到的序列特徵,以及城市的編碼結果或one-hot結果;
  • 序列特徵經過LSTM,得到用戶的歷史行爲表達;
  • 城市特徵經過Embedding層,得到的向量作爲城市屬性表達;
  • 歷史行爲表達與城市屬性表達進行拼接,經過全連接層輸出概率向量。

整體的架構如下圖:

圖 3.2 基於行爲序列的偏好預估架構圖

3.2 基於二分類的偏好挖掘

對於Item數目較多的屬性,多分類的方法存在侷限性,一是構造特徵時,屬性Item與行爲進行交叉會導致特徵維度爆炸;二是用戶的行爲稀疏,絕大部分Item上沒有行爲;三是當類別較多時多分類模型表現不夠好。因此,爲了在高維稀疏的偏好預估問題中取得更好的效果,我們對模型進行了進一步的優化,將多分類問題轉化爲二分類問題。

3.2.1 Seq4Rec模型

思考

實際上,對於Item數量較多的屬性,我們只需要關注用戶對其訪問過的Item的偏好情況,我們可將問題簡化爲預估用戶對其訪問過的屬性的Item的偏好情況,這樣大大縮減了問題的難度。但是每個用戶訪問過的Item不同、Item數量不一,依然無法使用多分類模型。

那麼,既然不能多分類,能否將多分類的問題轉化爲二分類呢?沿着這個思路,我們將多分類中的不同屬性信息作爲召回項加入到特徵中,將後續是否在召回項上發生重行爲作爲目標。這樣,序列特徵作爲用戶表達,召回項特徵作爲Item表達,這種方法我們稱其爲Seq4Rec。

特徵工程

Seq4Rec方法的用戶序列特徵不是基於時間的行爲交叉聚合,而是用戶的每次交互,序列特徵包含序列類型的編碼,以及行爲所在的屬性Item的編碼,最後加上召回項Item的編碼。特徵構造的主要步驟如下:

  • 首先,獲取用戶交互過的屬性Item編碼以及行爲類型編碼,構造基於行爲的sequence,作爲用戶的表達;
  • 第二步,獲取召回集,用戶歷史訪問過的Item作爲其召回集;
  • 第三步,將召回集中的每個Item作爲屬性表達;
  • 最後,屬性表達與用戶表達的sequence拼接到一起。

Item的Embedding

在模型訓練過程中,爲了降低維度,並且更好地表達屬性信息,需要對sequence中的Item以及召回的Item進行embedding,將高維稀疏的離散特徵轉化爲低維稠密的向量特徵。爲此將我們採取預訓練的方式,先進行embedding,再用得到的向量對Item進行替換。對Item進行embedding的技術路線爲:

  • 根據用戶在每個session中瀏覽的房源的時間順序,構建去重的屬性Item的序列;
  • 根據曝光次數,對Item編碼成字典;
  • 根據時間序列,生成樣本;
  • skip-gram模型得到屬性的Item的embedding值。

模型架構

整體的架構流程圖如下。首先將用戶交互行爲的Item編碼替換成與訓練的embedding向量,與行爲類型編碼共同形成用戶行爲sequence,經過LSTM,與召回項Item的embedding向量進行concat,進入全連接層,最終輸出0到1範圍內的概率值。

圖3.3 Seq4Rec模型架構

3.2.2 優化用戶側表達

思考

在LSTM的方案中,我們將用戶歷史屬性交互序列用於用戶的編碼,取得了一定的效果提升。接下來,我們進一步探索序列的更優表達形式。在前述版本中,用戶的行爲序列被壓縮編碼到了一個定長向量中參與後續計算,是否會成爲瓶頸。其次對於一個屬性枚舉而言,用戶行爲序列是否等權重,等作用的影響特定屬性。最後,在匹配邏輯上,歷史訪問序列與目標屬性的關係,應當被如何表達與強調。我們嘗試結合深度興趣網絡思路,對偏好挖掘任務進行優化。

對深度興趣網絡的借鑑

從思想上,深度興趣網絡框架提出在基於用戶序列進行用戶編碼過程中考慮目標Item,而不是對用戶的多峯偏好進行等重表達。公式表達如下:

其中U(A)爲用戶表達,e_1,e_2,…,e_H爲用戶序列,v_A爲目標Item。

從實踐上,深度興趣網絡相比BaseModel增加了Activation Unit,通過用戶序列與目標Item的element-wise minus以及用戶序列Item與目標Item成對輸入FCs的方法,計算用戶Seq中每個節點相對於目標Item的權重,內積用戶Seq的Embedding從而實現目標影響用戶編碼的目的。

圖3.4 深度興趣網絡模型

用戶偏好多峯的理解

在購房場景下,滿足用戶需求的方案存在多種,以北京爲例,可以購買高價地段的中戶型獲得優質的配套資源,也可以購買遠郊房產選擇大空間接父母來居住,更可以以較低價格購買小戶型、將剩餘的錢留做他用。不同居住方案,產生了用戶的複雜偏好,當用戶瀏覽一個內環高單價中戶型時,對用戶的編碼應當更加關注歷史對相似高價地段方案產生的序列。而非關注其在京郊別墅方案中對容積率的要求。

圖3.5 用戶不同的購房方案

用戶偏好序列構造

在偏好挖掘場景中,我們將其抽象爲偏好推薦問題,因此用戶的訪問序列由用戶訪問房源的偏好組合構成,其中組合的概念我們可以理解爲多通道。

圖3.6 用戶偏好序列

偏好挖掘網絡結構

用戶對房源的訪問實際是與偏好的組合做了交互,這裏我們假設,用戶對小區屬性的偏好會受到其包括價格、面積等多維度偏好的影響。從另一個層面看,目標屬性對用戶交互序列的多屬性的信息提取都會產生影響,而非單獨影響對應屬性。因此注意力對用戶Seq的房源屬性組合生效,拼接後送入FCs中進行關係學習並輸出。

圖3.7 偏好挖掘網絡結構圖

Activation Unit的設計

如何求取用戶Seq中一個房源對應偏好組合的注意力權重,是AU模塊要解決的問題,即目標偏好與用戶Seq偏好組合的相關性,其核心的關係計算由FCs完成,FCs的輸入包含Seq對應房源的偏好組合的Embedding向量,目標屬性的embedding向量,以及用戶Seq房源各屬性Embedding與目標屬性Embedding向量的Element Wise Minus。

圖 3.8 Active Unit的結構

4 寫在最後

本文介紹了偏好模型在貝殼的應用,包括XGBoost/神經網絡、時序模型。爲了解決高維稀疏問題,將多分類轉化爲基於召回集的二分類問題,爲了解決多峯偏好問題,採用深度興趣網絡,並引入基於偏好的attention機制。

通過幾個版本的迭代,在後驗內積和交叉熵上進行驗證,提高了模型的性能。我們的模型還在不斷嘗試與優化中,有後續進展會持續更新。

5 引用資料

[1] Beyond User Embedding Matrix: Learning to Hash for Modeling Large-Scale Users in Recommendation

[2] Deep Interest Network for Click-Through Rate Prediction

[3] Real-time Personalization using Embeddings for Search Ranking at Airbnb

本文轉載自公衆號貝殼產品技術(ID:beikeTC)。

原文鏈接

貝殼用戶偏好挖掘的思考與實踐

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章