个性化推荐系统-实时召回模型

文章目录

背景

目前,已经验证了离线推荐模块,该模块基于历史数据提取特征并聚合相似度计算、基于用户的协同过滤、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)
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值