简介:这篇论文介绍了在时间动态性下的协同过滤算法。考虑一个顾客买商品的例子,随着顾客不断选择新的商品,顾客的行为模型会发生持续不断的改变。为了应对这种改变,通常的做法是使用时间窗口(一段时间内认为不变)或者不断衰减(越旧的信息权重越小)方法,但是这些方法都丢失了大量的数据实例,准确性很差,而这篇文章在协同过滤的基础上做了改进,提出了基于协同过滤的时间动态性算法。
下面是本文的一些要点:
-
建立时间动态性模型的一些难点
-需要考虑到新产品和服务的出现,这些改变会影响顾客的行为,比如过节期间行为会发生改变
-在单个用户层次上去判断时间的改变可用的数据较少,比如一个用户一个月才买一次东西;故需要从全局角度考虑时间的改变,一个网站上面所有用户在某个时间段内的购买情况
-原有的推荐系统对于用户行为没有一个时间动态性的变化模型,但是获取用户行为的时间变化性对于提高推荐的准确性有很大帮助
-
一些前提假设
m个用户,n个物品
用户用u,v这些字母表示,物品用i,j这些字母表示
t代表时间
评价rui(t)表示用户u在第t日对物品i的评价,r^ui(t)代表对于rui(t)的预测值
RMSE:
-
三种方法
-instanceselection:抛弃那些对于系统当前状态无关的实例
-instanceweighting:依据实例间的相关性设定他们的权重
-ensemblelearning:根据之前的数据预测当前的结果,越接近当前的数据权重越大
但是以上三种方法仍然存在一些问题,我们想要做到的是下面几条:
-我们的模型不仅仅针对用户当前的行为,而是针对用户整个时间周期
-需要考虑多个改变因素,一些是基于用户的,一些是基于物品的
-需要建立一个单一框架,在更高层次上进行分析,而不是仅仅针对单个用户或物品
-我们并不需要预测未来较长一段时期的用户行为
4、协同过滤相关知识
根据协同过滤,每个用户对应一个向量pu,每个物品对应一个向量qi,预测值为这两个向量乘积。但是这种方法忽略了用户之间,物品之间,用户与物品之间的关系,改进的方法是加入基准评价值,bui=mu+bu+bi,mu是所有评价的均值,bu为用户偏差,bi为物品偏差,预测值如下:
5、考虑时间变化的协同过滤(baselinepredictor)
考虑两个变化性的因素:每个物品的受欢迎程度会随着时间变化而改变;用户也会改变他们的评价标准。也就意味着bui会随着时间变化:
bui(t)=mu+bu(t)+bi(t),
bui(t)表明第t天用户u对于物品i的基准评价
bu(t)和bi(t)是随着时间改变的具体函数值
在每个时间段内使用一个不同的值,但是对时间分割需要做一个权衡,分得过细该时间段内的数据点就会不够,分得太粗精确度降低。
-对于物品:bi(t)=bi+bi_Bin(t),Bin(t)为时间对应的函数
-对于用户:假设某个用户的评分均值为tu,变化率dev_u(t)=sign(t-tu)|t-tu|^beita,|t-tu|表示时间距离,bu(t)=bu+alpha_u*dev_u(t)
另一种方法是使用样条函数,假设用户有ku次评分,{t1...t_ku},bu(t)可以写成:
为了更加准确,再添加一个参数用来表示用户每天的变化情况:
bu(t)=bu+alpha_u*dev_u(t)+bu,t
于是bui(t)=mu+bu+alpha_u*dev_u(t)+bu,t+bi+bi_Bin(t)
目标函数如下:
如果再考虑一段时期内的变化,加入新的参数:
bi(t)=bi+bi_Bin(t)+bi_period(t)
bu(t)=bu+alpha_u*dev_u(t)+bu,t+bu_period(t)
如果不同的用户有不同评价度:
bui(t)=mu+bu+alpha_u*dev_u(t)+bu,t+(bi+bi_Bin(t))*cu(t)
cu(t)是一个和时间相关的度量向量。
6、考虑时间变化的协同过滤(factormodel)
因为用户的喜好会随着时间变化,需要在用户偏好中考虑时间因素
pu,k(t)=pu,k+alpha_u,k*dev_u(t)+pu,k,tk
7、相邻模型的时间动态性
相邻模型不同于上面介绍的矩阵分解模型,不考虑时间动态性的模型如下:
wij,cij衡量的是物品i和物品j的相关性,知道物品j的评分信息去预测物品i的评分。考虑时间后:
目标函数如下: