场景:
一个新妈妈给刚出生的宝宝买用品,随着宝宝的长大,不同的阶段需要不同的物品。
这个场景中涉及到考虑用户所处阶段,给用户推荐物品的问题。
如果使用用户协同过滤,则需要根据购买记录,找到与用户处于同一阶段的用户。
不加入分类信息,单纯使用物品信息,则可能因为买了不同牌子的尿布,而判断为非相似用户,
所以加入商品分类信息
算法步骤:
1. 加入分类信息
1)
根据时间将用户交易记录分成若干阶段(比如,近90天,近360天-近90天,...)
2)
对于中的记录(以中的为例),在向量的的分量(即物品所属的类别路径)上加上1
对于记录,得到向量
对其进行L2正规化(每个分量除以)
得到
3)
合并各阶段向量
2.
生成相似度矩阵
2.1
用户相似度矩阵
基于物品的相似度 为用户购买过的商品的集合
基于分类的相似度
用于控制两个相似度的权重
2.2
物品相似度
为购买过商品的用户的集合
2.3
类别相似度
IC(information
content)
为类别下的商品销量占所有销量的比例
LCS(least common
subsumer)
即为最近的共同祖先
3.
概率图模型求解
3.1
构建矩阵
为用户相似度矩阵,为物品相似度矩阵,
为类别相似度矩阵,
为用户和产品的关系(若用户购买过产品,则为1,否则为0)
为用户和类别的关系(若用户购买过该类别下产品,则为1,否则为0)
为产品和类别的关系(若产品属于该类别,则为1,否则为0)
graph Laplacian:
为对角矩阵,处为第行的和
3.2
Random walk with restart
迭代下面公式直到收敛:
为只有第个分量为1,其他分量都为0的向量,表示从第个用户处出发,初始
或者求解的逆矩阵,得到
4.
生成推荐
得到中最大的前k个分量
若为用户,则将其最近购买的物品加入推荐列表中
若为产品,则将产品加入推荐列表中
若为类别,则将该类别下销量最好的几个加入推荐列表中