• 推荐系统


    引言

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

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

    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. 让我们一起学习,一起进步。
  • 相关阅读:
    ES 分词器设置+同义词设置
    ES 重写分数查询
    ReadWriteLock源码阅读
    java编程之Lambda、Stream、Optional
    AQS源码阅读
    MinIOGithub标星19K+Star,10分钟自建对象存储服务!
    使用Jenkins一键打包部署SpringBoot应用,就是这么6!
    网络与系统攻防技术|实验四 恶意代码分析实践
    React的通信方式与状态管理:Redux与Mobx
    React新旧版本生命周期对比
  • 原文地址:https://www.cnblogs.com/kafeixiaoluo/p/9092419.html
Copyright © 2020-2023  润新知