返回列表

17th place solution

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

开始: 2022-11-01 结束: 2023-01-31 商品推荐 数据算法赛
第17名解决方案
作者: chimuichimu | 比赛排名: 第17名

首先,感谢 OTTO 和 Kaggle 组织了这场精彩的比赛。

在这里我想分享我的部分工作。

概述

  • 我的部分
    • 两阶段推荐系统
    • 每个会话 100-200 个候选项
    • 排序模型使用了 100 个特征
    • 交叉验证策略
      • 本地验证:使用第3周数据训练,第4周数据验证
      • 提交阶段:使用第4周数据训练
    • 分数 -> 公榜: 0.598, 私榜: 0.597
  • 团队方案
    • 通过排名投票 集成我的模型输出与队友的模型输出
    • 分数 -> 公榜: 0.601, 私榜: 0.600

候选生成

通过以下方法生成候选项。

每个会话的候选项中位数:点击 为 100,加购 为 180,订单 为 200。

  • 历史行为
  • 共访矩阵
    • 矩阵类型
      • action2action
      • action2click, action2cart, action2order
      • action2buy
      • buy2buy
    • 权重
      • 类型
      • 时间新近度
      • 时间间隔
  • word2vec (使用 Gensim Word2Vec)
  • node2vec (使用 PyTorch Geometric Node2Vec)

特征工程

创建了大约 100 个特征来训练模型。

我认为我的特征与其他参赛者相比并不特别,但下面给出了一些例子。

  • CF 分数
    • 候选项分数
    • 候选项排名
  • 物品 特征
    • {type} 的数量*
    • {type} 数量与行为数量的比率
    • 一个会话中 {type} 的平均数量
    • 一个会话中 {type} 后出现 {type} 的概率
  • 用户 特征
    • 会话大小
    • 唯一物品数量
    • 唯一物品数量与会话大小的比率
  • 物品 x 用户 交互特征
    • {type} 的数量
    • 按新近度加权的 {type} 数量
    • {type} 数量与会话大小的比率
    • 距离上次 {type} 的经过时间
  • 物品相似度
    • 通过 word2vec 和 node2vec 嵌入的余弦相似度
      • 最后一个 aid 与候选项的相似度
      • 最后 3 个 aids 与候选项的平均相似度
      • 最后 5 个 aids 与候选项的平均相似度

*{type} 表示点击、加购 或订单。

排序模型

  • 我使用了 LightGBM ranker
    • objective: lambdarank
    • boosting_type: gbdt

模型集成

  • 对于每种类型,集成两个候选生成略有不同的 LightGBM ranker 的输出
    • 分数 -> 公榜: 0.598, 私榜: 0.597
  • 之后,通过排名投票集成我的模型输出与队友的模型输出
    • @dehokanta & @zakopur0 模型
      • 分数 -> 公榜: 0.598, 私榜: 0.597
    • @t88take 模型
      • 分数 -> 公榜: 0.594, 私榜: 0.594
    • 最终分数 -> 公榜: 0.601, 私榜: 0