2018年8月14日 星期二

[Recommend] 推薦系統觀念

推薦系統概念介紹, 提到數據採集和處裡的一些觀念, 與工程上可能遇到的問題, 然後使用幾個實作範例來感受一下推薦功能的魅力
常見的推薦演算法
  • 基於內容的推薦(Content-based) :  根據用戶與產品的資訊推薦
  • 人口統計式推薦(Demographic) : 使用者依照個人屬性如性別, 年齡, 教育, 居住地分類, 依分類做統計推薦
  • 關聯規則(Association Rule) : 消費者買A, 那他買B的機率也很高, 如購物籃分析
  • 協同過濾(Collaborative Filtering) : 根據所有使用者的點擊或評價, 來推斷每個使用者的喜好, 找出與你對產品的評價相近的使用者, 他喜歡的多半你也喜歡, 例如 : userA喜歡(A.B.C) userB喜歡(A.B), 就可以推薦給userB C產品


採集數據和處理數據的關鍵點


  • 首先必須理解用戶的數據  : 比如說用戶點過哪個視頻, 到底是喜歡還是不喜歡? 解決方法為合理定義特徵值如用戶點擊, 停留時間, 中間有沒有跳放, 重複觀看, 點讚評分, 正面的label最大化, 負面的就最小化
  • 合理看待缺失數據 : 比如說數據丟了, 或如年齡.地址等非必填數據, 如果太多非必填數據會缺失過多, 也可以建立其他如分群model來還原數據
  • 打通個平台之關係 :  不同平台可以ID不同, 導致人員對不上, 解決方法為利用其他訊息如IP位置, 設備類型等特徵相近的地方把兩方面數據串起來, 更複雜視使用model將兩平台用戶配對. 另一種是去除ID, 有時用戶瀏覽行為不一定登錄, 聚焦在用戶行為上, 例如user1看過A又去看B, user2看過A也去看B, 就可以推測AB有關係, user3只看A, 很有可以可以推薦他B, 如國協同過濾的概念,  匿名有個好處是可以保護個資
  • model除了考慮產品與用戶之間的關係, 還必須考慮如何年齡, label設定, 時效性等因素考慮進去, 例如報紙文章最新的比較有吸引力 

模型使用工程上的問題

  • model如何訓練 : 好的推薦系統必須有時效性, 數據更新過慢或model無法把最新用戶資料包含進去, 效果就會打折, 必須建立在線更新model機制, data要以streaming的方式進入DB與model
  • model如何使用 : 必須低延遲, 需要大規模調度, 負載平衡,  壓力測試
  • model如何制定評判標準 : 通常使用精確率(Precision)和召回率(Recall), 來做指標, 也有使用平均百分位數(Mean Percentile Rank)
  • model如何上線 : 先給百分之一的user使用新model, 百分之一的人當對照組, 如果效果好, 可以逐漸增加到百分之五.百分之十.最終到百分之百, 判斷效果的指標盡量使用短期的, 長期指標如留存率就無法當成實驗結果, 因為等不到那天到來, 然而指標怎麼去除噪音, 怎麼處理稀疏數據, 怎麼描述統計顯著性, 怎麼樣找到好的短期指標需要花時間去探索和驗證
  • 監控系統 : 指標異常檢測, 可結合異常檢測的機器學習model

實作範例 - 可參考下列文章或範例
>>[Recommend][Spark] 協同過濾
>> Spark官網 - 關聯規則範例
      >> Spark官網 - 關聯規則範例實作 
      
      >> 推薦系統介紹 

市面上的推薦系統參考

實務上多半是使用多種推薦混合例如Spotify推薦系統, 當然就實作面難度很高囉~, 請參考下列文章
>>揭秘 Spotify 三大核心演算法 :用 Python + AI 打造讓你上癮的「每週新發現」歌單!


Ref:
  1. 謝梁.魯潁.勞虹嵐 , Keras快速上手, 電子工業出版社
  2. Spark Document, https://spark.apache.org/docs/2.3.0/ml-collaborative-filtering.html
  3. 林大貴 著, Python+Spark2.0+Hadoop 機器學習與大數據分析實戰, 博碩

沒有留言:

張貼留言