項(xiàng)目的背景
推薦系統(tǒng)可以在用戶沒有明確表述需求的情況下,給出準(zhǔn)確的,甚至超出預(yù)期的建議結(jié)果委造,以提升用戶滿意度和GMV渗稍。
典型的推薦場景如下:
電商佩迟,根據(jù)商品推薦商品
根據(jù)推薦位置劃分合適的推薦算法
推薦算法有很多種,但是在互聯(lián)網(wǎng)行業(yè)使用較多實(shí)現(xiàn)效率高的算是“協(xié)同過濾”竿屹。但是根據(jù)不同的位置用戶接受程度的不同报强,又有所區(qū)分。
推薦算法的分類拱燃,可以參考這篇博文
(http://www.ibm.com/developerworks/cn/web/1103_zhaoct_recommstudy1/index.html)
本項(xiàng)目的主要目標(biāo):
基于項(xiàng)目的協(xié)同過濾推薦
基于項(xiàng)目的協(xié)同過濾推薦的基本原理也是類似的秉溉,只是說它使用所有用戶對物品或者信息的偏好,發(fā)現(xiàn)物品和物品之間的相似度碗誉,然后根據(jù)用戶的歷史偏好信息召嘶,將類似的物品推薦給用戶,下圖 很好的詮釋了它的基本原理哮缺。
假設(shè)用戶 A 喜歡物品 A 和物品 C弄跌,用戶 B 喜歡物品 A,物品 B 和物品 C尝苇,用戶 C 喜歡物品 A铛只,從這些用戶的歷史喜好可以分析出物品 A 和物品 C 時(shí)比較類似的埠胖,喜歡物品 A 的人都喜歡物品 C,基于這個(gè)數(shù)據(jù)可以推斷用戶 C 很有可能也喜歡物品 C淳玩,所以系統(tǒng)會(huì)將物品 C 推薦給用戶 C直撤。
與上面講的類似,基于項(xiàng)目的協(xié)同過濾推薦和基于內(nèi)容的推薦其實(shí)都是基于物品相似度預(yù)測推薦蜕着,只是相似度計(jì)算的方法不一樣谋竖,前者是從用戶歷史的偏好推斷,而后者是基于物品本身的屬性特征信息侮东。
架構(gòu)設(shè)計(jì)目標(biāo)
實(shí)時(shí):訂閱推薦系統(tǒng)關(guān)注的數(shù)據(jù)流:推薦商品點(diǎn)擊數(shù)據(jù)圈盔。實(shí)時(shí)記錄推薦過,點(diǎn)擊過的商品悄雅。
非實(shí)時(shí):復(fù)用現(xiàn)有的離線數(shù)據(jù)集驱敲,如:用戶屬性,商品屬性宽闲,商品喜歡众眨,買手關(guān)注,商品購買記錄容诬。
初版推薦算法娩梨,基于item推薦item。結(jié)果出現(xiàn)在app商品詳情頁览徒。
數(shù)據(jù)出現(xiàn)的具體策略:
(1) 優(yōu)先基于item的協(xié)同過濾items 集合
(2) 同類目下最熱門的items集合(by search)
(3) 同類目下最新的items集合(by search)在商品詳情頁的底部嘗試如下算法流程
A)基于協(xié)同過濾的item推薦
1) 使用詳情頁item內(nèi)容狈定;使用該用戶歷史購買/喜歡/點(diǎn)擊商品的item內(nèi)容的共現(xiàn)性質(zhì)的協(xié)同過濾算法。
原因:此處給出基于物品的推薦更好被用戶理解(沒有差別特別巨大的商品推薦出來)习蓬。
為了解決冷啟動(dòng)問題:
B)基于item內(nèi)容的推薦
1) 同二級分類下面的熱門商品/最新鮮商品
2) 基于搜索纽什,標(biāo)題丟進(jìn)query檢索,取top k結(jié)果躲叼,也可以使用類目做進(jìn)一步的限制芦缰。
3) 將來有更多的標(biāo)簽后,可以使用elasticsearch的more like this功能枫慷。
C)過濾掉已經(jīng)溝通過/喜歡過/展示過的數(shù)據(jù)未來
隨著分享和曬單的數(shù)據(jù)增多让蕾,可以在“發(fā)現(xiàn)”tab引入基于用戶維度的協(xié)同過濾推薦。
“今日推薦”:根據(jù)user維度的協(xié)同過濾和熱度綜合或听。
整體架構(gòu)
說明
離線系統(tǒng)負(fù)責(zé)算法的數(shù)據(jù)搜集探孝,數(shù)據(jù)來源于2處
1)mysql集群:如用戶表,商品表神帅,贊等等再姑。
2)消息隊(duì)列:如用戶準(zhǔn)實(shí)時(shí)的點(diǎn)擊,贊等交互行為日志找御。在線使用elastic search提供服務(wù)
我個(gè)人感覺的優(yōu)點(diǎn)如下:
1)復(fù)用搜索服務(wù)集群元镀,開發(fā)效率穩(wěn)定性比較有保證绍填。
2)通過搜索的方式召回,天然去除了熱點(diǎn)帶來的“馬太效應(yīng)”的問題栖疑。
3)通過elastic search的多列讨永,天然支持多列的boosting推薦。
具體請參考這篇博客:http://occamsmachete.com/ml/2014/10/07/creating-a-unified-recommender-with-mahout-and-a-search-engine/計(jì)算集群
1)需要先搭建好spark和mahout
2)本項(xiàng)目主要使用了其中的spark-itemsimilarity 算法遇革,我們主要集中于數(shù)據(jù)實(shí)時(shí)全面的準(zhǔn)備即可卿闹。
詳細(xì)請參考:https://mahout.apache.org/users/algorithms/intro-cooccurrence-spark.html在線請求
一個(gè)典型的query如下:
{
"query":{
"query_string":{
"query":"rec_buy^3:68827 OR rec_like^1: 68827 "
}}
}
通過購買或者喜歡召回item相似的商品作為推薦list。并可根據(jù)業(yè)務(wù)調(diào)整不同的重要性萝快,如這個(gè)query锻霎,我們認(rèn)為購買行為比點(diǎn)贊行為更能反映用戶的喜好。
最終返回的結(jié)果list需要去除用戶已經(jīng)購買過或?yàn)g覽過的商品集合揪漩。
上線效果
由于使用elastic search集群旋恼,在gc正常下,系統(tǒng)運(yùn)行十分穩(wěn)定
顯著提升了用戶的停留時(shí)間和gmv
在更全面更快速搜集好用戶行為數(shù)據(jù)后奄容,有希望進(jìn)一步提升推薦的效果