基于用户行为分析的推荐算法是个性化推荐系统的重要算法,一般称为协同过滤算法。
很多互联网业务会把多种原始日志按照用户行为汇总成会话日志,其中每个会话表示一次用户行为和对应的服务 会话日志通常存储在分布式数据仓库中,如支持离线分析的Hadoop Hive和支持在线分析的Google Dremel 互联网很多数据都遵循长尾分布:即热门的物品往往只占物品总和的很小部分,推荐系统的作用不在于推荐热门产品,而是更多的推荐长尾部分,让更多的产品被推荐出来。 用户活跃度和物品流行度的关系:一般新用户倾向于浏览热门的物品,因为他们对网站还不熟悉,而老用户会逐渐开始浏览冷门的物品,也就是说,用户越活跃,越倾向浏览冷门的物品。 业界运用最广泛的算法是 基于领域的算法,此算法包含两个算法, 基于用户的协同过滤算法:这种算法给用户推荐和他兴趣相似的其他用户喜欢的物品。 基于物品的协同过滤算法:这种算法给用户推荐和他之前喜欢的物品相似的物品。 基于用户的协同过滤算法包括两个步骤 1,找到和目标用户兴趣相似的用户集合 2,找到这个集合中的用户喜欢的,且目标用户没有听说过的物品推荐给目标用户 协同过滤利用用户行为计算相似度,假如N(u1)和N(u2)分别表示用户u1,u2有兴趣(喜欢) 的物品集合,那么u1,u2的相似度f(u1,u2)=(N(u1) & N(u2))/sqrt(N(u1) * N(u2)) 为了计算方便,可以在库中建立物品到用户的倒排表,即存储每个物品有哪些些用户产生过行为。 通过相似度计算,找出了用户u的前k个最相似用户,那么用户u对i的兴趣度=与这k个用户相似度*每个用户对i的兴趣(偏好评分,单一行为可以全设为1,另外这k个用户应该与对物品i有过行为的用户做个交集)之和。 用户相似度有改进的空间,一般来说,两个用户对冷门物品采取过同样的行为更能说明他们兴趣的相似度。 可以采用如下公式计算相似度 f(u1,u2)=(i ∈ N(u1) & N(u2) )*(1/log1+N(i)) /sqrt(N(u1) * N(u2))此公式通过 (1/log1+N(i))惩罚了用户u1,u2共同兴趣列表中热门物品对他们相似度的影响 基于物品的协同过滤算法 这个算法目前是应用最多的。该算法认为,物品A和物品B具有很大的相似度是因为喜欢物品A的用户大都也喜欢物品B。 基于物品的协同过滤算法包括两个步骤 1,计算物品之间的相似度 2,根据物品的相似度和用户的历史行为给用户生成推荐列表。 计算物品相似度和用户行为相似度差不多,假如N(i)表示喜欢物品i的用户数,N(j)表示喜欢物品j的用户数,那么i和j的相似度f(i,j)=(N(i) & N(j))/sqrt(N(i) || N(j)) 计算itemcf也可以首先建立用户-物品倒排表,即对每个用户建立一个包含他喜欢的物品的列表,然后对于每个用户,将他物品列表中的物品两两在共现矩阵这种加1. 通过相似度计算,找出了物品i的前k个最相似物品,那么用户u对i的兴趣度=与这k个物品相似度*用户对这k个物品的评分(没有对这个用户的行为则为0分,当然一般这种数据应该先用这k个物品与用户的历史列表做个交集,排除无行为的数据)之和 基于ItemCf计算用户u对一个物品j的兴趣的描述:和用户历史兴趣感兴趣的物品越相似的物品,越有可能在用户的推荐列表中获得比较高的排名(兴趣度) 和用户相似度一样,物品相似度也有改进的空间,一般来说,不活跃的用户对于物品相似度的贡献应该大鱼活跃用户。 可以采用如下公式计算物品相似度 f(i,j)=(u ∈ N(i) & N(j) )*(1/log1+N(u)) /sqrt(N(i) || N(j))此公式通过 (1/log1+N(u))惩罚了过于活跃的用户 物品相似度的归一化:可以消除同类物品之间相似度过大造成推荐列表倾向于某类物品。 隐语义模型(LFM) 它的核心思想是通过隐含特征联系用户兴趣和物品 基于图的模型 即计算交叉两点(两点分别为用户和物品)的相关性。用户和物品的相关性高,那么物品在这个用户的推荐列表靠前。算法和PageRank类似,即不停的迭代计算pr值,直到这个值收敛到预先设定好的阀值。pagerank算法的java实现版本可以参考 http://duyunfei.iteye.com/blog/1532798 |