「推荐系统实践」读书笔记
更新日期:
文章目录
1. 推荐系统是什么以及什么是好的推荐系统
2. 利用用户的行为数据来做推荐
- 用户行为的统一表示:
Name | Description |
---|---|
user id | 产生行为的用户的唯一标识 |
item id | 产生行为的对象的唯一标识 |
behavior type | 行为的种类(比如是购买还是浏览) |
context | 产生行为的上下文,包括时间和地点等 |
behavior weight | 行为的权重(如果是观看视频的行为,那么这个权重可以是观看时长;如果是打分行为, 这个权重可以是分数) |
behavior content | 行为的内容(如果是评论行为,那么就是评论的文本;如果是打标签的行为,就是标签) |
-
长尾分布
-
两种算法
- 基于用户的协同过滤算法 这种算法给用户推荐和他兴趣相似的其他用户喜欢的物品。
- 基于物品的协同过滤算法 这种算法给用户推荐和他之前喜欢的物品相似的物品。
- 对比
- | UserCF | ItemCF |
---|---|---|
性能 | 适用于用户较少的场合,如果用户很多,计算用户相似度矩阵代价很大 | 适用于物品数明显小于用户数的场合,如果物品很多(网页),计算物品相似度矩阵代价很大 |
领域 | 时效性较强,用户个性化兴趣不太明显的领域 | 长尾物品丰富,用户个性化需求强烈的领域 |
实时性 | 用户有新行为,不一定造成推荐结果的立即变化 | 用户有新行为,一定会导致推荐结果的实时变化 |
冷启动 | 在新用户对很少的物品产生行为后,不能立即对他进行个性化推荐,因为用户相似度表是每隔一段时间离线计算的新物品上线后一段时间,一旦有用户对物品产生行为,就可以将新物品推荐给和对它产生行为的用户兴趣相似的其他用户 | 新用户只要对一个物品产生行为,就可以给他推荐和该物品相关的其他物品 但没有办法在不离线更新物品相似度表的情况下将新物品推荐给用户 |
推荐理由 | 很难提供令用户信服的推荐解释 | 利用用户的历史行为给用户做推荐解释,可以令用户比较信服 |
根据AppCake的数据来看,目前用户的标识远大于APP的量,所以可以采用ItemCF
3. 冷启动
- 三类
- 用户冷启动
- 物品冷启动
- 系统冷启动
- 途径
- 利用用户注册信息
- 挑选合适的物品
- 利用物品的内容信息(描述物品的元数据)
4. 利用用户标签数据
打标签
5. 利用上下文信息
- 时间上下文
- 地点上下文
6. 利用社交网络数据
- 三类社交网络数据
- 双向确认的社交网络数据
- 单向关注的
- 基于社区的
7. 推荐系统实例
8. 评分预测问题
9. 后记
- 确定你真的需要推荐系统。推荐系统只有在用户遇到信息过载时才必要。如果你的网站物品不太多,或者用户兴趣都比较单一,那么也许并不需要推荐系统。所以不要纠结于推荐系统这个词,不要为了做推荐系统而做推荐系统,而是应该从用户的角度出发,设计出能够真正帮助用户发现内容的系统,无论这个系统算法是否复杂,只要能够真正帮助用户,就是一个好的系统。
可以说,现在的AppCake的用户远没有遇到信息过载,从用户的反馈来看,经常是用户找不到他们所要的APP,或者是APP文件已经损坏,或者是需要更新的版本。
- 确定商业目标和用户满意度之间的关系。对用户好的推荐系统不代表商业上有用的推荐系统,因此要首先确定用户满意的推荐系统和商业上需求的差距。一般来说,有些时候用户满意和商业需求并不吻合。但是一般情况下,用户满意度总是符合企业的长期利益,因此这一条的主要观点是要平衡企业的长期利益和短期利益之间的关系。
- 选择合适的开发人员。一般来说,如果是一家大公司,应该雇用自己的开发人员来专门进行推荐系统的开发。
- 忘记冷启动的问题。不断地创新,互联网上有任何你想要的数据。只要用户喜欢你的产品,他们就会不断贡献新的数据。
- 平衡数据和算法之间的关系。使用正确的用户数据对推荐系统至关重要。对用户行为数据的深刻理解是设计好推荐系统的必要条件,因此分析数据是设计系统中最重要的部分。数据分析决定了如何设计模型,而算法只是决定了最终如何优化模型。
- 找到相关的物品很容易,但是何时以何种方式将它们展现给用户是很困难的。不要为了推荐而推荐。
- 不要浪费时间计算相似兴趣的用户,可以直接利用社会网络数据。
- 需要不断地提升算法的扩展性。
- 选择合适的用户反馈方式。
- 设计合理的评测系统,时刻关注推荐系统各方面的性能。