其他分享
首页 > 其他分享> > 学习对产品推荐进行排名

学习对产品推荐进行排名

作者:互联网

学习对产品推荐进行排名

本文将介绍如何使用流行的 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