在Mahout中,我正在设置一个GenericUserBasedRecommender,目前设置相当简单,采用的是典型配置。
在为一个项目生成“偏好”值时,我们有以下5个数据点:
积极兴趣
- 用户对项目进行了转换(表示兴趣的最高信号)
- 普通喜欢(用户表达了兴趣,例如点赞按钮)
- 间接表达兴趣(点击、光标移动、测量“眼球”)
消极兴趣
- 漠不关心(用户在其他项目上活跃时忽略的项目,模糊地表达了不感兴趣)
- 主动不喜欢(点踩、从我的视图中移除项目等)
我应该在什么范围内表达这些不同的属性,我们用1到100的范围来讨论?
- 我应该将‘主动不喜欢’和‘漠不关心’保持在接近的位置,例如分别在1和5,而所有的喜欢聚集在90到100的范围内吗?
- ‘漠不关心’和‘间接表达兴趣’是否应该更靠近中间?例如,‘漠不关心’在20到35的范围内,‘间接喜欢’在60到70的范围内?
- ‘用户转换’是否应该打破这个范围,并且比其他值高出很多?例如,‘用户转换’@ 100,‘较小的喜欢’@ ~65,‘不喜欢’聚集在1到10的范围内?
- 在1到100的范围内,50是否有效地等于“无”,或相当于没有数据点?
我知道最终答案在于试错和我们数据的意义,但就算法而言,我试图理解在什么点上我需要在兴趣和不感兴趣之间倾斜天平,使算法正常运行。
回答:
实际范围并不重要,对于这个实现来说。1到100可以,0到1也可以,等等。这里真正重要的是相对值。
这些值是通过简单的(线性)加权平均来估计的。因此,响应应该是“线性”的。它应该符合一种直觉,即如果动作X的得分是动作Y的2倍,那么X在现实生活中应该表示两倍的兴趣。
一个不错的起点是简单地根据它们的频率来调整它们。如果点击到转换的比率是2%,你可以让一次点击值相当于转换的2%。
我会忽略你提出的“漠不关心”信号。它很可能太嘈杂而无法使用。