2.1 用户行为数据简介
用户行为在个性化推荐系统种一般分为两种,显性反馈和隐形反馈。显示反馈包含明确的用户喜好行为,如点赞和讨厌等。隐形反馈是不明确的,如用户浏览记录等。
2.2 用户行为分析
2.2.1 用户活跃度与商品流行度——长尾分布
大部分用户只关注到热门物品,非热门物品无人问津。且用户越活跃越关心冷门物品。
仅仅根据用户行为数据设计的推荐算法一般称为协同过滤算法。可以分为基于邻域的方法,隐语义方法,基于图的随机游走算法等。
2.3 实验设计和算法测评
评价指标
- 准确率与召回率
R ( u ) R(u) R(u)表示对用户u推荐的N个物品。而 T ( u ) T(u) T(u)表示u确实喜欢的物品。
准确率(precision)反映了,预测的东西中真实被喜欢的占的比例。
召回率(recall)反映了,喜欢的东西被准确预测的比例。
- 覆盖率——反应算法挖掘长尾问题的能力
- 新颖度——平均流行度进行度量
某个物品被cue到的频率为流行度,一般会取对数,保证流行度的平均值更加稳定。
基于邻域的算法
基于用户的协同过滤
基本思想是,当用户A需要个性化推荐时,可以找到与该用户兴趣接近的用户,然后把那些用户喜欢的但是A用户没有听说过的物品推荐给A。
主要包括两个步骤,1.找到相似兴趣的用户,2.找到这个集合的用户喜欢的,且目标用户没有听说过的物品推荐给目标用户。
兴趣相似度的度量一般采用余弦相似度。
在具体的代码实现上,一般采用首先建立物品倒排表的方法。假设用户u和用户v都同属于倒排表中K个物品对应的用户列表,有C[u][v] = K
。最终计算处用户的兴趣相似性矩阵W
。
def UserSimilarity(train, K, N):
'''
:params: train, 训练数据集
:params: K, 超参数,设置取TopK相似用户数目
:params: N, 超参数,设置取TopN推荐物品数目
:return: GetRecommendation, 推荐接口函数
'''
# 计算item->user的倒排索引
item_users = {
}
for user, items in train.items():
for i in items.keys():
if i not in item_users:
item_users[i] = set()
item_users[i].add(user)
# 计算用户间的互动次数
sim = {
}
num = {
}
W = {
}
for i, users in item_users.items