推薦系統 - 如何計算當前推薦算法的效益

引言

在以前的《推薦系統 - 商品推薦(新人心得)》文章中,咱們已經知道了推薦系統的重要性,以及簡單的實現推薦系統。如今咱們還須要注意一個問題:當前的推薦算法的效益如何呢?若是咱們推薦的東西,客戶基本不感興趣,那咱們這推薦系統,至關因而無用的。算法

 

如何計算當前推薦算法的效益

  1. 監聽每次推薦給用戶的商品
  2. 推薦的商品列表中增長反饋性按鈕

 

監聽每次推薦給用戶的商品

  1. 用戶點擊推薦商品;
  2. 用戶購買推薦商品;
  3. 用戶觀看推薦商品的時間。

 

/* 推薦記錄表 */
CREATE TABLE `goods_recommend` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主鍵ID', `user_id` int(11) NOT NULL COMMENT '推送給的用戶ID', `score` int(11) NOT NULL COMMENT '這次推薦打分', `create_time` int(11) NOT NULL COMMENT '推薦時間', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='推薦記錄表'; /* 推薦商品點擊記錄表 */
CREATE TABLE `goods_click` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主鍵ID', `user_id` int(11) NOT NULL COMMENT '用戶ID', `recommend_id` int(11) NOT NULL COMMENT '推薦ID', `goods_id` int(11) NOT NULL COMMENT '商品ID', `num` int(11) NOT NULL COMMENT '點擊次數(防止點擊同一件商品屢次,生成多條記錄)', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='推薦商品點擊記錄表'; /* 推薦商品購買記錄表 */
CREATE TABLE `goods_buy` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主鍵ID', `user_id` int(11) NOT NULL COMMENT '用戶ID', `recommend_id` int(11) NOT NULL COMMENT '推薦ID', `goods_id` int(11) NOT NULL COMMENT '商品ID', `num` int(11) NOT NULL COMMENT '購買數量', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='推薦商品購買記錄表'; /* 推薦商品瀏覽時間表 */
CREATE TABLE `goods_read` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主鍵ID', `user_id` int(11) NOT NULL COMMENT '用戶ID', `recommend_id` int(11) NOT NULL COMMENT '推薦ID', `goods_id` int(11) NOT NULL COMMENT '商品ID', `second` int(11) NOT NULL COMMENT '停留多少秒', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='推薦商品瀏覽時間表';

 

推薦的商品列表中增長反饋性按鈕

  1. 每一個商品增長評價按鈕,獲取用戶對於某個推薦商品的評價:1-5分;
  2. 推薦商品列表增長換一批按鈕,經過這個按鈕的點擊預判用戶的滿意程度。
/* 推薦商品的打分記錄表 */
CREATE TABLE `goods_score` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主鍵ID', `user_id` int(11) NOT NULL COMMENT '用戶ID', `recommend_id` int(11) NOT NULL COMMENT '推薦ID', `goods_id` int(11) NOT NULL COMMENT '商品ID', `score` int(11) NOT NULL COMMENT '分數', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='推薦商品的打分記錄表'; /* 推薦商品是否喜歡記錄表 */
CREATE TABLE `goods_like` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主鍵ID', `user_id` int(11) NOT NULL COMMENT '用戶ID', `recommend_id` int(11) NOT NULL COMMENT '推薦ID', `is_like` int(11) NOT NULL COMMENT '是否切換(若是切換,表明用戶對於此次的推薦不怎麼滿意)', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='推薦商品是否喜歡記錄表';

 

統計數據

上面咱們就已經獲取到了咱們須要的數據(具體須要什麼數據,根據自身業務來決定),如今咱們須要對這些數據進行統計了。學習

  1. 用戶點擊的商品次數 / 共推薦給用戶的商品數量 = 這個推薦系統對於這個用戶的點擊比例;
  2. 用戶的購買數量 / 共推薦給用戶的商品數量 = 這個推薦系統對於這個用戶的購買比例;
  3. 有瀏覽時間從大到小排序 = 用戶比較感興趣的推薦商品(估算,由於不能肯定用戶是瀏覽哪一個商品所逗留的時間);
  4. 經過用戶對於這次推薦商品的打分 = 獲取用戶感興趣的商品(較爲精確,由於用戶針對每一個商品打分);
  5. 經過判斷用戶是否切換的記錄 = 來判斷用戶是否不滿意這次推薦的商品(估算,由於用戶可能不喜歡此次推薦的商品,但也沒有點擊換一批按鈕)。
  6. 統計全部用戶點擊商品的次數 / 總共推薦的商品次數 = 整個推薦系統的點擊比例;
  7. 統計全部用戶購買商品的次數 / 總共推薦的商品次數 = 整個推薦系統的購買比例;
  8. 統計瀏覽時間大於10秒(判斷停留10秒爲感興趣)的推薦次數 / 總共推薦的次數 = 整個推薦系統的滿意比例(估算)。

 

問:爲何須要用戶ID字段?spa

答:由於這樣能夠記錄每一個用戶對推薦系統的行爲,能夠將這些統計精確到每一個用戶中,這樣能夠針對不滿意的用戶進行系統的調整用戶推薦數據。code

 

問:爲何須要用戶點擊推薦商品記錄?blog

答:由於用戶點擊了,說明這個推薦也算是成功的,不購買的緣由,多是暫時不須要,或者這個商品的評論問題。排序

 

問:爲何須要記錄用戶瀏覽推薦商品的時間?ci

答:用戶瀏覽的時間長了,證實是對於這個比較感興趣的,也能夠作爲整個推薦系統效率的部分評分標準。unicode

 

問:爲何須要打分記錄?get

答:由於這能夠更直觀的反饋用戶對於此次推送的商品,哪些是滿意的,哪些是不滿意的,能夠更精確的推送心儀的商品給客戶。class

 

總結

本文主要講了如何計算當前推薦算法的效益的一些方法:

  1. 記錄用戶點擊推薦商品行爲;
  2. 記錄用戶購買推薦商品行爲;
  3. 記錄用戶瀏覽推薦商品時間行爲;
  4. 記錄用戶給推薦商品的打分;
  5. 記錄用戶點擊「換一批」的行爲。

 

結語

  1. 只有不斷的對用戶行爲進行分析,不斷的統計分析推薦算法的效益,才能搭建更好的推薦系統。
  2. 此篇文章只是小編的我的思路,僅供參考;
  3. 具體的收集數據、分析算法,須要結合自身的業務來出發;
  4. 若有更好的想法,或者發現小編的不足,歡迎你們評論留言給小編;
  5. 讓咱們一塊兒學習,一塊兒進步。
相關文章
相關標籤/搜索