返回列表

3rd Place - Using Only Rules Achieves LB 0.590!

532. OTTO – Multi-Objective Recommender System | otto-recommender-system

开始: 2022-11-01 结束: 2023-01-31 商品推荐 数据算法赛

Team G & B & D & T

非常高兴能与 @titericz、@benediktschifferer 和 @theoviel 合作。我们每个人都构建了独立的模型,然后通过将每个用户目标类型的预测排名相加,将我们所有的工作集成在一起。下面我将描述我个人的单模型。我的队友们将在他们自己的讨论帖中描述他们的工作。你可以在这里阅读 Theo 的 LB 0.6029 模型!你可以在这里阅读 Benny 的 LB 0.601 模型!

我的大部分解决方案都在比赛期间的笔记本和讨论中公开了。我的公开工作中只缺少 3 个重要的想法。让我们来讨论如何将我的公开工作提升到 LB 0.601 的单模型。(更新:所有代码已发布到 GitHub)

如何达到 LB 0.601 单模型分数

这里和这里已经解释过,最好的方法是“候选重排”模型。我的公开笔记本展示了如何达到 LB 0.575。我的讨论帖解释了如何通过添加 GBT 排序模型来改进我的公开笔记本。以下是达到 LB 0.601 所缺少的三个部分,分别标记为 (1)、(2) 和 (3)。

(1) 选择候选者

要构建“候选重排”,我们需要候选者。我们从哪里获得候选者?最简单的方法是从我的公开笔记本中获取。在 def suggest_buys(df)def suggest_clicks(df) 函数中,最后几行是:

top_aids = [aid for aid, ct in aids_counter.most_common(20)] 
return top_aids

要生成 50 个候选者,我们将 20 改为 50,如下所示:

top_aids = [aid for aid, ct in aids_counter.most_common(50)] 
return top_aids

(2) 选择交互特征

现在我们从上面的公开笔记本中获得了每个用户 50 个候选者。接下来我们需要为重排模型制作特征。制作特征最有效且最简单的方法是提取我们的共访计数,方法是将我公开笔记本的最后两行更改为以下内容:

top_counts = [ct for aid, ct in aids_counter.most_common(50)] 
return top_counts

当我们将这些计数合并到我们的候选者中时,我们现在就有了每个用户-项目对的交互特征。为了制作更多的交互特征,我们可以单独提取每个共访矩阵的计数。例如,假设我们有 3 个共访矩阵,分别名为 covisit2、covisit3 和 covist4。然后我们逐一提取每个共访的计数:

EXTRACT = ['covisit2']
aids_counter = Counter()
if 'covisit2' in EXTRACT:
    aids = list(itertools.chain(*[covisit2[aid] for aid in unique_aids if aid in covisit2]))
    for a in aids: aids_counter[a] += 1
if 'covisit3' in EXTRACT:
    aids = list(itertools.chain(*[covisit3[aid] for aid in unique_aids if aid in covisit3]))
    for a in aids: aids_counter[a] += 1
if 'covisit4' in EXTRACT:
    aids = list(itertools.chain(*[covisit4[aid] for aid in unique_aids if aid in covisit4]))
    for a in aids: aids_counter[a] += 1
top_counts = [ct for aid, ct in aids_counter.most_common(50)] 
return top_counts

重排模型提升 CV 和 LB +0.011

首先,我们使用上述技术生成候选者,并使用上述技术提取共访计数。接下来,我们添加一些简单的项目和用户特征,例如计算项目被点击、加入购物车或订购的次数。当我们应用这里描述的 XGB 重排模型时,我们的 CV 和 LB 将提升 +0.011。例如,公开笔记本将提升至 LB 0.586。

仅使用规则(不使用重排模型)得分 LB 0.590

为了得分超过 LB 0.600,我们创建了更多的共访矩阵来提升原始笔记本的 LB 分数。我的公开笔记本使用了 3 个共访矩阵并达到了 LB 0.575。如果我们再制作 17 个共访矩阵,我们可以将我的公开“仅规则”笔记本提升到 LB 0.590(新笔记本发布在此处)。然后,当我们提取上述解释的共访计数时,XGB 重排模型将提升 +0.011 并达到 LB 0.601。

(3) 二十个共访矩阵

以下是我的 20 个共访矩阵的描述。这些共访矩阵是使我的单个 XGB 排序模型达到 LB 0.601 的秘诀。

同比赛其他方案