周松杰:碧桂園服務(wù)后臺開發(fā)高級工程師,擁有8年開發(fā)經(jīng)驗。
1 前言
本文主要介紹基于協(xié)同過濾的推薦算法梦皮。在了解實踐應(yīng)用之前,我們先對推薦系統(tǒng)桃焕、Mahout學(xué)習(xí)框架以及算法進(jìn)行簡單介紹剑肯,然后再結(jié)合實踐進(jìn)行深入探討。
第一部分概述了推薦系統(tǒng)的產(chǎn)生背景观堂、作用和工作原理让网,并介紹了Mahout學(xué)習(xí)框架的算法。
第二部分則基于Mahout框架-協(xié)調(diào)過濾算法师痕,實現(xiàn)個性化商品推薦溃睹。
2 推薦系統(tǒng)、智能推薦算法?
2.1?推薦系統(tǒng)--基本流程講解
2.1.1 推薦系統(tǒng)的意義
用戶角度:推薦系統(tǒng)解決在“信息過載”的情況下胰坟,用戶如何高效地獲得感興趣的物品的問題因篇。例如在淘寶、京東笔横、亞馬遜等竞滓。
公司角度:推薦系統(tǒng)解決了產(chǎn)品如何最大限度地吸引用戶、留存用戶吹缔、增加用戶黏性商佑,從而達(dá)到公司的營收目的。
2.1.2 簡潔系統(tǒng)的推薦
如果每次都隨機(jī)給用戶推薦物品厢塘,則無法將平臺獨特的優(yōu)質(zhì)物品展現(xiàn)出來茶没。例如在鳳凰會商城中肌幽,我們可以根據(jù)用戶的收藏數(shù)、評論數(shù)礁叔、銷量等數(shù)據(jù)對內(nèi)容進(jìn)行排序牍颈,按倒序依次推薦給用戶迄薄。此外琅关,還可以設(shè)置一個運營池和熱點池,由運營人員在后臺進(jìn)行手動更新讥蔽,確保實時熱點展示涣易。
根據(jù)以上想法,我們畫一下推薦系統(tǒng)架構(gòu):
2.1.3?個性化(千人千面)推薦系統(tǒng)
基于以上的推薦系統(tǒng)冶伞,除了隨機(jī)策略外新症,不同用戶看到的商品是一致的,但每個用戶感興趣的物品不同响禽。因此徒爹,推薦系統(tǒng)需要根據(jù)不同用戶進(jìn)行個性化推薦。為了解決這個問題芋类,可以采用不同的推薦算法隆嗅。常用的推薦算法分為以下三種:
從圖中可以看出,協(xié)同過濾分為ItemCF(基于物品的協(xié)同過濾)和UserCF(基于用戶的協(xié)同過濾)侯繁,也是本文要講的內(nèi)容胖喳。基于Mahout一個分布式機(jī)器學(xué)習(xí)算法框架來實現(xiàn)協(xié)同過濾推薦贮竟。
2.2 Mahout-Collaborative Filtering(CF)
2.2.1?Mahout簡介
Mahout是一個分布式機(jī)器學(xué)習(xí)算法的集合和數(shù)據(jù)挖掘工具丽焊,它集成了包括聚類、分類咕别、推薦過濾和頻繁子項挖掘等算法技健。本文提到Mahout,是因為它提供了豐富的算法實現(xiàn)惰拱,有興趣的同學(xué)可以進(jìn)行深入研究凫乖。
從上圖可以看出,Mahout的定位是基于原數(shù)據(jù)生成推薦商品數(shù)據(jù)弓颈。
2.2.2?什么是協(xié)同過濾
協(xié)同過濾的基本概念是將推薦方式變成自動化流程帽芽。它主要基于屬性或興趣相近的用戶經(jīng)驗和建議,提供個性化推薦翔冀。通過協(xié)同過濾导街,可以收集具有類似偏好或?qū)傩缘挠脩簦⑵湟庖娞峁┙o同一集群中的其他用戶作為參考纤子,以滿足人們在做決策時參考他人意見的心態(tài)搬瑰。
2.2.3?ItemCF(基于商品的協(xié)同過濾)
算法思想:基于用戶對物品的偏好找到相似物品款票,然后根據(jù)用戶歷史偏好,推薦相似物品泽论。
計算方法:將所有用戶對某個物品的偏好作為一個向量艾少,利用這些向量計算物品之間的相似度。得到相似物品后翼悴,根據(jù)用戶歷史偏好預(yù)測當(dāng)前用戶還未涉及的物品偏好缚够,最終計算出一個排序的物品列表作為推薦。
判斷兩個物品是否相似以及相似度為多少是協(xié)同過濾算法的難點鹦赎。對于物品來說谍椅,相似度計算往往與業(yè)務(wù)本身有關(guān)。在這里古话,我們使用最通用的計算規(guī)則:如果喜歡兩個物品的用戶重合度越高雏吭,則證明物品越相似。
為了便于觀看陪踩,我們把上圖轉(zhuǎn)成矩陣形式杖们,用戶作為矩陣行坐標(biāo),物品作為列坐標(biāo)肩狂。
假設(shè)兩物品A和B摘完,判斷相似度則通過用戶的重合度比例進(jìn)行計算,如上圖協(xié)同過濾矩陣所示婚温,要判斷「蘋果」與「橙子」的相似程度描焰。
利用向量中余弦相似度進(jìn)行計算,公式為:
向量點積:
向量的長度:
向量的夾角:
將喜歡權(quán)重設(shè)置為1栅螟,不喜歡權(quán)重設(shè)置為-1荆秦,則「蘋果」向量為 (1, 1, 1, 1),「橙子」向量為 (1, 1, -1, 1)力图。
兩者向量點積:1 * 1 + 1 * 1 + 1 * -1 + 1 * 1 = 2
「蘋果」向量長度:2
「橙子」向量長度:2
利用余弦相似度計算得出:
通過此方法以此類推可以將所有物品的相似度計算出來步绸。
然而根據(jù)業(yè)務(wù)需求,「用戶」對「商品」行為有喜歡吃媒、評論瓤介、收藏及購買等多種類型。每種用戶行為都有不同的權(quán)重赘那,例如喜歡是1刑桑,評論是2,收藏是4募舟,購買是9(當(dāng)前鳳凰會商城就是使用該種業(yè)務(wù)規(guī)則計算)祠斧,將上圖換成對應(yīng)的行為類型則為:
然后根據(jù)前面提到的公式進(jìn)行套娃,則可以得出商品的相似度拱礁。在相似度計算上琢锋,任何合理的“向量相似度計算”都可以作為協(xié)同過濾的判斷依據(jù)辕漂,根據(jù)自身業(yè)務(wù)進(jìn)行算法迭代。
2.2.4?UserCF(基于用戶的協(xié)同過濾)
基本思想:基于用戶對物品的偏好找到鄰居用戶(相似用戶)吴超,然后將鄰居用戶喜歡的東西推薦給當(dāng)前用戶钉嘹。
計算方法:將一個用戶對所有物品的偏好作為一個向量,計算用戶之間的相似度鲸阻。找到鄰居后跋涣,根據(jù)鄰居的相似度權(quán)重以及他們對物品的偏好,預(yù)測當(dāng)前用戶未涉及的物品赘娄,計算得到一個排序的物品列表作為推薦仆潮。相似度即為兩個向量之間的距離宏蛉,距離越小相似度越大遣臼。
判斷兩個用戶是否相似以及相似度為多少也是協(xié)同過濾算法的難點。最常用的兩種判斷方式如下:
用戶購買商品有很大重合度拾并。
用戶瀏覽商品有很大重合度揍堰。
在ItemCF我們已經(jīng)說過,任何合理的判斷方法都可以作為相似度計算規(guī)則嗅义,下面我們以 “用戶喜歡的物品有很大重合度” 來作為相似度計算規(guī)則屏歹。
與ItemCF類似,我們也將有向圖轉(zhuǎn)變成矩陣之碗,繼續(xù)沿用ItemCF矩陣蝙眶。
ItemCF是以商品的維度進(jìn)行得出向量,最后通過余弦相似得出商品相似度褪那。UserCF則以用戶的維度進(jìn)行得出向量幽纷,最后通過余弦相似得出商品相似度。
2.2.5?CF推薦工程化
1博敬、離線計算
建立「用戶」到「商品」的索引友浸,記錄每個用戶行為跟「商品」的列表,我們俗稱為LastN偏窝。給定一個「用戶ID」收恢,能夠快速查詢到該用戶最近互動過的N個「商品」列表。
建立「商品」到「商品」的索引祭往,利用相似度計算規(guī)則伦意,離線計算出每個「商品」最相似的「商品」列表。給定一個「商品ID」硼补,能夠快速查詢到最相似的TopK「商品」驮肉。
2、在線召回
根據(jù)當(dāng)前「用戶ID」括勺,通過「用戶」到「商品」索引查詢用戶行為-「商品」列表缆八,再通過「商品」到「商品」索引曲掰,拿到最相似TopK「商品」集合。
以ItemCF為例:
3奈辰、其他召回方式
例如栏妖,根據(jù)地址位置進(jìn)行推薦或者結(jié)合系統(tǒng)標(biāo)簽用戶的形式進(jìn)行推薦等等。
很多人估計想吐槽奖恰,說了這么多吊趾,又是算法計算,又要考慮各種維度才能得出相應(yīng)的相似度來進(jìn)行推薦瑟啃,太麻煩了论泛。別急,Mahout即將登場蛹屿。
4屁奏、ItemCF、UserCF如何選擇
(1)基于用戶的協(xié)同過濾
基于用戶的協(xié)同過濾適用于物品數(shù)量多错负、時效性強(qiáng)的場景坟瓢,但在其他情況下計算速度較慢。推薦結(jié)果個性化程度較弱犹撒,但具有廣泛的適用性和較高的驚喜度折联。
(2)基于物品的協(xié)同過濾
應(yīng)用最廣泛,尤其以電商行業(yè)為典型识颊。
適于用戶多诚镰、物品少的場景,否則計算速度慢祥款。
在物品冷啟動清笨、數(shù)據(jù)稀疏時效果不佳。
推薦精度高镰踏,更具個性化函筋。
傾向于推薦同類商品,推薦的多樣性不足奠伪,形成信息閉環(huán)跌帐。
對于稀疏數(shù)據(jù)集(例如delicious書簽、小眾群體收藏等)绊率,基于物品的過濾方法通常要優(yōu)于基于用戶的過濾方法谨敛。而對于密集數(shù)據(jù)集而言,兩種方法的效果幾乎是一樣的滤否。
——摘自《集體智慧編程》
2.2.6?Mahout推薦算法以及引擎
注意:以下只列本文涉及到的算法脸狸,更多算法有興趣的可自行Google。
3 商品推薦的實現(xiàn)
3.1 鳳凰會商城引入智能推薦的背景前言
3.1.1 需求背景
為更好地了解用戶需求,提高轉(zhuǎn)化率炊甲、用戶停留時間泥彤、瀏覽量和時長等指標(biāo),實現(xiàn)精準(zhǔn)投放卿啡。
原業(yè)務(wù)流程:
通過運營后臺推薦吟吝,每天/月/年的商品曝光量最多十幾個(推薦策略不變的情況下),所有用戶看到的商品都是一樣颈娜。
新業(yè)務(wù)流程:
結(jié)合后臺運營推薦策略剑逃、算法策略、銷量策略進(jìn)行推薦官辽。
3.2?Mahout結(jié)合實際落地應(yīng)用流程
3.2.1 數(shù)據(jù)生命周期
數(shù)據(jù)完整得生命周期如上圖所示蛹磺,分為以下幾個步驟:
數(shù)據(jù)源:用戶的行為日志以及其他行為(如購買行為等,根據(jù)業(yè)務(wù)需要而定)同仆。
數(shù)據(jù)采集:從客戶端采集用戶的行為日志萤捆。
數(shù)據(jù)存儲:日志文件或DB方式存儲。
數(shù)據(jù)計算:基于用戶的行為數(shù)據(jù)進(jìn)行生成推薦數(shù)據(jù)乓梨。
數(shù)據(jù)應(yīng)用鳖轰。
注:第4點中的推薦數(shù)據(jù)生成是基于CachingItemSimilarity商品相似清酥,EuclideanDistanceSimilarity基于歐幾里德距離計算相似度的算法進(jìn)行ItemCF協(xié)同過濾扶镀。
系統(tǒng)用戶行為采集
3.2.2 實踐案例
Mahout推薦引擎提高效率的使用建議:
效果展示:
假設(shè)商品推薦位最大為12個,根據(jù)以下邏輯優(yōu)先級進(jìn)行補(bǔ)位:推薦置頂 > 算法推薦 > 銷量焰轻。
后臺推薦置頂配置:
圖示:某個用戶所處同一個項目下推薦的商品:
結(jié)果期望:基于瀏覽記錄臭觉,推薦同類商品。
關(guān)閉算法推薦后效果對比:
業(yè)務(wù)效果:
可以看出辱志,自上線后蝠筑,隨著開放的試點項目越多,通過推薦商品欄目轉(zhuǎn)化訂單量揩懒,從每月十來單增長到目前的峰值幾百單什乙,增長了近二十倍(數(shù)據(jù)統(tǒng)計截至2023.12.11 0點)。
成交用戶數(shù)方面已球,在去重的情況下臣镣,6月份前成交人數(shù)是幾千人,而在后半年(截至12月份)智亮,成交人數(shù)已經(jīng)達(dá)到了幾萬人忆某。
4 總結(jié)
Mahout是基于Hadoop的機(jī)器學(xué)習(xí)和數(shù)據(jù)挖掘的一個分布式框架,是一個強(qiáng)大的算法庫阔蛉,具有極高的可擴(kuò)展性以及易用性弃舒。此外,Mahout還提供了一些預(yù)處理和特征提取的方法状原,幫助用戶快速構(gòu)建機(jī)器學(xué)習(xí)模型聋呢,它還支持多種編程語言苗踪,如Java、Python等削锰,方便不同背景的用戶使用徒探。
本文沒有討論混合方法。在許多情況下喂窟,結(jié)合協(xié)同過濾和基于內(nèi)容的方法可以達(dá)到最優(yōu)的結(jié)果测暗,因此在許多大型推薦系統(tǒng)中使用∧ピ瑁混合方法的組合主要有兩種形式:一是可以獨立訓(xùn)練兩個模型(一個協(xié)同過濾模型和一個基于內(nèi)容的模型)碗啄,二是直接構(gòu)建一個統(tǒng)一這兩種方法的單一模型(通常是神經(jīng)網(wǎng)絡(luò))。
可嘗試使用向量數(shù)據(jù)庫將商品數(shù)據(jù)向量化后稳摄,獲得商品之間的相似性稚字,結(jié)合用戶畫像行為進(jìn)行推薦。
可以結(jié)合用戶標(biāo)簽畫像提高精準(zhǔn)顆粒度厦酬。
針對提高推薦數(shù)據(jù)實時性胆描,可采取縮短數(shù)據(jù)清洗周期(離線)、分布式(提高并發(fā)處理能力)或Canal監(jiān)控仗阅,F(xiàn)link及隊列等方式來消費用戶行為昌讲,從而提高用戶體驗。
推薦方法的核心是基于歷史數(shù)據(jù)减噪,所以還需要考慮新物品和新用戶存在的“冷啟動”問題短绸。