532. OTTO – Multi-Objective Recommender System | otto-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 个会话。
为所有 aid、购物车和订单生成了共现矩阵,并计算概率 P(aid, next-aid) = next-aid 在包含 aid 的(会话窗口)中跟随 aid 出现。

计算一个 aid、购物车或订单在(会话窗口)中出现不止一次的概率。
启发式模型使用基于这两种概率的规则。
通过启发式模型选出前 100 个候选项,并生成了 26 个特征:
10 个基于(候选项与会话)交互的特征,其中最重要的是:
10 个基于会话的特征:
6 个基于候选项的特征:
为每个会话的最后 5 个 aid、购物车、订单添加了自定义特征(共计 81 个特征):
基于最后两周(验证集 + 测试集)生成共现