乙個完整推薦系統的設計實現

2021-10-02 11:33:45 字數 1982 閱讀 7360

在學術界, 一般說到推薦引擎, 我們都是圍繞著某一種單獨的演算法的效果優化進行的, 例如按內容推薦, 協同過濾(包括item-based, user-based, svd分解等),上下文推薦,constraint-based推薦,圖關係挖掘等。 很多比較牛的單個演算法, 就能在某個指標上取得較好效果, 例如mae,rmse。。。不過有自己的優點, 每種演算法也有自己的缺點, 例如按內容推薦主要推薦和使用者歷史結果相似的item,一般的item-based容易推薦熱門item(被更多人投票過)。。。。   所以在工業界,例如各網際網路公司, 都會使用多種演算法進行互相配合, 取長補短, 配合產品提公升效果。而且在完整的推薦系統中,不僅有傳統的rating推薦, 還需要輔以非常多的挖掘, ranking來達到預期效果

user profile基礎推薦挖掘演算法ranking使用者興趣資料

使用者互動偏好例如使用者喜歡使用哪些入口,喜歡哪些操作,以及從這些操作中分析出來的偏好,比如在高德地圖上根據使用者行為反饋分析出來的使用者對美食的偏好:更喜歡火鍋,粵菜,還是快餐

使用者上下文資訊:這些資訊有些是分析出來的,例如在lbs中分析出來的使用者的家在哪兒,公司在哪兒,經常活動的商圈,經常使用的路線等

user profile經常是乙份維護好的資料,在使用的時候,會直接使用該資料,或是將該資料儲存在kv系統中,供online系統實時使用。 在搜尋或是推薦的場景下,每次請求一般只會涉及到一次user profile的kv請求,所以online使用的時候,主要的實現困難是儲存,以及快速kv的快速響應。

基礎挖掘推薦演算法, 主要使用傳統推薦演算法, 結合分析的item profile和user profile, 建立user和item的關係,此時並不會過多考慮其他因素,例如是否冷門/熱門,最主要的就是建立user和item的關係。在各種**中狹義的推薦,主要就是指該部分內容。 主要圍繞著rating,以及top n進行該處的top n(更像是直接rating值最高的top n) 傳統的推薦演算法研究主要圍著這塊工作進行,現在已經有很多比較成熟的演算法,這些演算法相關的研究可參見博文:《推薦系統經典**文獻及資料》;其中也能找到到業界較多成功推薦系統的實踐分享 主要包含以下幾類:

content based推薦: 按內容推薦,主要的工作是user profile, item profile的提取和維護,然後研究各種相似度度量方法(具體相似度度量參見博文:《推薦系統中的相似度度量》)

協同過濾:相當於應用了使用者的行為進行推薦(區別於content based演算法),比較經典的演算法包括傳統的item-based/user-based演算法(參見博文:《協同過濾中item-based與user-based選擇依據》,《collaborative-filtering根據近鄰推薦時需要考慮的3要素》),svd,svd++(具體原理及原始碼參見博文:《svd因式分解實現協同過濾-及原始碼實現》)

演算法效果衡量

此部分是成熟的搜尋、推薦系統具有的核心邏輯

比較簡單的實現方法, 是直接對各種特徵拍閾值進行線性加權,比較成熟的系統一般會使用機器學習的方式和綜合個維特徵, 學習出模型後進行排序, 例如使用learning to rank技術。 該部分需要考慮的因素較多較為複雜。 和傳統的推薦相比, 此處單獨將ranking拿出來。 基礎推薦挖掘, 和傳統的推薦部分比較類似,主要結合user profile, 挖掘哪些item適合推給哪些user。 但僅根據這些挖掘就直接進行推薦是不夠的。 真實online推薦場景中, 需要考慮更多其他因素, 例如:相關性,推薦的上下文,ctr預估,以及商業業務規則。

推薦的上下文:例如推薦產品的入口,互動方式, 不同的入口,甚至同一入口的不同互動方式, 推薦的結果有可能都需要不一樣; 在lbs生活服務中, 請求發生的時間, 地點也是推薦需要重點考慮的上下文因素,例如飯點對餐飲item的提權; 異地情況下對酒店等結果的加權等

ctr預估:成熟的商業系統都會使用模型來完成ctr預估,或是轉化預估

乙個推薦系統的實現

乙個kaggle題目 一 資料集 2220895個使用者 6095 item 73209277個訓練樣本,34910937個測試樣本 a 訓練集 rec log train.txt userid itemid result 1or 1 timestamp 四列特徵。b 測試集,同上 1 user p...

採用KNN演算法實現乙個簡單的推薦系統

1.基於相似使用者的knn 選用公式如下 2.基於相似物品的knn 要求 1.純python 實現 2.利用sklearn開發包實驗 實驗要求 1.資料集 movielens1m,movielens100k 2.評價指標 rmse,均方根誤差 root mean squared error,rmse...

乙個完整 安全的使用者登入系統

在應用php程式設計的時候,我有乙個習慣,不太愛好應用現成的庫檔案,例如phplib或者其它類似的庫,在這個系統中,我也打算自己寫乙個庫檔案,它需要處理認證 確認email,更新帳號 密碼,email 等事情。為了在保證該系統安全的同時,不會加重我現有資料庫的累贅。因此這個新的系統要依附cookie...