1. 基准预测
CF模型试图捕捉用户和物品之间的交互作用,正是这些交互作用产生了不同的评分值。然而大部分观察到的评分值要么与用户相关,要么与物品相关,而与用户和物品之间的交互作用无关。比如典型的CF数据显示了用户和物品中存在的偏置,也就是说,数据中某些用户评分比其他用户高和某些物品得到的评分比其他物品高的明显倾向。
我们将这些与用户—物品交互作用无关的因子(这些因子也叫偏置)封装到基准预测中。由于这些基准预测值在观察到的评分中占很大的比例,所以对它们进行准确的建模就显得至关重要,这样的建模方法把真正代表用户—物品之间的交互作用的那部分数据隔离开来,而把这部分数据放到更合适的用户偏好模型中。
设
μ
\mu
μ为总体平均评分,未知评分
r
u
i
r_{ui}
rui的基准预测
b
u
i
b_{ui}
bui综合考虑了用户和物品两个因子:
b
u
i
=
μ
+
b
u
+
b
i
b_{ui}=\mu+b_u+ b_i
bui=μ+bu+bi
参数
b
u
b_u
bu和
b
i
b_i
bi分别表示用户u和物品i的与评分平均值的偏差。
举例说明
假设我们要建立用户Joe对Titanic电影的评分的基准预测。假设所有电影的平均评分
μ
\mu
μ为3.7星。另外,Titanic比一般电影要好,因此其评分要比平均评分高0.5星。另外,Joe是一个爱挑剔的用户,他的评分一般要比平均评分低0.3星。因此,Joe对Titanic评分的基准预测为3.7-0.3+0.5=3.9。我们可以通过最小二乘法问题来估计
b
u
b_u
bu和
b
i
b_i
bi的值,如下面公式所示:
min
b
∗
∑
(
u
,
i
)
∈
K
(
r
u
i
−
μ
−
b
i
−
b
u
)
2
+
λ
1
(
∑
u
b
u
2
+
∑
i
b
i
2
)
\min\limits_{b_*}\sum_{\mathclap{(u,i)\in\Kappa}}(r_{ui}-\mu-b_i-b_u)^2+\lambda_1(\sum_{\mathclap{u}}b_u^2+\sum_{\mathclap{i}}b_i^2)
b∗min(u,i)∈K∑(rui−μ−bi−bu)2+λ1(u∑bu2+i∑bi2)在这个公式中,第一项
∑
(
u
,
i
)
∈
K
(
r
u
i
−
μ
−
b
i
−
b
u
)
2
\sum_{\mathclap{(u,i)\in\Kappa}}(r_{ui}-\mu-b_i-b_u)^2
(u,i)∈K∑(rui−μ−bi−bu)2用来寻找与已知平分数据拟合的最好的
b
u
b_u
bu和
b
i
b_i
bi。正则化项
λ
1
(
∑
u
b
u
2
+
∑
i
b
i
2
)
\lambda_1(\sum_{\mathclap{u}}b_u^2+\sum_{\mathclap{i}}b_i^2)
λ1(u∑bu2+i∑bi2)通过对参数的复杂性增加惩罚因子来避免过拟合现象。
2. 随时间变化的基准预测
基准预测的时序性变化主要体现在两个时间效应上面。第一个时间效应体现在物品的流行度或许随时间变化。例如,在一部新电影里某位演员的出现就会导致该电影的流行或过时。我们的模型中把物品偏置
b
i
b_i
bi看作时间的函数就能说明这一点。第二个时间效应体现在随着时间变化,用户或许会改变他们的基准评分。例如,一个过去倾向于对电影评分平均为4星的用户可能现在给出的平均评分为3星。这可能是由于用户评分标准的自然变化,也可能是用户对某件物品的评分与跟最近他对其他物品的评分有关联,也可能是一个家庭里的评分人会改变,也就是说并不都是由同一个人来评分的。因此在我们的模型中,把用户偏置
b
u
b_u
bu也看作时间的函数。对一个时间敏感的基准预测来说,在
t
u
i
t_{ui}
tui天,用户u对物品i的评分可用下面公式来计算:
b
u
i
=
μ
+
b
u
(
t
u
i
)
+
b
i
(
t
u
i
)
b_{ui}=\mu+b_u(t_{ui})+b_i(t_{ui})
bui=μ+bu(tui)+bi(tui)式中
b
u
(
∙
)
b_u(\bullet)
bu(∙)和
b
i
(
∙
)
b_i(\bullet)
bi(∙)是随时间变化的实数函数。构造这些函数的最好方法必须要考虑如何参数化涉及的时序变化性。
周期性变化的时间效应和相对瞬息万变的时间效应是有很大区别的。在电影评分案例中,一方面,我们不希望用户对电影的偏好程度每天都上下波动,而是在较长的一段时间后才发生变化。另一方面,我们注意到用户的影响每天都会变,这也反映了消费者行为不是持续不变的本质特性。对用户偏置的建模需要一个较细的时间粒度,而对物品相关的偏置建模时选择一个相对较粗的时间粒度就可以。
首先确定如何选择随时间变化的物品偏置
b
i
(
t
)
b_i(t)
bi(t),我们发现完全可以把物品偏置分割为不同的时间段计算,而每个时间短都用一个常数表示物品偏置。把时间轴划分到不同的时间段时,既希望时间粒度较细(时间段较短),又需要每个时间段包含足够的评分记录(时间段较长),这就需要权衡。对电影评分数据来说,在相同准确度条件下,可选择的时间段大小的范围非常宽泛。在具体的实现中,每一个时间段对应大约连续十周的评分数据,需要30个时间段来跨度数据集中的所有天数,天数t关联着一个整数Bin(t),(在数据集中,取值为1~30),于是电影偏置就被分为一个固定部分和一个随时间变化的部分。
b
i
(
t
)
=
b
i
+
b
i
,
B
i
n
(
t
)
b_i(t)=b_i+b_{i,Bin(t)}
bi(t)=bi+bi,Bin(t)尽管把参数分时间段取值在物品偏置上很好,但是很难推广到用户偏置的计算上。一方面,我们希望对用户采用精细的时间粒度,用以发现非常短时间的时间效应。另一方面,我们又不能期望每个用户都会有足够的评分数据,用以对独立的时间段做出可靠的估计。我们可以考虑用不同的函数形式来参数化随时间变化的用户行为,当然每个函数形式的复杂度和准确度都不同。
一个简单的建模选择是使用一个线性函数来模拟用户偏置可能的渐变过程。对每个用户u,定义该用户评分日期的均值为
t
u
t_u
tu。现在,若用户u在t天的时候评价了一部电影,则与该评分相关的时间偏置定义为
d
e
v
u
(
t
)
=
s
i
g
n
(
t
−
t
u
)
⋅
∣
t
−
t
u
∣
β
dev_u(t)=sign(t-t_u)\cdot|t-t_u|^\beta
devu(t)=sign(t−tu)⋅∣t−tu∣β该式中
∣
t
−
t
u
∣
|t-t_u|
∣t−tu∣是日期
t
t
t和
t
u
t_u
tu间隔的天数。我们通过交叉验证来设置
β
\beta
β的值,在netflix数据集中采取
β
\beta
β=0.4。我们为每个用户引入一个单独的新参数
α
u
\alpha_u
αu,这样便得到了第一个与时间相关的用户偏置:
b
u
(
1
)
(
t
)
=
b
u
+
α
u
⋅
d
e
v
u
(
t
)
b_u^{(1)}(t)=b_u+\alpha_u\cdot dev_u(t)
bu(1)(t)=bu+αu⋅devu(t)这个用来近似随时间变化的用户行为的简单线性模型需要为每一个用户u学习两个参数:
β
u
\beta_u
βu和
α
u
\alpha_u
αu。
这些平滑函数非常适合模拟逐渐观念转变的时间效应情形。然而,在很多应用中,有很多在某一天或某段时间会发生瞬间变化的突变情形。例如,在电影评分数据集中,我们发现在某一天某个用户给出的众多评分值往往集中在一个单一的值。这样的结果跨度只在某一天之内。这个结果或许反映了用户当天的心情,或许是受到每一个用户评分的影响,或者是用户评分标准的真实变化。为了处理这样短时间内存在的影响,我们为每个用户和每一天指定了一个参数用以反映特定天的变化。这个参数记为
b
u
,
t
b_{u,t}
bu,t。
在Netflix电影评分数据中,一个用户平均在40个不同的日期对电影评分。因此,获得参数
b
u
,
t
b_{u,t}
bu,t时,平均需要40个参数来描述每个用户偏置。由于
b
u
,
t
b_{u,t}
bu,t缺失了所有跨度超过一天的信息,所以把任务
b
u
,
t
b_{u,t}
bu,t作为单独的一个变量并不能充分地处理用户偏置。因此,把它作为前面描述过的模式中的一个附加部分。于是,时间线性模型变成:
b
u
(
3
)
(
t
)
=
b
u
+
α
u
⋅
d
e
v
u
(
t
)
+
b
u
,
t
b_u^{(3)}(t)=b_u+\alpha_u\cdot dev_u(t)+b_{u,t}
bu(3)(t)=bu+αu⋅devu(t)+bu,t这样得到下面的基准预测器:
b
u
i
=
μ
+
b
u
+
α
u
⋅
d
e
v
u
(
t
u
i
)
+
b
u
,
t
u
i
+
b
i
+
b
i
,
B
i
n
(
t
u
i
)
b_{ui}=\mu+b_u+\alpha_u\cdot dev_u(t_{ui})+b_{u,t_{ui}}+b_i+b_{i,Bin(t_{ui})}
bui=μ+bu+αu⋅devu(tui)+bu,tui+bi+bi,Bin(tui)另一种基准预测器范围内的时间效应是与用户评分标准的变化相关的。尽管
b
i
(
t
)
b_i(t)
bi(t)是一个与用户无关、在t时刻关于物品i价值的度量,用户却倾向于对这样的一个度量做出不同的回应。例如,不同的用户有不同的评分标准,并且同一个用户的评分标准也会随着时间改变。于是,电影偏置的原始数值就不是完全与用户无关的了。为了解决这个问题,我们为基准预测器增加了一个与时间相关的扩展特征,记为
c
u
(
t
)
c_u(t)
cu(t)。因此,基准预测器变成:
b
u
i
=
μ
+
b
u
+
α
u
⋅
d
e
v
u
(
t
u
i
)
+
b
u
,
t
u
i
+
(
b
i
+
b
i
,
B
i
n
(
t
u
i
)
)
⋅
c
u
(
t
u
i
)
b_{ui}=\mu+b_u+\alpha_u\cdot dev_u(t_{ui})+b_{u,t_{ui}}+(b_i+b_{i,Bin(t_{ui})})\cdot c_u(t_{ui})
bui=μ+bu+αu⋅devu(tui)+bu,tui+(bi+bi,Bin(tui))⋅cu(tui)其中
c
u
(
t
)
=
c
u
+
c
u
,
t
c_u(t)=c_u+c_{u,t}
cu(t)=cu+cu,t,
c
u
c_u
cu是
c
u
(
t
)
c_u(t)
cu(t)的稳定部分,而
c
u
,
t
c_{u,t}
cu,t代表了特定天的变化。为了学习涉及到的参数
b
u
,
α
u
,
b
u
t
,
b
i
,
b
i
,
B
i
n
(
t
)
,
c
u
,
c
u
,
t
b_u,\alpha_u,b_{ut},b_i,b_{i,Bin(t)},c_u,c_{u,t}
bu,αu,but,bi,bi,Bin(t),cu,cu,t,我们对每种学习参数使用单独的学习率(步长)和正则化项(权重衰减),这等价于解决下面的最小化问题:
min
b
∗
,
c
∗
,
α
∗
∑
(
u
,
i
)
∈
K
(
r
u
i
−
μ
−
b
u
−
α
u
⋅
d
e
v
u
(
t
u
i
)
−
b
u
,
t
u
i
−
b
i
+
b
i
,
B
i
n
(
t
u
i
)
⋅
(
c
u
+
c
u
,
t
u
i
)
)
2
\min\limits_{{b_*},{c_*},{\alpha_*}}\sum_{\mathclap{(u,i)\in\Kappa}}(r_{ui}-\mu-b_u-\alpha_u\cdot dev_u(t_{ui}) -b_{u,t_{ui}}-b_i+b_{i,Bin(t_{ui})}\cdot (c_u+c_{u,t_{ui}}))^2
b∗,c∗,α∗min(u,i)∈K∑(rui−μ−bu−αu⋅devu(tui)−bu,tui−bi+bi,Bin(tui)⋅(cu+cu,tui))2
+
λ
a
b
u
2
+
λ
b
α
u
2
+
λ
c
b
u
,
t
u
i
2
+
λ
d
b
i
2
+
λ
e
b
i
,
B
i
n
(
t
u
i
)
2
+
λ
f
(
c
u
−
1
)
2
+
λ
g
c
u
,
t
u
i
2
+\lambda_a b_u^2+\lambda_b \alpha_u^2+\lambda_c b_{u,t_{ui}}^2+\lambda_d b_i^2+\lambda_e b_{i,Bin(t_{ui})}^2+\lambda_f (c_u-1)^2+\lambda_g c_{u,t_{ui}}^2
+λabu2+λbαu2+λcbu,tui2+λdbi2+λebi,Bin(tui)2+λf(cu−1)2+λgcu,tui2
注意
正则化将参数缩小为零,但有一个例外。乘数
c
u
c_u
cu收缩为1,即我们惩罚
(
c
u
−
1
)
2
(c_u-1)^2
(cu−1)2,而不是
c
u
2
c_u^2
cu2。类似地,除
c
u
c_u
cu被初始化为1外,所有学习的参数都被初始化为零。
在这里,需要知道的是,无论准确度如何,基准预测因子都无法产生个性化的建议,因为它忽略了用户和项目之间的所有交互。
参考文献
[1]:The BellKor Solution to the Netflix Grand Prize