推荐系统 - 如何计算当前推荐算法的效益
引言
在之前的《推荐系统 - 商品推荐(新人心得)》文章中,我们已经知道了推荐系统的重要性,以及简单的实现推荐系统。现在我们还需要注意一个问题:当前的推荐算法的效益如何呢?如果我们推荐的东西,客户基本不感兴趣,那我们这推荐系统,相当于是无用的。
如何计算当前推荐算法的效益
- 监听每次推荐给用户的商品
- 推荐的商品列表中增加反馈性按钮
监听每次推荐给用户的商品
- 用户点击推荐商品;
- 用户购买推荐商品;
- 用户观看推荐商品的时间。
/* 推荐记录表 */ 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-5分;
- 推荐商品列表增加换一批按钮,通过这个按钮的点击预判用户的满意程度。
/* 推荐商品的打分记录表 */ 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='推荐商品是否喜欢记录表';
统计数据
上面我们就已经获取到了我们需要的数据(具体需要什么数据,根据自身业务来决定),现在我们需要对这些数据进行统计了。
- 用户点击的商品次数 / 共推荐给用户的商品数量 = 这个推荐系统对于这个用户的点击比例;
- 用户的购买数量 / 共推荐给用户的商品数量 = 这个推荐系统对于这个用户的购买比例;
- 有浏览时间从大到小排序 = 用户比较感兴趣的推荐商品(估算,因为不能确定用户是浏览哪个商品所逗留的时间);
- 通过用户对于此次推荐商品的打分 = 获取用户感兴趣的商品(较为精确,因为用户针对每个商品打分);
- 通过判断用户是否切换的记录 = 来判断用户是否不满意此次推荐的商品(估算,因为用户可能不喜欢这次推荐的商品,但也没有点击换一批按钮)。
- 统计所有用户点击商品的次数 / 总共推荐的商品次数 = 整个推荐系统的点击比例;
- 统计所有用户购买商品的次数 / 总共推荐的商品次数 = 整个推荐系统的购买比例;
- 统计浏览时间大于10秒(判断停留10秒为感兴趣)的推荐次数 / 总共推荐的次数 = 整个推荐系统的满意比例(估算)。
问:为什么需要用户ID字段?
答:因为这样可以记录每个用户对推荐系统的行为,可以将这些统计精确到每个用户中,这样可以针对不满意的用户进行系统的调整用户推荐数据。
问:为什么需要用户点击推荐商品记录?
答:因为用户点击了,说明这个推荐也算是成功的,不购买的原因,可能是暂时不需要,或者这个商品的评论问题。
问:为什么需要记录用户浏览推荐商品的时间?
答:用户浏览的时间长了,证明是对于这个比较感兴趣的,也可以做为整个推荐系统效率的部分评分标准。
问:为什么需要打分记录?
答:因为这可以更直观的反馈用户对于这次推送的商品,哪些是满意的,哪些是不满意的,可以更精确的推送心仪的商品给客户。
总结
本文主要讲了如何计算当前推荐算法的效益的一些方法:
- 记录用户点击推荐商品行为;
- 记录用户购买推荐商品行为;
- 记录用户浏览推荐商品时间行为;
- 记录用户给推荐商品的打分;
- 记录用户点击“换一批”的行为。
结语
- 只有不断的对用户行为进行分析,不断的统计分析推荐算法的效益,才能搭建更好的推荐系统。
- 此篇文章只是小编的个人思路,仅供参考;
- 具体的收集数据、分析算法,需要结合自身的业务来出发;
- 如有更好的想法,或者发现小编的不足,欢迎大家评论留言给小编;
- 让我们一起学习,一起进步。