關於2015阿里移動推薦演算法大賽的總結(二)——推薦演算法
雖然開始走錯了路,但是也學到了東西,美團技術團隊的文件還是不錯的,喜歡的童鞋可以經常去瞅瞅,後面我會給連結的~~~~
——————————————————————————————————————————————————————————————
具體流程
基本流程如下,借用美團的圖。
從框架的角度看,推薦系統基本可以分為資料層、觸發層、融合過濾層和排序層。資料層包括資料生成和資料儲存,主要是利用各種資料處理工具對原始日誌進行清洗,處理成格式化的資料,落地到不同型別的儲存系統中,供下游的演算法和模型使用。候選集觸發層主要是從使用者的歷史行為、實時行為、地理位置等角度利用各種觸發策略產生推薦的候選集。候選集融合和過濾層有兩個功能,一是對出發層產生的不同候選集進行融合,提高推薦策略的覆蓋度和精度;另外還要承擔一定的過濾職責,從產品、運營的角度確定一些人工規則,過濾掉不符合條件的item。排序層主要是利用機器學習的模型對觸發層篩選出來的候選集進行重排序。
在這次比賽中相當於給了資料,不需要考慮資料產生,有可能要考慮儲存,暫時先不考慮。所以大體流程是先對資料進行分析,然後對資料進行預處理,進入候選集觸發環節,考慮採用協同過濾與位置聚類的方法推薦出集合,然後通過機器學習的方法訓練得出最終結果。
理論分析
資料應用
行為類別 |
行為詳情 |
主動行為資料 |
搜尋、篩選、點選、收藏、下單、支付、評分 |
UGC |
文字評價、上傳圖片 |
負反饋資料 |
左滑刪除、取消收藏、取消訂單、退款、負評、低評 |
使用者畫像 |
使用者人口屬性、美團DNA、品類偏好、消費水平、工作地與居住地 |
使用者主動行為資料記錄了使用者在美團平臺上不同的環節的各種行為,這些行為一方面用於候選集觸發演算法(在下一部分介紹)中的離線計算(主要是瀏覽、下單),另外一方面,這些行為代表的意圖的強弱不同,因此在訓練重排序模型時可以針對不同的行為設定不同的迴歸目標值,以更細地刻畫使用者的行為強弱程度。此外,使用者對deal的這些行為還可以作為重排序模型的交叉特徵,用於模型的離線訓練和線上預測。
負反饋資料反映了當前的結果可能在某些方面不能滿足使用者的需求,因此在後續的候選集觸發過程中需要考慮對特定的因素進行過濾或者降權,降低負面因素再次出現的機率,提高使用者體驗;同時在重排序的模型訓練中,負反饋資料可以作為不可多得的負例參與模型訓練,這些負例要比那些展示後未點選、未下單的樣本顯著的多。
使用者畫像是刻畫使用者屬性的基礎資料,其中有些是直接獲取的原始資料,有些是經過挖掘的二次加工資料,這些屬性一方面可以用於候選集觸發過程中對deal進行加權或降權,另外一方面可以作為重排序模型中的使用者維度特徵。
通過對UGC資料的挖掘可以提取出一些關鍵詞,然後使用這些關鍵詞給deal打標籤,用於deal的個性化展示。
推薦引擎
1、推薦引擎是不是為不同的使用者推薦不同的資料
根據大眾行為的推薦引擎,對每個使用者都給出同樣的推薦,這些推薦可以是靜態的由系統管理員人工設定的,或者基於系統所有使用者的反饋統計計算出的當下比較流行的物品。
個性化推薦引擎,對不同的使用者,根據他們的口味和喜好給出更加精確的推薦,這時,系統需要了解需推薦內容和使用者的特質,或者基於社會化網路,通過找到與當前使用者相同喜好的使用者,實現推薦。
這是一個最基本的推薦引擎分類,其實大部分人們討論的推薦引擎都是將個性化的推薦引擎,因為從根本上說,只有個性化的推薦引擎才是更加智慧的資訊發現過程。
2、根據推薦引擎的資料來源
其實這裡講的是如何發現數據的相關性,因為大部分推薦引擎的工作原理還是基於物品或者使用者的相似集進行推薦。根據不同的資料來源發現數據相關性的方法可以分為以下幾種:
根據系統使用者的基本資訊發現使用者的相關程度,這種被稱為基於人口統計學的推薦(Demographic-based Recommendation)
根據推薦物品或內容的元資料,發現物品或者內容的相關性,這種被稱為基於內容的推薦(Content-based Recommendation)
根據使用者對物品或者資訊的偏好,發現物品或者內容本身的相關性,或者是發現使用者的相關性,這種被稱為基於協同過濾的推薦(CollaborativeFiltering-based Recommendation)。
3、根據推薦模型的建立方式
可以想象在海量物品和使用者的系統中,推薦引擎的計算量是相當大的,要實現實時的推薦務必需要建立一個推薦模型,關於推薦模型的建立方式可以分為以下幾種:
基於物品和使用者本身的,這種推薦引擎將每個使用者和每個物品都當作獨立的實體,預測每個使用者對於每個物品的喜好程度,這些資訊往往是用一個二維矩陣描述的。由於使用者感興趣的物品遠遠小於總物品的數目,這樣的模型導致大量的資料空置,即我們得到的二維矩陣往往是一個很大的稀疏矩陣。同時為了減小計算量,我們可以對物品和使用者進行聚類, 然後記錄和計算一類使用者對一類物品的喜好程度,但這樣的模型又會在推薦的準確性上有損失。
基於關聯規則的推薦(Rule-basedRecommendation):關聯規則的挖掘已經是資料探勘中的一個經典的問題,主要是挖掘一些資料的依賴關係,典型的場景就是“購物籃問題”,通過關聯規則的挖掘,我們可以找到哪些物品經常被同時購買,或者使用者購買了一些物品後通常會購買哪些其他的物品,當我們挖掘出這些關聯規則之後,我們可以基於這些規則給使用者進行推薦。
基於模型的推薦(Model-basedRecommendation):這是一個典型的機器學習的問題,可以將已有的使用者喜好資訊作為訓練樣本,訓練出一個預測使用者喜好的模型,這樣以後使用者在進入系統,可以基於此模型計算推薦。這種方法的問題在於如何將使用者實時或者近期的喜好資訊反饋給訓練好的模型,從而提高推薦的準確度。
其實在現在的推薦系統中,很少有隻使用了一個推薦策略的推薦引擎,一般都是在不同的場景下使用不同的推薦策略從而達到最好的推薦效果,例如 Amazon 的推薦,它將基於使用者本身歷史購買資料的推薦,和基於使用者當前瀏覽的物品的推薦,以及基於大眾喜好的當下比較流行的物品都在不同的區域推薦給使用者,讓使用者可以從全方位的推薦中找到自己真正感興趣的物品。
演算法原理
1、基於人口統計學的推薦
基於人口統計學的推薦機制(Demographic-based Recommendation)是一種最易於實現的推薦方法,它只是簡單的根據系統使用者的基本資訊發現使用者的相關程度,然後將相似使用者喜愛的其他物品推薦給當前使用者,下圖給出了這種推薦的工作原理。
基於人口統計學的推薦機制的工作原理圖
從圖中可以很清楚的看到,首先,系統對每個使用者都有一個使用者 Profile 的建模,其中包括使用者的基本資訊,例如使用者的年齡,性別等等;然後,系統會根據使用者的 Profile計算使用者的相似度,可以看到使用者 A 的 Profile 和使用者 C 一樣,那麼系統會認為使用者 A 和 C 是相似使用者,在推薦引擎中,可以稱他們是“鄰居”;最後,基於“鄰居”使用者群的喜好推薦給當前使用者一些物品,圖中將使用者 A 喜歡的物品 A 推薦給使用者 C。
這種基於人口統計學的推薦機制的好處在於:
1. 因為不使用當前使用者對物品的喜好歷史資料,所以對於新使用者來講沒有“冷啟動(Cold Start)”的問題。
2. 這個方法不依賴於物品本身的資料,所以這個方法在不同物品的領域都可以使用,它是領域獨立的(domain-independent)。
那麼這個方法的缺點和問題是什麼呢?這種基於使用者的基本資訊對使用者進行分類的方法過於粗糙,尤其是對品味要求較高的領域,比如圖書,電影和音樂等領域,無法得到很好的推薦效果。可能在一些電子商務的網站中,這個方法可以給出一些簡單的推薦。另外一個侷限是,這個方法可能涉及到一些與資訊發現問題本身無關卻比較敏感的資訊,比如使用者的年齡等,這些使用者資訊不是很好獲取。
2、基於內容的推薦
基於內容的推薦是在推薦引擎出現之初應用最為廣泛的推薦機制,它的核心思想是根據推薦物品或內容的元資料,發現物品或者內容的相關性,然後基於使用者以往的喜好記錄,推薦給使用者相似的物品。下圖給出了基於內容推薦的基本原理。
基於內容推薦機制的基本原理
上圖給出了基於內容推薦的一個典型的例子,電影推薦系統,首先我們需要對電影的元資料有一個建模,這裡只簡單的描述了一下電影的型別;然後通過電影的元資料發現電影間的相似度,因為型別都是“愛情,浪漫”電影 A 和 C 被認為是相似的電影(當然,只根據型別是不夠的,要得到更好的推薦,我們還可以考慮電影的導演,演員等等);最後實現推薦,對於使用者 A,他喜歡看電影 A,那麼系統就可以給他推薦類似的電影 C。
這種基於內容的推薦機制的好處在於它能很好的建模使用者的口味,能提供更加精確的推薦。但它也存在以下幾個問題:
1. 需要對物品進行分析和建模,推薦的質量依賴於對物品模型的完整和全面程度。在現在的應用中我們可以觀察到關鍵詞和標籤(Tag)被認為是描述物品元資料的一種簡單有效的方法。
2. 物品相似度的分析僅僅依賴於物品本身的特徵,這裡沒有考慮人對物品的態度。
3. 因為需要基於使用者以往的喜好歷史做出推薦,所以對於新使用者有“冷啟動”的問題。
雖然這個方法有很多不足和問題,但他還是成功的應用在一些電影,音樂,圖書的社交站點,有些站點還請專業的人員對物品進行基因編碼,比如潘多拉,在一份報告中說道,在潘多拉的推薦引擎中,每首歌有超過 100 個元資料特徵,包括歌曲的風格,年份,演唱者等等。
3、基於協同過濾的推薦
隨著 Web2.0 的發展,Web 站點更加提倡使用者參與和使用者貢獻,因此基於協同過濾的推薦機制因運而生。它的原理很簡單,就是根據使用者對物品或者資訊的偏好,發現物品或者內容本身的相關性,或者是發現使用者的相關性,然後再基於這些關聯性進行推薦。基於協同過濾的推薦可以分為三個子類:基於使用者的推薦(User-basedRecommendation),基於專案的推薦(Item-based Recommendation)和基於模型的推薦(Model-based Recommendation)。下面我們一個一個詳細的介紹著三種協同過濾的推薦機制。
4、基於使用者的協同過濾推薦
基於使用者的協同過濾推薦的基本原理是,根據所有使用者對物品或者資訊的偏好,發現與當前使用者口味和偏好相似的“鄰居”使用者群,在一般的應用中是採用計算“K- 鄰居”的演算法;然後,基於這 K 個鄰居的歷史偏好資訊,為當前使用者進行推薦。下圖給出了原理圖。
基於使用者的協同過濾推薦機制的基本原理
上圖示意出基於使用者的協同過濾推薦機制的基本原理,假設使用者 A 喜歡物品 A,物品 C,使用者 B 喜歡物品 B,使用者 C 喜歡物品 A ,物品 C 和物品 D;從這些使用者的歷史喜好資訊中,我們可以發現使用者 A 和使用者 C 的口味和偏好是比較類似的,同時使用者 C 還喜歡物品 D,那麼我們可以推斷使用者 A 可能也喜歡物品 D,因此可以將物品 D 推薦給使用者 A。基於使用者的協同過濾推薦機制和基於人口統計學的推薦機制都是計算使用者的相似度,並基於“鄰居”使用者群計算推薦,但它們所不同的是如何計算使用者的相似度,基於人口統計學的機制只考慮使用者本身的特徵,而基於使用者的協同過濾機制可是在使用者的歷史偏好的資料上計算使用者的相似度,它的基本假設是,喜歡類似物品的使用者可能有相同或者相似的口味和偏好。
5、基於專案的協同過濾推薦
基於專案的協同過濾推薦的基本原理也是類似的,只是說它使用所有使用者對物品或者資訊的偏好,發現物品和物品之間的相似度,然後根據使用者的歷史偏好資訊,將類似的物品推薦給使用者,下圖很好的詮釋了它的基本原理。
假設使用者 A 喜歡物品 A 和物品 C,使用者 B 喜歡物品 A,物品 B 和物品 C,使用者 C 喜歡物品 A,從這些使用者的歷史喜好可以分析出物品 A 和物品 C 時比較類似的,喜歡物品 A 的人都喜歡物品 C,基於這個資料可以推斷使用者 C 很有可能也喜歡物品 C,所以系統會將物品 C 推薦給使用者 C。與上面講的類似,基於專案的協同過濾推薦和基於內容的推薦其實都是基於物品相似度預測推薦,只是相似度計算的方法不一樣,前者是從使用者歷史的偏好推斷,而後者是基於物品本身的屬性特徵資訊。
基於專案的協同過濾推薦機制的基本原理
同時協同過濾,在基於使用者和基於專案兩個策略中應該如何選擇呢?其實基於專案的協同過濾推薦機制是 Amazon 在基於使用者的機制上改良的一種策略,因為在大部分的 Web 站點中,物品的個數是遠遠小於使用者的數量的,而且物品的個數和相似度相對比較穩定,同時基於專案的機制比基於使用者的實時性更好一些。但也不是所有的場景都是這樣的情況,可以設想一下在一些新聞推薦系統中,也許物品,也就是新聞的個數可能大於使用者的個數,而且新聞的更新程度也有很快,所以它的形似度依然不穩定。所以,其實可以看出,推薦策略的選擇其實和具體的應用場景有很大的關係。
6、基於模型的協同過濾推薦
基於模型的協同過濾推薦就是基於樣本的使用者喜好資訊,訓練一個推薦模型,然後根據實時的使用者喜好的資訊進行預測,計算推薦。
基於協同過濾的推薦機制是現今應用最為廣泛的推薦機制,它有以下幾個顯著的優點:
1. 它不需要對物品或者使用者進行嚴格的建模,而且不要求物品的描述是機器可理解的,所以這種方法也是領域無關的。
2. 這種方法計算出來的推薦是開放的,可以共用他人的經驗,很好的支援使用者發現潛在的興趣偏好
而它也存在以下幾個問題:
1. 方法的核心是基於歷史資料,所以對新物品和新使用者都有“冷啟動”的問題。
2. 推薦的效果依賴於使用者歷史偏好資料的多少和準確性。
3. 在大部分的實現中,使用者歷史偏好是用稀疏矩陣進行儲存的,而稀疏矩陣上的計算有些明顯的問題,包括可能少部分人的錯誤偏好會對推薦的準確度有很大的影響等等。
4. 對於一些特殊品味的使用者不能給予很好的推薦。
5. 由於以歷史資料為基礎,抓取和建模使用者的偏好後,很難修改或者根據使用者的使用演變,從而導致這個方法不夠靈活。
7、混合的推薦機制
在現行的 Web 站點上的推薦往往都不是單純只採用了某一種推薦的機制和策略,他們往往是將多個方法混合在一起,從而達到更好的推薦效果。關於如何組合各個推薦機制,這裡講幾種比較流行的組合方法。
1. 加權的混合(WeightedHybridization):用線性公式(linear formula)將幾種不同的推薦按照一定權重組合起來,具體權重的值需要在測試資料集上反覆實驗,從而達到最好的推薦效果。
2. 切換的混合(SwitchingHybridization):前面也講到,其實對於不同的情況(資料量,系統執行狀況,使用者和物品的數目等),推薦策略可能有很大的不同,那麼切換的混合方式,就是允許在不同的情況下,選擇最為合適的推薦機制計算推薦。
3. 分割槽的混合(MixedHybridization):採用多種推薦機制,並將不同的推薦結果分不同的區顯示給使用者。其實,Amazon,噹噹網等很多電子商務網站都是採用這樣的方式,使用者可以得到很全面的推薦,也更容易找到他們想要的東西。
4. 分層的混合(Meta-LevelHybridization):採用多種推薦機制,並將一個推薦機制的結果作為另一個的輸入,從而綜合各個推薦機制的優缺點,得到更加準確的推薦。
具體模型
1 建立矩陣
使用者的評分分為顯式評分和隱式評分,這次的資料只有隱式評分即,瀏覽、收藏、加購物車及購買。
表1. 使用者行為定義表
行為名稱 |
行為描述 |
瀏覽次數 |
取值為瀏覽點選數字 |
收藏 |
取值為(0,1),1為收藏 |
加入購物車 |
取值為(0,1),1為加入 |
購買 |
取值為(0,1),1為購買 |
進行資料的處理得到結構化資料
表2. 訪問行為結構化資料表
序號 |
使用者標識 |
商品標識 |
瀏覽次數 |
收藏 |
加購物車 |
購買 |
1 |
User1 |
Item1 |
1 |
1 |
1 |
0 |
2 |
User1 |
Item2 |
5 |
0 |
1 |
1 |
3 |
User2 |
Item1 |
1 |
1 |
0 |
1 |
N |
UserN |
Item1 |
0 |
0 |
0 |
1 |
假設m代表使用者數,n代表商品數;代表使用者口對商品j的實際評分,1≤i≤m,1≤j≤n;則將使用者行為轉化為隱式評分的規則如下:
1)如果使用者i購買了商品j,則=5;
2)如果使用者i將商品j加入購物車,則=4;
3)如果使用者i將商品j加人收藏夾,則=3;
4)如果使用者i對商品j的瀏覽次數為2次以上,則=2;若點選次數為1次,則=1;
評分規則可以通過推薦結果的準確程度進行調整;
通常使用者對於一件商品會同時做多項操作,例如一個使用者先點選商品,加人收藏夾,然後放入購物車,並最終購買,則取其中評分值最高者。
然後可以建立使用者-商品評分矩陣
2 時間維度
2.1 H.Ebbinghaus遺忘曲線
使用者的興趣是動態變化的,使用者近期訪問和評分的商品更能反應使用者當前的興趣愛好,更能影響使用者當前的購買決策。而早期訪問的商品對於使用者當前可能產生興趣的商品的影響作用較小,即使用者的訪問行為和評分的重要性會隨著時間不斷衰減。使用者的消費行為可以認為是一種心理行為,遵循遺忘曲線的規律。
圖1 遺忘曲線
表示開始時間,表示對專案的評分時間。該處的評分時間是指使用者對商品的綜合評分時間,即行為發生的時間。t表示使用者對商品的評分時間與有效起始時間的間隔:t=-。
表示使用者興趣隨時間變化的指數函式公式(1)如下所示:
(1)
式中,權重λ屬於(0,1),可以根據推薦結果的準確性動態調整。λ越大,表示興趣隨時間衰減越快,反之則越慢。
2.2 推薦過程
2.2.1 基於使用者的協同過濾
步驟1:利用改進的Pearson相關係數公式計算兩個使用者之間的相似性,公式如下:
(2)
式中:yaj,ybj分別表示使用者a和使用者b對商品j的評分,Iab表示使用者a和使用者b共同評分過的專案集合,f(t)為遺忘函式,表示使用者a評分過的商品集合的平均得分,表示使用者b評分過的商品集合的平均得分。
步驟2:將和使用者a相似度最高的前k個使用者作為它的最近鄰居集合U。
步驟3:綜合鄰居使用者對商品j的評價並預測使用者a對商品j的評分。假設c代表鄰居使用者,PS(a,j)代表目標使用者的預測評分,則預測評分的公式如下:
(3)
步驟4:將預測評分最高的前n個商品作為系統推薦的商品。
2.2.2 基於商品的協同過濾
步驟1:利用改進的Pearson相關係數公式計算兩個商品之間的相似性,可以加上專案類別屬性,公式如下:
(4)
式中:,分別表示商品a和商品b對商品j的評分,表示商品a和商品b有共同評分的使用者集合,為遺忘函式,,分別表示商品a和商品b在平均得分。表示商品a和商品b的類別相似度,這裡取值0或1。是平衡引數,可先取0.5。
步驟2:將和商品a相似度最高的前k個作為它的最近鄰集合I。
步驟3:對目標使用者未評分的商品根據公式(4)進行預測評分,從大到小排序,取N個值所對應的專案進行推薦。
2.2.3 混合加權
把基於使用者的推薦與基於商品的推薦,再考慮地理位置的因素,綜合加權。
至於空間地理位置直接單獨聚類,然後加權進去。
——————————————————————————————————————————————————————————————
參考資料:
[1]美團推薦演算法實踐 http://tech.meituan.com/mt-recommend-practice.html
[2]非常好的協同過濾的入門文章http://www.cnblogs.com/wentingtu/archive/2011/12/16/2289926.html
[3]張紅霞, 楊淵, 郎維. 基於客戶行為和興趣變化的電子商務推薦系統[J]. 寶雞文理學院學報:自然科學版, 2012, 32(2):52-56. DOI:10.3969/j.issn.1007-1261.2012.02.011.
[4]韋素雲, 業寧, 楊旭兵. 結合專案類別和動態時間加權的協同過濾演算法[J].
計算機工程, 2014, 40(6):206-210. DOI:10.3969/j.issn.1000-3428.2014.06.044.
[5]朱彥鬆, 竇桂琴. 綜合專案權值分配與時間相關的協同過濾模型[J].
計算機工程與科學, 2014, 36(11). DOI:10.3969/j.issn.1007-130X.2014.11.030.