項(xiàng)目背景
本項(xiàng)目主要介紹電商系統(tǒng)中常見的推薦功能,包括熱門商品和優(yōu)質(zhì)商品的統(tǒng)計(jì)推薦模塊,基于隱語義模型實(shí)現(xiàn)的離線推薦模塊,以及自定義規(guī)則的實(shí)時(shí)推薦模塊。
技術(shù)棧
CentoOS 7.0
spark 2.1.1
hadoop 2.7
scala 2.11.8
redis 4.0.2
kafka 2.12
mongodb 3.4.3
zookeeper 3.4.10
flume-ng 1.8.0
JDK 1.8
數(shù)據(jù)流程

核心模塊
統(tǒng)計(jì)推薦(離線統(tǒng)計(jì))
熱門商品 : 根據(jù)所有歷史評分?jǐn)?shù)據(jù),計(jì)算評分次數(shù)最多的商品。
近期熱門商品 :按月統(tǒng)計(jì)所有歷史評分?jǐn)?shù)據(jù)評分最多的商品。
優(yōu)質(zhì)商品 :根據(jù)有所歷史評分?jǐn)?shù)據(jù),計(jì)算平均評分最高的商品。
基于隱語義模型的協(xié)同過濾推薦(離線推薦)
1、將用戶評分?jǐn)?shù)據(jù),分解為用戶向量和商品向量。
2、將用戶向量和商品向量相乘,產(chǎn)生的笛卡爾積作為預(yù)測評分空矩陣,此時(shí)這是個稀疏矩陣。
3、調(diào)用saprk的ALS.train,進(jìn)行模型訓(xùn)練后,使用模型對2的矩陣進(jìn)行預(yù)測,預(yù)測結(jié)果是稠密矩陣,空的矩陣位置也產(chǎn)生了預(yù)測評分。
4、對新的稠密矩陣進(jìn)行聚合、排序后,即可得到用戶評分列表。
商品相似度列表
通過商品特征矩陣結(jié)合余弦相似度公式,產(chǎn)生商品相似度列表。

模型評估和參數(shù)選取
對于ALS模型訓(xùn)練的過程中,直接指定了隱語義模型的三個參數(shù)(rank,iteration,lambda),所以需要對模型進(jìn)行評估。通常采用均方根誤差(RMSE),考察預(yù)測評分與實(shí)際評分之間的誤差值。

實(shí)時(shí)推薦
1、用戶u對商品p進(jìn)行了評分,觸發(fā)一次實(shí)時(shí)推薦計(jì)算。
2、獲取用戶u按時(shí)間順序最近的K個評分,記為RK;獲取商品p的最相似K個商品集合,記為S作為候選商品集合。
3、然后對每個商品(s中元素),計(jì)算推薦優(yōu)先級,計(jì)算公式如下:

其中:
Rr表示用戶u對商品r的評分;
sim(q,r)表示商品q與商品r的相似度,設(shè)定最小相似度為0.6,低于該閥值視為兩者不相關(guān)并忽略;
sim_num表示q與RK中商品相似度大于最小閥值的個數(shù)
incount表示RK中與商品q相似且評分較高(>=3)的商品個數(shù)
recount表示RK中與商品q相似且本身評分較低(<3)的商品個數(shù)
公式意義:
首先對于每個候選商品q,從用戶u最近K個評分中,找出與q相似度較高(>=0.6)的u已評分商品們,對于這些商品中的每個商品r,將r于q的相似度乘以用戶u對r的評分,將這些乘積計(jì)算平均數(shù),作為用戶u對商品q的基礎(chǔ)預(yù)測評分,lgmax{incount,1}是增強(qiáng)因子表示好評,lgmax{recount,1}是減弱因子,表示差評。此公式采用相似度乘以評分加權(quán)值,并利用增強(qiáng)與削弱因子,實(shí)現(xiàn)了自定義的商品推薦優(yōu)先級計(jì)算。
基于內(nèi)容的相似推薦
通過提取物品內(nèi)容的UGC標(biāo)簽,作為特征向量,結(jié)合商品相似度公式和實(shí)時(shí)推薦規(guī)則,實(shí)現(xiàn)商品相似度列表。為了避免熱門標(biāo)簽對特征提取的影響,可以通過TF-IDF調(diào)整其權(quán)重,盡可能接近用戶偏好。
基于物品的協(xié)同過濾相似推薦
如果物品有同樣的受眾(感興趣的人群),那么它們是有內(nèi)在相關(guān)性的。所以利用已有的行為數(shù)據(jù),分析受眾的相似程度,進(jìn)而得出物品間的相似度。我們把這種方法定義為“同現(xiàn)相似度”,公示如下:
