2018年8月14日 星期二

[Recommend][Spark][ML] 協同過濾

Spark MLlib支援ALS(alternating least squares)推薦演算法, 是機器學習的協同過濾推薦算法, 透過觀察到所有用戶給的產品評價, 來推斷每個使用者的喜好, 找出與你對產品的評價相近的使用者


Spark MLlib支援ALS(alternating least squares)推薦演算法, 是機器學習的協同過濾推薦算法透過觀察到所有用戶給的產品評價, 來推斷每個使用者的喜好, 找出與你對產品的評價相近的使用者, 他喜歡的多半你也喜歡, 例如 : userA喜歡(A.B.C) userB喜歡(A.B), 就可以推薦給userB C產品
  • 針對使用者推薦有興趣的產品 : 我們可以針對每個會員定期發送簡訊 or mail , 登入時也可以推薦他感興趣的產品
  • 針對產品推薦有興趣的使用者 : 當我們想促銷某個產品時, 也可以找出對此產品有興趣的人, 發送mail

原理
類似KNN, 找出具有代表性的的使用者(EX有在評論的人), 再計算每個人與自己的距離, 找出相近的user or item, 預測新使用者的評分

資料蒐集
  • 明確評價(Explicit rating): 使用者有評價分數, 較準確但資料不易蒐集
  • 隱含式評價(Implicit rating) : 記錄使用者是否點擊過

優點 : 
  • 可達到個人化推薦
  • 不須內容分析
  • 可以發現使用者新的興趣點
  • 自動化程度高

缺點 : 
  • 冷啟動問題(cold-start) : 如果沒有歷史資料就沒辦法分析
  • 新使用者問題 : 新使用者沒有評價, 就不知道他喜好
  • 評分資料過少造成稀疏矩陣 >> 矩陣分解 Matrix Factorization
  • 當資料量和使用者數量多時計算量和時間會很大,要提供即時反饋有點難度
  • 會有馬太效應,越熱門的物品越容易被推薦,所以通常都會降低熱門物品的權
  • 在做cross-validation,訓練資料與評估資料在進行切割時,使用spark的 CrossValidator 或 TrainValidationSplit 會遇到user or item在評估資料但不在訓練資料的問題, predictions就會變Nan, 可以在建立als model的時候設定參數coldStartStrategy="drop"
    實務上多半是使用混合方法使用Machine Learning相關技術,結合Content-BasedCollaborativeFiltering的方式進行,可以達到互補效果


程式碼請參考下列範例連結
>>>範例<<<
環境 : 
  • 使用Spark (Spark版本2.2.0以上, Dataframe)
  • Jupyter


Ref : 
  1. Spark Document, https://spark.apache.org/docs/2.3.0/ml-collaborative-filtering.html
  2. 林大貴 著, Python+Spark2.0+Hadoop 機器學習與大數據分析實戰, 博碩

沒有留言:

張貼留言