未完待续


第1章 好的推荐系统

什么是推荐系统

推荐系统的基本任务是联系用户和物品,解决信息过载的问题。
社会化推荐(social recommendation):向朋友咨询
基于内容的推荐(content-based filtering):寻找和自己之前喜欢的物品相似的物品
基于协同过滤(collaborative filtering):找到和自己历史兴趣相似的用户所喜欢的物品

推荐系统评测

实验方法

离线实验(offline experiment)、用户调查(user study)、在线实验(online experiment)
离线实验步骤:

  1. 通过日志系统获得用户行为数据,并按照一定格式生成一个标准的数据集;
  2. 将数据集按照一定的规则分成训练集和测试集;
  3. 在训练集上训练用户兴趣模型,在测试集上进行预测;
  4. 通过事先定义的离线指标评测算法在测试集上的预测结果。
    在线实验:AB测试
    AB测试是一种很常用的在线评测算法的实验方法。它通过一定的规则将用户随机分成几组,并对不同组的用户采用不同的算法,然后通过统计不同组用户的各种不同的评测指标比较不同算法,比如可以统计不同组用户的点击率,通过点击率比较不同算法的性能。

    评测指标

  5. 用户满意度
  6. 预测准确度
    评分预测:均方根误差RMSE和平均绝对误差(MAE)
    TopN推荐:准确率(precision)和召回率(recall)
  7. 覆盖率(coverage)
    信息熵和基尼系数(Gini Index)
  8. 多样性
  9. 新颖性
  10. 惊喜度
  11. 信任度
  12. 实时性
  13. 健壮性
  14. 商业目标

    评测维度

    用户维度
    物品维度
    时间维度

第2章 利用用户行为数据

基于用户行为分析的推荐算法是个性化推荐系统的重要算法,学术界一般将这种类型的算法称为协同过滤算法。
按反馈的明确性分,显式反馈(explicit feedback)和隐式反馈(implicit feedback)
按反馈的方向分,正反馈(用户的行为倾向于指用户喜欢该物品)和负反馈(用户的行为倾向于指用户不喜欢该物品)
有代表性的数据集:
无上下文信息的隐性反馈数据集:每一条行为记录仅仅包含用户ID和物品ID。
无上下文信息的显性反馈数据集:每一条记录包含用户ID、物品ID和用户对物品的评分。
有上下文信息的隐性反馈数据集:每一条记录包含用户ID、物品ID和用户对物品产生行为的时间戳。
有上下文信息的显性反馈数据集:每一条记录包含用户ID、物品ID、用户对物品的评分和评分行为发生的时间戳。

用户活跃度和物品流行度的分布

PowerLaw分布(长尾分布)
$f(x)=αx^k$
令$f_u(k)$为对k个物品产生过行为的用户数,令$f_i(k)$为被k个用户产生过行为的物品数。它们都满足长尾分布。
$f_i(k)=a_ik^{β_i}$
$f_u(k)=a_uk^{β_u}$
物品的流行度指对物品产生过行为的用户总数。
用户的活跃度为用户产生过行为的物品总数。

用户活跃度和物品流行度的关系

仅仅基于用户行为数据设计的推荐算法一般称为协同过滤算法。
基于邻域的方法(neighborhood-based):基于用户的协同过滤算法(推荐和用户兴趣相似的其他用户喜欢的物品)、基于物品的协同过滤算法(推荐和他之前喜欢的物品相似的物品)
隐语义模型(latent factor model)
基于图的随机游走算法(random walk on graph)

基于邻域的算法

基于用户的协同过滤算法

步骤:

  1. 找到和目标用户兴趣相似的用户集合。
  2. 找到这个集合中的用户喜欢的,且目标用户没有听说过的物品推荐给目标用户。
    步骤1关键是计算两个用户的兴趣相似度。
    利用行为的相似度计算兴趣相似度。Jaccard公式计算用户u和用户v的兴趣相似度。(N(u)表示用户u曾经有过正反馈的物品集合)
    $w_{uv}=|{N(u)∩N(v)}|/|{N(u)∪N(v)}|$
    或者通过余弦相似度
    $w_{uv}=|{N(u)∩N(v)}|/√(|{N(u)||N(v)}|)$

基于物品的协同过滤算法

UserCF的推荐更社会化,反映了用户所在的小型兴趣群体中物品的热门程度,而ItemCF的推荐更加个性化,反映了用户自己的兴趣传承。