推薦算法
推薦算法簡單的來說就是根據用戶的喜好來推薦相似的東西
例如淘寶的猜你喜歡,抖音的XXX。
推薦算法的特點csdn
1.根據和你共同喜好的人來給你推薦 ,好友或者關注的人
2.根據你喜歡的物品找出和它相似的來給你推薦 ,淘寶的猜你喜歡
3.根據你給出的關鍵字來給你推薦,這實際上就退化成搜索算法了 ,類似於學長講的page ranking,我暫時先這么理解
4.根據上面的幾種條件組合起來給你推薦,這個需要收集的信息就比較多了
user profile
用戶畫像是根據用戶的社會屬性,消費行為,生活習慣抽象出一個標簽化的用戶模型。(zhihua)[https://www.zhihu.com/question/19853605]
簡單的來說就是就是分析user的特點,是根據基礎數據不斷修正的過程
圖片來自zhihu
基於流行度的推薦算法
基於流行度的推薦算法比較簡單粗暴,主要是對熱點商品或者信息的推薦。它主要是根據PV、UV、日均PV或分享率等數據來按某種熱度排序來推薦給用戶。
PV:page view 頁面的瀏覽量或者訪問量,用戶對同一頁面的多次訪問,算累計
UV:unique view 一個ip只算一個,不算累計wise
VV:visit view 用戶一天內訪問網頁的累計量
這種可以解決新注冊的用戶的冷啟動問題,但是沒辦法進行個性化推薦。不過可以根據tag進行分類后在進行推薦
基於內容推薦
它的核心思想是根據推薦物品或內容的元數據,發現物品或者內容的相關性,然后基於用戶以往的喜好記錄,推薦給用戶相似的物品。比如你看了哈利波特I,基於內容的推薦算法發現哈利波特II-VI,與你以前觀看的在內容上面(共有很多關鍵詞)有很大關聯性,就把后者推薦給你。淘寶的猜你喜歡。
- 多用於資訊文章等,可以抽取tag作為相似度
- 易於實現,不需要用戶數據因此不存在稀疏性和冷啟動問題。
用戶數據稀疏性:
現在待處理的推薦系統規模越來越大,用戶和商品(也包括其他物品,譬如音樂、網頁、文獻……)數目動輒百千萬計,兩個用戶之間選擇的重疊非常少。如果以用戶和商品之間已有的選擇關系占所有可能存在的選擇關系的比例來衡量系統的稀疏性,那么我們平時研究最多的MovieLens數據集的稀疏度是4.5%,Netflix是1.2%,這些其實都是非常密的數據了,Bibsonomy是0.35%,Delicious是0.046%。想想淘寶上號稱有8億商品,平均而言一個用戶能瀏覽800件嗎,我估計不能,所以稀疏度應該在百萬分之一或以下的量級。數據非常稀疏,使得絕大部分基於關聯分析的算法(譬如協同過濾)效果都不好。這個問題本質上是無法完全克服的,為了解決這個問題,也有很多辦法,譬如可以通過擴散的算法,從原來的一階關聯(兩個用戶有多少相似打分或者共同購買的商品)到二階甚至更高階的關聯(假設關聯性或者說相似性本身是可以傳播的)[8],也可以添加一些缺省的打分[9],從而提高相似性的分辨率。數據規模越大,一般而言越稀疏,現在能夠處理稀疏數據的算法被認為是更有前途的起個名字真的好難啊哈哈
簡單的來說就是特征多,而重疊的樣本很少
冷啟動:推薦系統需要根據用戶的歷史行為和興趣預測用戶未來的行為和興趣,對於BAT這類大公司來說,它們已經積累了大量的用戶數據,不發愁。但是對於很多做純粹推薦系統的網站或者很多在開始階段就希望有個性化推薦應用的網站來說,如何在對用戶一無所知(即沒有用戶行為數據)的情況下進行最有效的推薦呢?這就衍生了冷啟動問題。csdn
-
基於物品本身特征推薦,因此不存在過度推薦熱門的問題。
-
抽取的特征既要保證准確性又要具有一定的實際意義,否則很難保證推薦結果的相關性。豆瓣網采用人工維護tag的策略,依靠用戶去維護內容的tag的准確性。
-
推薦的Item可能會重復,典型的就是新聞推薦,如果你看了一則關於MH370的新聞,很可能推薦的新聞和你瀏覽過的,內容一致。也就是重復了
基於關聯規則的推薦
基於關聯規則的推薦更常見於電子商務系統中,並且也被證明行之有效。其實際的意義為購買了一些物品的用戶更傾向於購買另一些物品。基於關聯規則的推薦系統的首要目標是挖掘出關聯規則,也就是那些同時被很多用戶購買的物品集合,這些集合內的物品可以相互進行推薦。目前關聯規則挖掘算法主要從Apriori和FP-Growth兩個算法發展演變而來。 基於關聯規則的推薦系統一般轉化率較高,因為當用戶已經購買了頻繁集合中的若干項目后,購買該頻繁集合中其他項目的可能性更高。
對已有的用戶購買行為信息,推薦相似物品。
- 樣本大,計算量大
- 用戶數據稀疏,冷啟動問題
基於協同過濾的推薦算法
協同過濾是一種在推薦系統中廣泛采用的推薦方法。這種算法基於一個“物以類聚,人以群分”的假設,喜歡相同物品的用戶更有可能具有相同的興趣。基於協同過濾的推薦系統一般應用於有用戶評分的系統之中,通過分數去刻畫用戶對於物品的喜好。而是通過用戶建立物品與物品之間的聯系。
3.4.1 基於用戶(User-based)的推薦
基於用戶的協同過濾推薦的基本原理是,根據所有用戶對物品或者信息偏好(評分),發現與當前用戶口味和偏好相似的“鄰居”用戶群,在一般應用中是采用計算K近鄰的算法;基於這 K個鄰居的歷史偏好信息,為當前用戶進行推薦。 這種推薦系統的優點在於推薦物品之間在內容上可能完全不相關,因此可以發現用戶的潛在興趣,並且針對每個用戶生成其個性化的推薦結果。缺點在於一般的Web系統中,用戶的增長速度都遠遠大於物品的增長速度,因此其計算量的增長巨大,系統性能容易成為瓶頸。因此在業界中單純的使用基於用戶的協同過濾系統較少。
就是根據用戶分類,相似度矩陣是根據用戶之間的
基於物品(Item-based)的推薦
基於物品的協同過濾和基於用戶的協同過濾相似,它使用所有用戶對物品或者信息的偏好(評分),發現物品和物品之間的相似度,然后根據用戶的歷史偏好信息,將類似的物品推薦給用戶。基於物品的協同過濾可以看作是關聯規則推薦的一種退化,但由於協同過濾更多考慮了用戶的實際評分,並且只是計算相似度而非尋找頻繁集,因此可以認為基於物品的協同過濾准確率較高並且覆蓋率更高。 同基於用戶的推薦相比,基於物品的推薦應用更為廣泛,擴展性和算法性能更好。由於項目的增長速度一般較為平緩,因此性能變化不大。缺點就是無法提供個性化的推薦結果。
根據物品進行分類,相似度矩陣是物品之間
- 因此無論基於物品的推薦算法還是基於商品的推薦算法,都是基於用戶的歷史數據的,對於新用戶的話就會存在用戶的冷啟動問題。
- 結果會依賴用戶的偏好數據,而用戶的額偏好數據是稀疏的
- 對於用戶的偏好變化趨勢是無法從歷史數據中得到的
基於模型的推薦算法
基於模型的方法有很多,主要是使用常用的機器學習算法對目標用戶建立推薦算法模型,然后對用戶的愛好進行預測推薦以及對推薦的結果打分排序等。 常用的模型包括Aspect Model,pLSA,LDA,聚類,SVD,Matrix Factorization,LR,GBDT等,這種方法訓練過程比較長,但是訓練完成后,推薦過程比較快且准確。因此它比較適用於實時性比較高的業務如新聞、廣告等。當然,而若是需要這種算法達到更好的效果,則需要人工干預反復的進行屬性的組合和篩選,也就是我們常說的 特征工程。而由於新聞的時效性,系統也需要反復更新線上的數學模型,以適應變化。基於模型的算法由於快速、准確,適用於實時性比較高的業務如新聞、廣告等,而若是需要這種算法達到更好的效果,則需要人工干預反復的進行屬性的組合和篩選,也就是常說的Feature Engineering。而由於新聞的時效性,系統也需要反復更新線上的數學模型,以適應變化。
真正的現實應用中,其實基本上很少會使用單一的推薦算法去實現推薦任務。因此,大型成熟網站的推薦系統都是基於各種推薦算法的優缺點以及適合場景分析的情況下的組合使用的“混合算法”。當然,混合策略也會是十分豐富的,例如不同策略的算法加權、不同場景和階段使用不同的算法等等。具體的怎么混合需要結合實際的應用場景進行分析與應用。
CTR
推薦系統中使用ctr預估模型
ctr即廣告點擊率,在推薦系統中,通常是按照ctr來對召回的內容子集進行排序,然后再結合策略進行內容的分發。
LR
能夠很好的處理離散特征,具體推導見之前的隨筆
GBDT
GBDT的優勢在於處理連續值特征,比如用戶歷史點擊率,用戶歷史瀏覽次數等連續值特征。而且由於樹的分裂算法,它具有一定的組合特征的能力,模型的表達能力要比LR強。GBDT對特征的數值線性變化不敏感,它會按照目標函數,自動選擇最優的分裂特征和該特征的最優分裂點,而且根據特征的分裂次數,還可以得到一個特征的重要性排序。所以,使用GBDT減少人工特征工程的工作量和進行特征篩選。
GBDT善於處理連續值特征,但是推薦系統的絕大多數場景中,出現的都是大規模離散化特征,如果我們需要使用GBDT的話,則需要將很多特征統計成連續值特征(或者embedding),這里可能需要耗費比較多的時間。同時,因為GBDT模型特點,它具有很強的記憶行為,不利於挖掘長尾特征,而且GBDT雖然具備一定的組合特征的能力,但是組合的能力十分有限,遠不能與dnn相比。
GBDT+LR
即先使用GBDT對一些稠密的特征進行特征選擇,得到的葉子節點,再拼接離散化特征放進去LR進行訓練。在方案可以看成,利用GBDT替代人工實現連續值特征的離散化,而且同時在一定程度組合了特征,可以改善人工離散化中可能出現的邊界問題,也減少了人工的工作量。
\(X_{n e w}=X+g b d t(x)^{\prime} s\) nodes
\(f(x)=\log i\) stics \(\left(\text {linear}\left(X_{\text {new}}\right)\right)\)
dnn
比較著名的是谷歌的wide and deep 推導可以看之前的隨筆