推薦系統演算法
推薦系統常見的方法包含內容過濾 (Content-based Filtering)、協同過濾 (Collaborative Filtering),接下來就詳細的紀錄這些方法。
1. 內容過濾 Content-based Filtering
推薦屬性相似的商品 eg. 用戶讀過《Aristoi》這本文學小說,則推薦另一本相同作者的文學小說《Angel Station》。書籍的作者、內容分類 (eg. 文學、奇幻、商業…)都可視為商品屬性的分類。
2. 協同過濾 Collaborative Filtering
協同過濾是根據眾人的反饋,來衡量彼此之間的相似度,衡量相似度的維度分為兩種 — User-based (與你相似的用戶也購買了…), Item-based (購買此商品的人也買了…),透過找到與你相似度高的其他用戶(or 商品),來預測你的喜好。
- User-based|與你相似的用戶也購買了…
- Item-based|購買此商品的人也買了…
分析的方法也分為兩種 — model-based 與 memory-based。
2-1. Memory-based Collaborative Filtering
Memory-based 是藉由歷史紀錄,以數學統計的方法計算出推薦的商品
對用戶 B 進行商品推薦為例:
step 1 — 將購買交易資料轉換為 User-Item Rating Matrix
step 2 — 藉由 User-Item Rating Matrix 衡量用戶之間的相似度 User-User Similarity Matrix
step 3 — 找到與 User B 相似的用戶 — User A
step 4 — 以 User A 的購買紀錄當作給用戶 B 的商品推薦清單。一般來說,推薦清單中會扣除曾經購買過的商品。
常見的相似度計算方式 — Jaccard Similarity, Cosine Similarity, Pearson Similarity
Memory-based 會遇到哪些問題?
Memory-based 是使用窮舉法,所以 User-Item Rating Matrix 是很大的稀疏矩陣,會耗費大量的計算資源,而 Model-based 的方法能夠解決這些問題。
2–2. Model-based Collaborative Filtering
- 矩陣分解 Matrix Factorization
為了解決 User-Item Rating Matrix 是稀疏矩陣,大部分是空值的問題, Matrix Factorization 利用降維的技術,將 User-Item Rating Matrix 分解為 User-Matrix 和 Item-Matrix。
User-Matrix (user x factor),以 latent factor 來表示用戶特徵, User-Matrix 的優點是可以以較低的維度來表示用戶特徵,方便計算,缺點是降維後會出現 information loss,且 latent factor 的意義不容易解釋。
如何決定 Factor 的數量?
Factor 數量多,保留下來的資訊就越多,但是需要耗費的計算資源也越多,選擇 Factor 數量是在資訊量與計算量之間的 trade-off。
最近的專案經驗中,以 Matrix Factorization 來做分群,實驗 Factor 數量分別為 30, 60, 100, 150, 200,以兩種方式衡量:
- 每群距離群中心最近的 Top 30 個人,特徵有最明顯的區隔 ➡ ️Factor 200
- 每群之間有最明顯的區隔 ➡ Factor 30
➡️ Factor 數量多時,可能會出現 overfitting 的現象。
Factor 的數量不一定是越多越好,而是取決於模型最後想要達成的目的。
如何找出 Factor ?
定義 Objective function,我們的目標是找到讓 Objective function 最小的值,會用 optimizer 來優化,讓 loss 越小越好,常用的兩種 optimizer — Stochastic gradient descent (SGD)、Weighted Alternating Least Squares (WALS)。
- KNN Regression (k-Nearest Neighbors)
KNN 可用來當作分類與回歸預測模型,分類的話是多數決的概念,商品推薦則是當作回歸預測,利用周圍已知的 K 個評分 ,預測未知的商品評分。
以上內容紀錄了幾個目前常用的推薦演算法,之後再寫文章紀錄 — 如何衡量推薦演算法的成效、如何挑選適合的推薦方法,這一篇就先寫到這邊了 👋