一、召回阶段
- 特征工程:
- 用户特征:收集用户的基本信息,如年龄、性别、地域、职业等,进行编码处理;分析用户的历史行为数据,包括浏览记录、购买历史、收藏行为、搜索关键词等,提取行为特征,如浏览商品的类别偏好、购买频率、平均消费金额等。
- 物品特征:获取商品的属性信息,如商品类别、品牌、价格、颜色、尺寸等,对类别和品牌等进行独热编码;统计商品的销量、好评率、差评率、库存等销售特征。
- 上下文特征:考虑时间维度,如季节、节假日、一天中的时段等,将其转化为可用于计算的特征形式;提取用户访问的设备信息,如手机型号、操作系统版本等,判断用户使用场景。
- 输入特征:
- 基于用户特征构建用户画像向量,每个维度代表一种用户属性或行为特征值;将物品特征按照相同的逻辑整理成物品描述向量;上下文特征根据具体场景进行量化或编码后作为辅助输入。
- 采用的模型及实现:
- 协同过滤模型:
- 基于用户的协同过滤:通过计算用户之间的相似度(常用皮尔逊相关系数或余弦相似度),找到与目标用户相似的其他用户群体,然后推荐这些相似用户喜欢而目标用户尚未接触的物品。例如,在大规模用户行为数据上,可以使用 Spark 的分布式计算能力来加速相似度计算过程。代码示例(伪代码):
from pyspark.sql import SparkSession
from pyspark.ml.linalg import Vectors
from pyspark.ml.feature import VectorAssembler
from pyspark.ml.recommendation import ALS
# 初始化 Spark 会话
spark = SparkSession.builder.appName("UserCF").getOrCreate()
# 假设已有用户-物品评分数据 df,包含用户 ID、物品 ID 和评分字段
vectorAssembler = VectorAssembler(inputCols=["user_id", "item_id", "rating"], outputCol="features")
df = vectorAssembler.transform(df)
# 使用 ALS 算法训练模型
als = ALS(maxIter=10, regParam=0.01, userCol="user_id", itemCol="item_id", ratingCol="rating", coldStartStrategy="drop")
model = als.fit(df)
# 为目标用户召回物品
user_id = 1 # 示例目标用户 ID
recalled_items = model.recommendForUserSubset(df.filter(df.user_id == user_id), 10) # 召回 10 个物品
- 基于物品的协同过滤:计算物品之间的相似度,推荐与用户历史购买或浏览物品相似的其他物品。同样可以借助 Spark 等分布式框架提升计算效率。
- 基于内容的召回模型:利用物品的文本描述(如商品详情页的文案),通过自然语言处理技术(如 TF - IDF 算法提取关键词特征向量),结合用户的兴趣关键词向量(从用户历史行为文本中提取),计算两者相似度来召回物品。例如,使用 Scikit -