背景
目前,已经验证了离线推荐模块,该模块基于历史数据提取特征并聚合相似度计算、基于用户的协同过滤、ALS等算法模型,为用户预先筛选并召回了大量可能感兴趣的items。
然而,随着用户行为的日益多样化和实时性的增强,仅仅依赖离线推荐已难以满足用户对即时性和个性化的更高需求。因此,需要一个实时推荐模块,以实现对用户兴趣变化的即时捕捉和响应。这个模块将紧密集成到现有的推荐系统中,通过实时分析用户对items的评分、点击、浏览等互动行为,动态调整推荐策略。
需求
当用户对某个item进行评分后,系统会立即评估该评分对用户整体兴趣偏好的影响,并据此执行以下操作:
- 精准删除:对于用户已明确表达不感兴趣(如低分评价)或已充分探索(如高分但多次查看)的items,系统将从召回数据仓中精准删除这些items的推荐数据,避免用户再次看到不感兴趣的内容,从而提升推荐列表的相关性和新鲜感。
- 智能添加:基于用户的实时评分和互动行为,系统将预测用户可能感兴趣的新items,并将这些items的数据添加到推荐列表中。这。
实现
步骤 1: 设计实时推荐逻辑
- 基于用户的最新评分,更新推荐模型。
- 使用协同过滤、基于内容相似度的推荐等算法。
- 定义评分阈值
点赞、收藏和转发都是布尔值(即0或1),这些行为本身就具有很强的指示意义
权重设置
点赞:0.2
转发:0.3
收藏:0.4
播放完整度:0.1
def calculate_rating(likes, forwards, favorites, completion_rate):
# 定义权重
weight_likes = 0.2
weight_forwards = 0.3
weight_favorites = 0.4
weight_completion = 0.1
# 计算综合评分
score = (
likes * weight_likes +
forwards * weight_forwards +
favorites * weight_favorites +
completion_rate * weight_completion
)
# 返回0-10之间的评分,保留两位小数
return round(score * 10, 2)
# 示例数据
likes = 0
forwards = 0
favorites =1
completion_rate = 0.01
# 计算评分
rating = calculate_rating(likes, forwards, favorites, completion_rate)
print(f"综合评分为: {rating}")
步骤 2: 更新推荐数据
- 删除不再推荐的项:
当用户对某个项给出较低评分时,从推荐列表中移除该项。 - 添加新的推荐项:
根据最新的评分数据,重新计算推荐列表。
将新的推荐项添加到推荐列表中
上述逻辑定时重复进行
示例代码
class RecommendationSystem:
def __init__(self, user_ratings, recommended_items):
self.user_ratings = user_ratings
self.recommended_items = recommended_items
#更新推荐数据(依据近期日志中的用户行为数据 new_rating)
def update_recommendations(self, new_rating):
item_id = new_rating['item_id']
rating = new_rating['rating']
if rating < 2: # 涉资 2及以上的评分为积极反馈
self.remove_item(item_id)
else:
self.add_item(item_id)
def remove_item(self, item_id):
if item_id in self.recommended_items:
self.recommended_items.remove(item_id)
print(f"Item {item_id} removed from recommendations.")
def add_item(self, item_id):
# 这里可以增加其他的逻辑来决定是否添加新项
if item_id not in self.recommended_items:
self.recommended_items.append(item_id)
print(f"Item {item_id} added to recommendations.")
# 示例使用
user_ratings = {
1: {101: 5, 102: 3},
2: {201: 4, 202: 2}
}
recommended_items = {
1: [101, 103],
2: [201, 203]
}
# 创建推荐系统实例
rs = RecommendationSystem(user_ratings, recommended_items)
# 更新推荐
new_rating = {'user_id': 1, 'item_id': 102, 'rating': 3}
rs.update_recommendations(new_rating)
new_rating = {'user_id': 1, 'item_id': 104, 'rating': 5}
rs.update_recommendations(new_rating)