看到“内容推荐”几个字的时候,脑海里第一时间浮出的印象:猜你喜欢,购买这本书的用户还购买了...,浏览这件商品的用户还浏览了哪些商品等等诸如此类;“协同过滤推荐”刚好用于解决这样的问题——发现用户与产品的匹配度,将产品或服务准确的推荐给用户;
基于用户过滤
将“相似”的用户挖掘出来,并将用户已经购买过的产品推荐和他“相似”的 用户。例如:一个30岁的男性消费过一块手表,则可以对另一个与其相似的年龄大男性 推荐同样的手表。
基于产品过滤
过滤“相似”的商品,用户消费时,将他已经购买过的产品的“相似”产品 推荐给他。例如:你购买或搜索过《人人都是产品经理》,则会对你推荐《产品经理手册》、《结网》、《启示录》等相关的产品经理的书籍。
基于协同过滤
将用户对产品的的偏好数据进行建模,对喜好“相似”的用户进行过滤,也可以对属性“相似”的产品过滤,或者对未知的“用户-产品”进行喜好、相似度计算,这种过滤是“协同”的。例如:如果用户对购买过多款产品或观看了多篇文章,可以基于模型对那些他未购买过的商品或未阅读的文章估计他的喜好度,进而用于产品推荐;
收集用户偏好
对某商品的用户对于某商品的购买、评分、对某文章转发 、点击量、页面停留的时间等可以反映用户偏好。购买、评分、投票、 转发等,可以比较精确地得到用户对于商品的偏好信息,而点击量、页面停留则含有噪声,需要对这类数据事先进行处理,而对于用户评论,则需要进行文本分析从得知用户的情感倾向,从而可以一定程度地反应用户的偏好程度;
评分矩阵
在得到每个用户的偏好后,就可以进一步分析用户之间的相似情况;为了便于理解,我们将用户对平台内所有商品的喜好度设为0,然后将用户购买过的商品与其的喜好度设为1;
其中,列表示某用户,行表示商品,单元格内的分数代表用户对商品的偏好。现在用户yang对6种商品偏好为0、1、1、0、1、1,需要找出与该用户最相似的前三个用户
相似度计算
杰卡德(Jaccard)相似度用于衡量两个集合的相似情况,即两个集合的交集元素的个 数除以并集元素的个数。
其中A、B代表两个集合。
我们用易于理解对杰卡德(Jaccard)相似度公式计算相似度哈;
基于用户对协同过滤
沿用之前的数据,对于新用户yang,其对6个商品的购买情况为1、1、0、0、0、1,通过Jaccard相似度计算yang于其他用户对相似度,从大到小排序;
取前三个用户为邻近用户,即用户sun、用户zhao、用户Li。此时以每个邻近用户的相似度为权重,与相应物品的喜好度进行相乘,计算出商品推荐打分。例如,对于yang未购买过而其他用户购买过的商品C,其商品推荐打分计算为?
前三个临近用户中:sun和zhao对商品c对喜好度为1,li对商品c的喜好度为0;
因此用户yang的商品C推荐得分 = 1 * 0.67 + 1 * 0.5 + 0 * 0.5 = 1.17;
用户yang的商品D推荐得分 = 1 * 0.67 + 0 * 0.5 + 0 * 0.5 = 0.67
用户yang的商品E推荐得分 = 1 * 0.67 + 1 * 0.5 + 0 * 0.5 = 1.17
基于商品协同过滤
依然通过Jaccard公式计算商品与商品间的相似度,即两个集合的交集元素的个 数除以并集元素的个数。
例如 计算商品A与商品B对相似度,交集数量为3个,并集为9,因此相似度为3/9 = 0.33
以此类推
刚刚提到的用户yang对6种商品偏好为0、1、1、0、1、1,需要找出与该用户最相似的前三个用户
基于商品的协同过滤会以商品的相似度为权重,在本例中以用户yang的商品喜好度为基础 ,计算商品推荐打分,例如用户yang未购买的商品C,其计算公式应为:
0 * 0.56 + 1 * 0.56 + 1 * 1 + 0 * 0.33 + 1 * 0.33 + 1 * 0.44 = 2.33;
商品D = 0.99
商品E = 1.99
因此,基于商品的协同过滤会依次向用户yang推荐商品C、商品E和商品D。
网友评论