返回列表

1st place solution

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

开始: 2022-11-01 结束: 2023-01-31 商品推荐 数据算法赛
第一名解决方案

第一名解决方案

作者:mrkmakr
发布时间:2023-02-06

非常感谢主办方组织了这场有趣的比赛。
问题设置与我实际的工作非常接近,我很高兴学到了很多东西。

候选集生成

候选者的平均数量约为 1200 个。

  • 会话中访问过的 aids(商品ID)
  • 共现矩阵
    • 使用多个版本,通过类型和聚合周期进行不同的加权
    • 像集束搜索一样多次应用共现矩阵
  • 预测后续 aids 的神经网络 (NN)
    • 使用多个版本创建候选集和重排序特征
    • NN 结构为 MLP 或 Transformer(差异不大)
    • 我尝试专注于那些预测效果不佳的样本
    • 我对 x_aid 和 y_aid 使用了相同的嵌入。
    • 我将未来的多个 aids 用作正样本目标。
    • 在计算会话嵌入时,我使用了预测目标 aid 的类型信息,以便根据预测目标 aid 的类型调整会话嵌入。
    • 一些模型仅使用未访问过的 aids 作为目标进行训练,以避免与基于重访的候选者和特征产生信息重叠。

重排序器

模型

单个 LGBMRanker : LB 0.604
9 个具有不同超参数的 LGBMRankers 集成 : LB 0.605
我通过对排序器的预测分数取平均值来进行集成。

  • 我还没有测试这是否比投票等方法更好。

特征

  • 会话 * aid (交互特征)
    • 候选生成阶段通过共现矩阵得到的排名
    • 候选生成阶段通过 NN 得到的余弦相似度
    • 会话中的 aid 信息(何时出现、是什么类型等)
  • aid
    • aids 的流行度
      • 排名后效果很好
      • 通过多个时间窗口计算
    • 类型比例
  • 会话
    • 长度
    • aid 重复率
    • 最后一个 aid 和倒数第二个 aid 之间的时间戳间隔

创建了大约 200 个特征
通过 lgbm gain importance 为每个目标选择大约 100 个特征,以减少内存使用

负采样率

点击 : 5%
加购 : 25%
订单 : 40%
我设置这些值是为了让我的机器能够处理训练数据(每个数据大小约为 35GB)。

交叉验证策略

我遵循了 radek 的设置。 https://www.kaggle.com/competitions/otto-recommender-system/discussion/364991
我可以得到本地验证和 LB 之间几乎完美的相关性。
为了快速迭代改进,我通过使用 5% 的数据进行训练并使用其他 10% 的数据进行评估来进行实验。

消融实验

基于本地验证的消融实验。
同时涉及候选生成和重排序特征的信息已从两者中移除。

条件 clicks_recall@20 carts_recall@20 orders_recall@20 weighted_recall@20