返回列表

12th place solution

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

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

第12名方案

作者:BUUMOO
比赛排名:12th

1. 检索阶段 (Retrieval Stage)

重访 (Re_visitition):
所有历史事件

共访 (Co_visitition):
[ Top_140(类型加权) + Top_140(购买到购买) + Top_50(时间加权) ] 中的 Top_150

SRGNN:
Top_172

在我的方案中,DNN模型即使使用稍少的平均候选数,也能显著提升检索器的召回率。
这里的召回率指的是 recall@full_candidates。

检索策略 点击召回 加购召回 下单召回 加权召回总和 平均候选数/会话
all_past_events | top_258_co_visitition 0.697 0.555 0.732 0.675 236.47
all_past_events | top_150_co_visitition | top_169_CORE_trm 0.723 0.575 0.742 0.690 234.26
all_past_events | top_150_co_visitition | top_172_SRGNN 0.734 0.581 0.746 0.695 234.07

组合多个DNN模型对我来说不起作用,在数十次实验中,单个SRGNN表现最好。

SRGNN的数据准备与增强:

删除出现次数少于3次的商品。

训练集: 第3周 + 截断的第4周前半部分

验证集: 截断的第4周后半部分(以前半部分为基础)

数据增强:

训练集: 对于每个序列,迭代地将最后一个项目作为目标,将其余部分截断或填充到最大长度50作为训练序列,直到只剩1个项目。

验证集: 对于每个序列,使用截断的第4周前半部分作为基础,然后迭代地连接截断的第4周后半部分作为目标,直到后半部分的最后一个项目,如下图所示:

数据增强示意图

在测试用例中,我们有前半部分作为预测的基础,所以我使用这种方法来最好地模拟这种情况。与仅使用后半部分相比,这也增加了验证样本,因为在仅使用后半部分的情况下,后半部分的第一个项目不能用作目标。

验证指标是 recall@20,这与我的检索策略在所有实验和DNN模型中的最终召回率相关性非常好。

我没有尝试其他增强方法,如交换、洗洗牌等,仅仅是因为对于我的机器来说,数据规模已经被认为非常巨大了。

2. 排序阶段

排序的交叉验证策略:

仅使用第4周的数据作为训练数据来形成会话-项目对。

对于每种类型:点击/加购/下单,删除所有没有正目标的会话,然后分别对每种类型进行 GroupKfold。

负样本下采样:正:负 = 1:20

特征工程:

  1. 会话特征: 关于会话的统计数据:

    session_clicks/carts/orders_count(会话点击/加购/下单计数),

    session_length(会话长度),

    session_items_nunique(会话唯一商品数),

    session_duration(会话持续时间),

    等等...

  2. 商品特征: 关于商品的统计数据:

    简单统计量

    item_total_count(商品总数)

    item_count as clicks/carts/orders(作为点击/加购/下单的商品计数)

    每周的 clicks/carts/orders_counts(点击/加购/下单计数)

    按时间顺序(周为基础)的 clicks/carts/orders_counts 变化趋势

    每周的 clicks/carts/orders_unique_session_counts(点击/加购/下单唯一会话计数)

    按时间顺序(周为基础)的 clicks/carts/orders_unique_session_counts 变化趋势

同比赛其他方案