532. OTTO – Multi-Objective Recommender System | otto-recommender-system
非常高兴能与 @titericz、@benediktschifferer 和 @theoviel 合作。我们每个人都构建了独立的模型,然后通过将每个用户目标类型的预测排名相加,将我们所有的工作集成在一起。下面我将描述我个人的单模型。我的队友们将在他们自己的讨论帖中描述他们的工作。你可以在这里阅读 Theo 的 LB 0.6029 模型!你可以在这里阅读 Benny 的 LB 0.601 模型!
我的大部分解决方案都在比赛期间的笔记本和讨论中公开了。我的公开工作中只缺少 3 个重要的想法。让我们来讨论如何将我的公开工作提升到 LB 0.601 的单模型。(更新:所有代码已发布到 GitHub)
这里和这里已经解释过,最好的方法是“候选重排”模型。我的公开笔记本展示了如何达到 LB 0.575。我的讨论帖解释了如何通过添加 GBT 排序模型来改进我的公开笔记本。以下是达到 LB 0.601 所缺少的三个部分,分别标记为 (1)、(2) 和 (3)。
要构建“候选重排”,我们需要候选者。我们从哪里获得候选者?最简单的方法是从我的公开笔记本中获取。在 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
现在我们从上面的公开笔记本中获得了每个用户 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
首先,我们使用上述技术生成候选者,并使用上述技术提取共访计数。接下来,我们添加一些简单的项目和用户特征,例如计算项目被点击、加入购物车或订购的次数。当我们应用这里描述的 XGB 重排模型时,我们的 CV 和 LB 将提升 +0.011。例如,公开笔记本将提升至 LB 0.586。
为了得分超过 LB 0.600,我们创建了更多的共访矩阵来提升原始笔记本的 LB 分数。我的公开笔记本使用了 3 个共访矩阵并达到了 LB 0.575。如果我们再制作 17 个共访矩阵,我们可以将我的公开“仅规则”笔记本提升到 LB 0.590(新笔记本发布在此处)。然后,当我们提取上述解释的共访计数时,XGB 重排模型将提升 +0.011 并达到 LB 0.601。
以下是我的 20 个共访矩阵的描述。这些共访矩阵是使我的单个 XGB 排序模型达到 LB 0.601 的秘诀。