我有一个网页搜索数据集:
SearchId WebpageId Clicked
A 1 1
A 4 0
A 6 0
B 1 0
B 3 0
B 4 0
B 10 1
C 1 0
C 3 0
C 5 0
C 6 1
C 7 0
C 8 0
C 9 0
...
对于每次搜索,我知道显示的网页(但不知道它们显示的顺序),并且我知道是否单击了网页的链接。每次搜索只能点击一个网页。
这种情况下可以使用xgboost成对排名吗?怎么办?
如果没有,我还能用什么?
pairwise 方法“可以判断给定的一对文档中哪个文档更好”:在我看来,您发布的数据集更适合逐点方法,这基本上是一个回归问题。
但是,考虑到您只能单击一个页面,我认为您可以将数据集转换为
SearchId WebpageId_1 WebpageId_2 Labels^*
A 1 4 GOOD
A 4 6 SAME
A 6 1 NOT_GOOD
...
*^labels are according to the event of click on the first WebpageId.
运行算法(例如带有rank:pairwise的XGBoost),最后在列表中对结果进行排序,您可以从中为每个SearchID选择顶部网页(排序任务可能非常耗时且难以准确完成)。 对于不同的方法,您可以查看这篇文章关于成对排名和神经网络
您可以使用二进制标签训练 XGBoost LTR 模型,文档也有一个相同的示例