【JAVA】助力數(shù)字化營銷:基于協(xié)同過濾算法實現(xiàn)個性化商品推薦

周松杰:碧桂園服務(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ù)减噪,所以還需要考慮新物品和新用戶存在的“冷啟動”問題短绸。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市筹裕,隨后出現(xiàn)的幾起案子醋闭,更是在濱河造成了極大的恐慌,老刑警劉巖朝卒,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件证逻,死亡現(xiàn)場離奇詭異,居然都是意外死亡抗斤,警方通過查閱死者的電腦和手機(jī)囚企,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來豪治,“玉大人洞拨,你說我怎么就攤上這事「耗猓” “怎么了烦衣?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我花吟,道長秸歧,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任衅澈,我火速辦了婚禮键菱,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘今布。我一直安慰自己经备,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布部默。 她就那樣靜靜地躺著侵蒙,像睡著了一般。 火紅的嫁衣襯著肌膚如雪傅蹂。 梳的紋絲不亂的頭發(fā)上纷闺,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天,我揣著相機(jī)與錄音份蝴,去河邊找鬼犁功。 笑死,一個胖子當(dāng)著我的面吹牛婚夫,可吹牛的內(nèi)容都是我干的浸卦。 我是一名探鬼主播,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼请敦,長吁一口氣:“原來是場噩夢啊……” “哼镐躲!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起侍筛,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎撒穷,沒想到半個月后匣椰,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡端礼,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年禽笑,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蛤奥。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡佳镜,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出凡桥,到底是詐尸還是另有隱情蟀伸,我是刑警寧澤,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站啊掏,受9級特大地震影響蠢络,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜迟蜜,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一刹孔、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧娜睛,春花似錦髓霞、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至兢交,卻和暖如春薪捍,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背配喳。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工酪穿, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人晴裹。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓被济,卻偏偏與公主長得像,于是被迫代替她去往敵國和親涧团。 傳聞我的和親對象是個殘疾皇子只磷,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,916評論 2 344

推薦閱讀更多精彩內(nèi)容