A Revisiting Study of Appropriate Offline Evaluation for Top-N Recommendation Algorithms

news/2024/10/6 16:28:32

目录
  • 实验设置
  • Evaluation Metrics
    • Metric 的一致性
      • 不同的 metrics 导致的算法排名差异
    • Sampled metrics
      • Sampled metrics 是否会导致和 full ranking 的 metrics 不同的评价
  • 数据集构建
    • 数据集的选择和预处理
      • \(k\)-core filtering 的影响
    • 数据集的切分
      • 数据集的切分方式对结果的影响
      • 数据集的切分方式对产生 invalid recommendations 的影响
  • 模型优化
  • 代码
    • 目标函数
      • Sampling, non-sampling 方法的差异性

Zhao W., Lin Z., Feng Z., Wang P. and Wen J. A revisiting study of appropriate offline evaluation for top- n recommendation algorithms. TOIS, 2022.

系统性的讨论了推荐指标, 数据集切分, 优化方式对推荐系统离线评估的影响.

实验设置

  • 数据集:

  • 推荐算法:

    • 传统算法: Popularity, ItemKNN;
    • 矩阵分解: SVD++, BPRMF, NCF;
    • Item similarity-based: Factored Item Similarity Model (FISM), Neural Attentive Item Similarity Model (NAIS);
    • GNN-based: NGCF, LightGCN;
    • Non-sampling algorithms: CDAE, MultiVAE, ENMF.
  • 变化度量: 为了比较改变配置后算法的相对排名变化情况, 假设在两个配置 \(c_1, c_2\) 下, 上述算法的排名根据某个推荐指标得到排名分别为 \(R_k^{(c_1)}, R_k^{(c_2)}\), 作者引入了两个指标来衡量两个排名的一致性:

    • Overlap Ratio at top-\(k\) positions (\(OR@k\)):

      \[OR@k(c_1, c_2) = \frac{|R_k^{(c_1)} \cap R_k^{(c_2)}| }{k }, \]

      可以看到, \(OR@k\) 近关注排名前 top-\(k\) 的结果. 越大表示两个配置下 top-\(k\) 算法越一致.
    • Spearman Rank Correlation (SRC):

      \[SRC (c_1, c_2) = 1 - \frac{6 \sum_{a \in \mathcal{A}} (r_a^{(c_1)} - r_a^{(c_2)})^2 }{|\mathcal{A}|^3 - |\mathcal{A}| }, \]

      这里 \(\mathcal{A}\) 表示所有的算法, \(r_a\) 表示算法 \(a\) 的排名. 可以看到, \(SRC\) 是一个综合所有排名的指标. 越大表示两个配置下所有算法越一致.

Evaluation Metrics

  • 首先, 作者调研不同的评价指标下, 对算法排名的影响, 主要考虑了如下的指标: Precision, Recall, F1, Mean Average Precision (MAP), Mean Reciprocal Rank (MRR), Normalized Discounted Cumulative Gain (NDCG), AUC, Novelty, Coverage.

Metric 的一致性

不同的 metrics 导致的算法排名差异

  • 如上图所示, 虽然在不同指标下, 算法的排名不尽相同, 但总体可以分成如下的几组:

    1. Recall;
    2. NDCG, MRR, MAP;
    3. Hit, Precision;
    4. AUC;
    5. Novelty;
    6. Coverage.
  • 总体上来说也是比较好理解, 每个 group 的指标在性质上本身就存在差异. 尤其是排序指标 NDCG, MAP 这种和多样性指标 Novelty, Coverage 之间.

  • 不过比较有意思的是, 对于 top-\(k\) 算法而言, 也就是'最好'的那部分算法而言, 整体的一致性都比较好.

  • 建议: 在评价一个算法的时候, 尽量挑选不同 group 中的指标.

Sampled metrics

  • 虽然 sampled metrics 效率更高, 但是已经有论文指出 sampled metrics 的评估方式是有偏差的, 所以这篇文章进一步探究这个问题.

Sampled metrics 是否会导致和 full ranking 的 metrics 不同的评价

  • 如上图所示, 横坐标是采样的负样本数量, 采样的方式有两种: 均匀采样和依照流行度采样. 可以发现:

    1. Uniform sampling 往往显示更好的效果, 且随着负样本数的增加越发趋近全量的评估;
    2. amendment 表示修正过 bias 的 sampled metrics, 但是作者发现其实效果并不明显.
  • 进一步观测下方的 OR 的结果, 可以发现, 对于 top-\(k\) 的算法而言, 采取 sampled 或者全量的方式评估影响不大.

数据集构建

数据集的选择和预处理

\(k\)-core filtering 的影响

  • 通常, 推荐数据集会进行这样的一个预处理, 即不断删除不活跃的 user/item 直到至少有 \(k\) 个 items/users. 那么这种预处理的方式影响有多大呢?

  • 如上图所示, 并没有一致性的答案, 前后的差异和数据集有关系, 作者进一步猜测, 差异性程度和数据集 user, item 的各自交互比例有关系, 越平衡一致性越好.

  • 建议: 数据集的选择应当覆盖 domian, sparsity, data characteristics.

数据集的切分

  • 作者考虑了如下的四种切分方式:
    • Rankdom Ordering Ratio-based Splitting (RO_RS): 随机打乱用户的交互, 然后用户的数据按照比例进行切分;
    • Rankdom Ordering Leave-one-out Splitting (RO_LS): 随机打乱用户的交互, 然后用户的序列中的倒一和倒二分别作为测试和验证;
    • Temporal Ordering Ratio-based Splitting (TO_RS): 按时间排列用户的交互, 然后用户的序列按照比例进行切分;
    • Temporal Ordering Leave-one-out Splitting (TO_LS): 按时间排列用户的交互, 然后用户的序列中的倒一和倒二分别作为测试和验证.

数据集的切分方式对结果的影响

  • Data set ordering 对结果的影响更为显著, 所以如果算法是时间相关的, 最好还是选择 temporal ordering 的方式.

数据集的切分方式对产生 invalid recommendations 的影响

  • 上面讨论的方式, 实际上都可能会发生训练集测试集的时间线有重合的情况, 自然有可能会发生 invalid recommendations.

  • 作者通过下列的方式来统计出现 invalid recommendations 的比例:

    \[\#invalid = \frac{1}{|\mathcal{U}|} \sum_{u \in \mathcal{U}} \sum_{i \in \hat{R}_u} I(T_i^f \ge T_u^l ). \]

    其中 \(\hat{R}_u\) 表示给 \(u\) 的推荐列表, \(T_u^l\) 表示用户的最后的交互时间, \(T_i^f\) 表示 \(i\) 的第一次的出现时间.

  • 如上表所示, 总体来说 Temporal ordering 的方式会比 Rankdom ordering 的方式更容易产生更多的 invalid recommendations. 作者给了一点解释, 但是我感觉没啥道理.

模型优化

这块启发不是很大, 感兴趣的请回看原文.

代码

[official]

目标函数

Sampling, non-sampling 方法的差异性

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/28442.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

Ranorex日志备份

1.简要 由于我这里设置了定期删除日志文件,有关一些测试成功的日志报告就需要我们提前保存! 请同时备份 rxlog 和 data 文件!!!2.复原 2.1 复原并不是放在项目根目录下的reports文件夹中,注意到这里都只是快捷方式2.2 应当放到 bin>debug>Reports>2024... 下, 这里的实…

Markdown和Latex中文字上下标的方法

本文介绍了4种方法,可以在Markdown或者是LaTex的语法中实现文字、符号的上下标。公式的上下标大家都很清楚了,这里主要介绍的是文字的上下标,而且要保持使用归正的字体。在这些方法中,既可以使用公式+取消斜体的操作,也可以使用前端的一些上下标标签,还可以直接调用LaTex…

BeanShell使用场景和语法

BeanShell有自己的语法,同时支持java语法; 使用场景: 1. 数据库断言 2. RAS加密、混合加密 3. 接口签名 4. 调用开发给的jar包、class文件、java文件 5. csv数据驱动之后的断言 6. 跨线程组共享变量 分类: 1. 前置处理器:BeanShell 2. 后置处理器: BeanShell 3. 定时器:B…

dayjs 根据选择的日期获取当前周的周一到周天

// 设置表头日期 const setHeadDate = (val: any) => {const nowDay = dayjs(val).day()// 这周的第一天let str: any = nullif (nowDay){// 非周天,即当周str = dayjs(val).startOf(week).add(1, day)}else {// 周天,先减去一天,当作是上周的,然后算出来是上周的周天是…

js 金额计算时数值溢出

js 计算乘算时数字溢出场景项目上为了计算税率相乘,金额有小数点乘以税率后会导致部分数字溢出,为了解决数字溢出。使用 bignumber.js 库:安装 npm run install bignumber.js使用:效果图// 引入BigNumberconst BigNumber = require("bignumber.js");created() {c…

Go-Zero技能提升:深度探究goctl的妙用,轻松应对微服务开发挑战!(三)

深入解析Go-Zero的goctl工具,从0到1学会使用,快速生成api服务、rpc服务脚手架,提高开发效率!前言 有位同学在群里说:“Go-Zero官方文档太简洁了,对小白有点不友好。好奇你们是怎么学习的?项目是怎么封装的?有什么提高开发效率的技巧吗?”。 来来来,这期内容给你安排上…

openGauss 冲突处理

冲突处理 逻辑复制的行为类似于正常的DML操作,即便数据在订阅者节点本地被修改,逻辑复制也会根据收到的更改来更新数据。如果流入的数据违背了任何约束,复制将停止。这种情况被称为一个冲突。在复制UPDATE或DELETE操作时,缺失的数据将不会产生冲突并且这类操作将被简单地跳…

如何完美解决Outlook大文件传送问题,提升办公协作效率?

在日常工作中,邮件是一种常用的通信方式,经常用来发送各类文件,比如报告和文档、合同和协议、财务报表、营销资料、设计文件等。但有时文件会比较大,因此Outlook大文件传送时,会遇到附件大小受限的情况。常用的解决发送大文件的问题有以下几种: 1.压缩文件:如果文件大小…