Categories
程式開發

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


1 背景

1.1 什麼是用戶偏好挖掘

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

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

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

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

2 常見的偏好挖掘思路

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

2.1 基於統計的偏好挖掘

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

技術方案

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

這裡有兩個關鍵點:

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

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

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

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

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

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

  • 指數形式

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

  • 階躍形式

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

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

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

挑戰

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

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時序模型

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

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

圖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層,得到的向量作為城市屬性表達;
  • 歷史行為表達與城市屬性表達進行拼接,經過全連接層輸出概率向量。

整體的架構如下圖:

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

圖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範圍內的概率值。

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

圖3.3 Seq4Rec模型架構

3.2.2 優化用戶側表達

思考

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

對深度興趣網絡的借鑒

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

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

其中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從而實現目標影響用戶編碼的目的。

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

圖3.4 深度興趣網絡模型

用戶偏好多峰的理解

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

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

圖3.5 用戶不同的購房方案

用戶偏好序列構造

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

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

圖3.6 用戶偏好序列

偏好挖掘網絡結構

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

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

圖3.7 偏好挖掘網絡結構圖

Activation Unit的設計

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

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

圖3.8 Active Unit的結構

4 寫在最後

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

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

5 引用資料

[1] 超越用戶嵌入矩陣:在建議中學習對大型用戶建模的哈希

[2] 深度興趣網絡用於點擊率預測

[3] 使用嵌入在Airbnb上進行搜索排名的實時個性化

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

原文鏈接

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