推荐系统 - 如何计算当前推荐算法的效益

引言

在之前的《推荐系统 – 商品推荐(新人心得)》文章中,我们已经知道了推荐系统的重要性,以及简单的实现推荐系统。现在我们还需要注意一个问题:当前的推荐算法的效益如何呢?如果我们推荐的东西,客户基本不感兴趣,那我们这推荐系统,相当于是无用的。

如何计算当前推荐算法的效益

  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字段?

答:因为这样可以记录每个用户对推荐系统的行为,可以将这些统计精确到每个用户中,这样可以针对不满意的用户进行系统的调整用户推荐数据。

问:为什么需要用户点击推荐商品记录?

答:因为用户点击了,说明这个推荐也算是成功的,不购买的原因,可能是暂时不需要,或者这个商品的评论问题。

问:为什么需要记录用户浏览推荐商品的时间?

答:用户浏览的时间长了,证明是对于这个比较感兴趣的,也可以做为整个推荐系统效率的部分评分标准。

问:为什么需要打分记录?

答:因为这可以更直观的反馈用户对于这次推送的商品,哪些是满意的,哪些是不满意的,可以更精确的推送心仪的商品给客户。

总结

本文主要讲了如何计算当前推荐算法的效益的一些方法:

  1. 记录用户点击推荐商品行为;
  2. 记录用户购买推荐商品行为;
  3. 记录用户浏览推荐商品时间行为;
  4. 记录用户给推荐商品的打分;
  5. 记录用户点击“换一批”的行为;

结语

  1. 只有不断的对用户行为进行分析,不断的统计分析推荐算法的效益,才能搭建更好的推荐系统。
  2. 此篇文章只是小编的个人思路,仅供参考;
  3. 具体的收集数据、分析算法,需要结合自身的业务来出发;
  4. 如有更好的想法,或者发现小编的不足,欢迎大家评论留言给小编;
  5. 让我们一起学习,一起进步。

    原文作者:咖啡屋小罗
    原文地址: https://zhuanlan.zhihu.com/p/37304219
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞