返回列表

34th (ex 37th) Place Solution (Polars is here to stay !)

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

开始: 2022-11-01 结束: 2023-01-31 商品推荐 数据算法赛
第34名(原第37名)解决方案(Polars 在此立足!)

第34名(原第37名)解决方案(Polars 在此立足!)

作者: steubk (Master) | 比赛: OTTO – Multi-Objective Recommender System

感谢 Otto 和 Kaggle 举办了这次比赛,提供了如此具有挑战性的数据集。
特别感谢分享作品的 Kagglers,你们让比赛更加激动人心——照例祝贺获胜者和所有享受比赛的人!

这次比赛让我接触到了 Marlin dataloader——一个用于推荐系统的高效 NVIDIA dataloder(感谢 @radek1!)以及 Polars:一个用于处理海量数据集的极速 DataFrame 库,它原生支持多线程,而且对我而言,其语法比 pandas 更直观。在比赛过程中,我能够轻松地用 Polars 代码替换所有的 pandas 代码,并在内存(RAM)和 CPU 性能上获得了显著提升。

我认为 Polars 是一个将在数据生态系统中变得越来越重要的库。

我的解决方案

以下是我解决方案步骤的可视化展示:

解决方案流程图

验证集

从第 4 周的 1,801,251 个会话中随机截取 1,000,000 个会话。

候选选择(启发式模型)(验证集:0.570, 测试集:0.576)

为所有 aid、购物车和订单生成了共现矩阵,并计算概率 P(aid, next-aid) = next-aid 在包含 aid 的(会话窗口)中跟随 aid 出现。

概率示意图

计算一个 aid、购物车或订单在(会话窗口)中出现不止一次的概率。

启发式模型使用基于这两种概率的规则。

基础排序模型 (0.573, 0.580)

通过启发式模型选出前 100 个候选项,并生成了 26 个特征:

10 个基于(候选项与会话)交互的特征,其中最重要的是:

  • i_count:候选项在会话中出现的次数
  • i_self_aids_d:候选项在会话中出现不止一次的概率总和
  • i_sims_aids:候选项是会话中 next-aid 的概率总和

10 个基于会话的特征:

  • s_type_mean:点击、购物车和购买的平均值(见 链接

6 个基于候选项的特征:

  • a_self_buy_total:所有会话中候选项的订单出现次数

特征工程 1 (0.581, 0.588)

为每个会话的最后 5 个 aid、购物车、订单添加了自定义特征(共计 81 个特征):

  • i_aids_count_last_aid:共现矩阵的值(会话最后 aid,候选项)
  • i_aids_total_last_aid:最后 aid 在所有会话中的出现次数
  • i_aids_count_last_aid/i_aids_total_last_aid:候选项在所有会话中跟随最后 aid 的概率

特征工程 2: 0.583, 0.591

基于最后两周(验证集 + 测试集)生成共现

同比赛其他方案