产品经理必知的推荐算法二三事( 二 )


二、协同过滤
协同过滤主要是通过计算人、物之间的相似性来进行推荐 , 主要包含人与人、物与物和人与物之间的相似性 。
常见的协同过滤算法主要有基于人的协同过滤、基于物品的协同过滤和基于模型的协同过滤 。
1. 基于人的协同过滤
顾名思义就是通过计算人与人的相似度来进行物品推荐 。
比如小A喜欢物品A、物品B , 小B喜欢物品C、物品D和物品E;而小A和小B之间是有一定相似度的 , 所以就给小A推荐小B喜欢的物品C , 可参考下面的示意图 。
产品经理必知的推荐算法二三事
本文插图
基于人的协同过滤
这里面有两个关键问题:

  • 要找到和小A兴趣相似的用户集;
  • 要找到这个集合中的用户喜欢且小A没有听说过的东西 。
具体实现的步骤是:
  • 首先找到和小A相似的用户;
  • 然后找出相似用户喜欢的物品 , 并且预测小A对这些物品的评分;
  • 之后过滤掉小A已经消费过的物品;
  • 最后将剩余的物品按照评分进行排序 , 并返回TopN 。
基于人的协同过滤的优点是能帮助用户发现一些比较新鲜且可能会感兴趣的东西 , 缺点是随着用户数量的增加 , 计算用户之间兴趣相似度的复杂度会急剧增加 , 而且对于新物品或者新用户的推荐效果可能都不太好 。
2. 基于物品的协同过滤
顾名思义就是基于物品之间的相似度进行推荐 。 比如小A喜欢物品A和物品B , 物品A和物品C之间有着一定的相似度 , 那就可以给小A推荐物品C , 可参考下面的示意图:
产品经理必知的推荐算法二三事
本文插图
基于物品的协同过滤
这里面的关键问题也是两个:
  • 要计算物品之间的相似度;
  • 要基于物品的相似度和用户的历史行为 , 给用户生成推荐列表 。
具体实现方式是:
  • 分析用户的行为记录 , 计算物品之间的相似度;
  • 基于物品相似度和用户的历史行为生成推荐列表 , 和用户历史上感兴趣的物品越相似的其他物品排序会越靠前;
  • 最后是基于相似度矩阵的最大值进行归一化 , 提升推荐的准确率 。
需注意的是这里的相似度不是物品与物品之间的直接相似度 , 而是它们共同出现在多少用户的兴趣列表中 。
比如喜欢物品A的用户中 , 有多少用户喜欢物品B , 两者之间的重复度越高 , 物品A和物品B的相似度越高 。
基于人的协同过滤更多反应的是物品在小圈子里的欢迎程度 , 而基于物品的协同过滤则考虑了用户的历史行为 , 相对更个性化一些;但是在物品数量较多的时候 , 也会面临物品之间相似度计算起来很复杂的问题 。
3. 基于模型的协同过滤
顾名思义就是基于一个模型来进行推荐 , 这里面用到的技术就比较多涉及到机器学习领域 , 比如关联规则挖掘、聚类、SVD、RBM、图模型等…(反正我也听不懂) 。
按照个人的理解就是基于用户和物品之间的感兴趣程度 , 训练出来一个黑盒模型 , 基于输入和输出的东西进行不断的优化迭代 。
以0-1进行评估 , 1代表着用户肯定会感兴趣 , 0代表着用户肯定不感兴趣;这个模型就是计算用户的感兴趣程度 , 然后优先给用户推荐感兴趣程度较高的东西 , 最后再结合着用户的反馈来不断优化这个模型 。
整体流程就是:
  • 准备训练数据集和测试数据集;
  • 不断的训练模型;
  • 对模型进行评估;
  • 推荐给用户;
  • 优化迭代 。
三、基于内容的推荐
基于内容的推荐就是基于内容的推荐,主要是基于内容之间的相似程度 。