ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

学习对产品推荐进行排名

2022-09-03 19:03:32  阅读:205  来源: 互联网

标签:None 推荐 用户 我们 学习 NDCG 排名 数据 模型


学习对产品推荐进行排名

本文将介绍如何使用流行的 XGBoost 库来解决 Learning-to-rank (LTR) 问题

Photo by 穿得不好 on 不飞溅

LTR 最常见的用例是搜索引擎和推荐系统。排名的最终目标是以有意义的顺序对项目进行排序。
本文将使用流行的 XGBoost 库进行电影推荐。

在开始研究 LTR 时,我的第一个问题是,传统机器学习和排名问题有什么区别?所以这就是我发现的。每个实例在传统机器学习问题中都有一个目标类或值。例如,如果您正在处理客户流失预测问题,则您拥有每个客户和相关类的特征集。同样,我们的输出将是客户 ID 和预测的类别或概率分数。但是在 LTR 中,我们没有为每个实例设置一个类或值。相反,我们有多个项目及其每个实例的真实值,我们的输出将是这些项目的最佳排序。例如,如果我们有用户过去与项目的交互,我们的目标是建立一个能够预测最佳用户-项目对的模型。

现在是时候进入编码部分了。为简单起见,我将使用 movielens¹ 小型数据集。您可以使用以下链接下载数据集。

[

MovieLens 最新数据集

这些数据集会随着时间而变化,不适合报告研究结果。我们将保留下载...

grouplens.org

](https://grouplens.org/datasets/movielens/latest/)

让我们加载数据集并对数据集进行基本预处理。

在这个数据集中,我们有 100,000 个评分和 3,600 个标签应用程序,由 600 个用户应用于 9,000 部电影。

让我们快速看一下评分栏。

Review count by value

Review count by day name

Review count by received hour

在查看了上面的图之后,我为建模添加了一个基于时间、基于天的特征。因此,我将创建用户级和项目级功能。例如,对于某些电影“X”,我得到了与之交互的用户总数,收到了 5、4、3、2 和 1 星评论。此外,我每天都会添加收到的评论,并在下午 5 点之后收到评论。

让我们将数据集拆分为训练集和测试集。我将使用过去作为训练,最新数据将用于评估模型。

现在是时候创建模型输入了。由于排名模型不同于传统的监督模型,我们必须在模型中输入额外的信息。现在是时候创建模型了。我们将使用 xgboost、XGBRanker。让我们专注于它 。合身 方法。下面是文档字符串 XGBRanker().fit()。

签名:model.fit(X, y, group, sample_weight=None, eval_set=None, sample_weight_eval_set=None, eval_group=None, eval_metric=None, early_stopping_rounds=None, verbose=False, xgb_model=None, callbacks=None)
Docstring:拟合梯度提升模型

参数

X : array_like 特征矩阵
y : array_like 标签
组:array_like 训练数据的组大小
sample_weight : array_like 组权重
.. 注意:: 权重是按组排序的任务在排序任务中,每个组(而不是每个数据点)分配一个权重。这是因为我们只关心每个组内数据点的相对顺序,因此为单个数据点分配权重是没​​有意义的。

根据下面的文档字符串,我们必须为训练和测试样本输入组。所以问题是如何在排名模型中创建组数组。我看到很多人很难理解这个组参数。

简单来说,group 参数表示每个用户的交互次数。根据下面的代码片段,您可以看到一号用户与两个项目(11 和 12)进行了交互。因此,用户 1 的组大小为 2。此外,组长度应等于数据集中唯一用户的数量,并且组大小的总和应等于数据集中的记录总数。在下面的例子中 ** 团体** __ 参数是 [2,1,4] .

让我们创建模型输入。我们可以使用下面的代码。

现在我们有训练和测试输入来输入模型。是时候训练和评估模型了。在此之前,我有一些术语来解释文章的完整性。

在建立模型时,衡量预测的质量是必不可少的。评估推荐模型的可用度量是什么?很少,但最常见的措施是 归一化贴现累积收益 (NDCG) 平均精度 (MAP) .在这里,我将使用 NDCG 作为评估指标。 NDCG 是 CG(累积增益)的增强版本。在 CG 中,推荐订单并不重要。如果您的结果包含任何顺序的相关项目,这将为您提供更高的值,表明我们的预测是好的。但在现实世界中,情况并非如此。我们在推荐时应该优先考虑相关项目。为了实现这一点,我们应该在结果中较早出现低相关性项目时进行惩罚。这就是 DCG 所做的。但是,当不同的用户拥有不同的项目/交互计数集时,DCG 仍然会受到影响。那是哪里 归一化贴现累积收益 (NDCG) 发挥作用。它将使 DCG 指标标准化。

现在我们可以转到模型部分。

现在我们可以生成一些预测。

以下是一些生成的预测。

评估推荐模型的覆盖率总是很好的。使用覆盖率指标,您可以检查测试集中训练产品的百分比。覆盖范围越大,模型越好。在某些情况下,模型试图预测受欢迎的商家以最大化 NDCG 和 [email protected]。我在工作时遇到了这个问题 星点 产品推荐。当我们对我们的评估指标有疑问时,我们可以快速检查我们模型的覆盖率。在这个模型中,我得到了大约 2% 的覆盖率。表明我们的模型应该进一步改进。

此外,我们可以如下绘制特征重要性。

feature importance for XGBRanker

结论

在本文中,我们介绍了学习排序问题的基础知识、如何对排序问题建模,以及与评估推荐模型相关的一些技巧。虽然本文展示了如何使用 xgboost 解决产品排名问题,但我们也可以将这种方法用于其他排名问题。

参考

1 [分组]
F. Maxwell Harper 和 Joseph A. Konstan。 2015. MovieLens 数据集:历史和背景。交互式智能系统 (TiiS) 上的 ACM 交易 5、4:19:1–19:19。
https://doi.org/10.1145/2827872

谢谢阅读。与我联系 领英 .

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明

本文链接:https://www.qanswer.top/11792/39410318

标签:None,推荐,用户,我们,学习,NDCG,排名,数据,模型
来源: https://www.cnblogs.com/amboke/p/16653311.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有