532. OTTO – Multi-Objective Recommender System | otto-recommender-system
• 重访 (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表现最好。
删除出现次数少于3次的商品。
训练集: 第3周 + 截断的第4周前半部分
验证集: 截断的第4周后半部分(以前半部分为基础)
训练集: 对于每个序列,迭代地将最后一个项目作为目标,将其余部分截断或填充到最大长度50作为训练序列,直到只剩1个项目。
验证集: 对于每个序列,使用截断的第4周前半部分作为基础,然后迭代地连接截断的第4周后半部分作为目标,直到后半部分的最后一个项目,如下图所示:
在测试用例中,我们有前半部分作为预测的基础,所以我使用这种方法来最好地模拟这种情况。与仅使用后半部分相比,这也增加了验证样本,因为在仅使用后半部分的情况下,后半部分的第一个项目不能用作目标。
验证指标是 recall@20,这与我的检索策略在所有实验和DNN模型中的最终召回率相关性非常好。
我没有尝试其他增强方法,如交换、洗洗牌等,仅仅是因为对于我的机器来说,数据规模已经被认为非常巨大了。
仅使用第4周的数据作为训练数据来形成会话-项目对。
对于每种类型:点击/加购/下单,删除所有没有正目标的会话,然后分别对每种类型进行 GroupKfold。
负样本下采样:正:负 = 1:20
会话特征: 关于会话的统计数据:
session_clicks/carts/orders_count(会话点击/加购/下单计数),
session_length(会话长度),
session_items_nunique(会话唯一商品数),
session_duration(会话持续时间),
等等...
商品特征: 关于商品的统计数据:
简单统计量
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 变化趋势