Kaggle往期赛 | 多目标推荐系统大赛baseline

news2024/11/20 4:22:20

来源:深度之眼 作者:比赛教研部
编辑:学姐

Kaggle OTTO – Multi-Objective Recommender System多目标推荐系统大赛

赛题分析+baseline

1、赛题链接

https://www.kaggle.com/competitions/otto-recommender-system/overview

2、赛题描述

本次比赛的目标是预测电子商务点击、购物车添加和订单。

根据用户的行为记录来预测用户各种行为下次发生交互的商品,这是一个经典的多目标推荐问题。本次比赛的目标是预测电子商务的点击量、购物车的添加量和订单。你将根据用户Session序列中的行为记录来进行推荐。

3、评价指标

这里我们需要对用户的点击,加购,购买行为进行Top-K推荐,我们需要对每一个User的Session序列给出预测的Top-20的Item结果,其评估指标使用Recall进行评估:

这里我们需要分别对这三种行为分别进行Recall指标计算,最后将三个行为的Recall值进行加权求和,其权值如下:

4、数据介绍

我们将数据完全读入,可以看到数据的组织形式如下:

可以看到数据的组织形式十分的简练,但是在训练集里面一共有2亿条数据,数据包含有四列:['session','aid','ts','type'],记录了session的用户的这三种行为,我们挑选几个Session,来根据时间来可视化一下用户的行为类型。

我们对数据中的三种行为的占比进行可视化:

可以看到,用户的绝大多数行为是点击行为,对于加购和购买行为几乎很少。

bassline分析

Item-CF的思路

由于数据量极其的大,我们这里只使用最简单的基于统计的方法来完成此次baseline,这里我们使用Item-CF的思路,通过统计得出Item-Item的相似度矩阵,然后根据用户的行为,推荐出相似的Item以完成Top-20推荐。

由于数据量实在太大,我们这里只采样3000000个session完成下面的baseline。

train_session = random.sample(list(train_df['session'].unique()),config['train_session_num'])
train_df = train_df.query('session in @train_session').reset_index(drop=True)

在过滤完数据之后,我们来生成Item-Pair,这里要注意,每一个Item-Pair都是由在同一天同一个Session中相邻的Item对构成。

def generate_pairs(df): df = df.sort_values(by=['session','ts']) df['aid_next'] = df['aid'].shift(-1) df['session_day'] = df['session'].astype('str')+'_'+df['time_stamp'] df['session_day_count'] = df['session_day'].map(df['session_day'].value_counts()) df['ranking'] = df.groupby(['session_day'])['ts'].rank(method='first', ascending=True) df = df.query('session_day_count!=ranking').reset_index(drop=True)

sim_aids = df.groupby('aid').apply(lambda df: Counter(df.aid_next).most_common(50)).to_dict()
sim_aids = {aid: Counter(dict(top)) for aid, top in sim_aids.items()}
return sim_aids

在完成计算Item-Item的相似度之后,我们就可以来根据相似度矩阵来进行推荐了,其推荐函数如下:

def recommend(aids,popular_items):

if len(aids) >= 20:
    return aids[-20:]

aids = set(aids)
new_aids = Counter()
for aid in aids:
    new_aids.update(sim_aids.get(aid, Counter()))

top_aids2 = [aid2 for aid2, cnt in new_aids.most_common(40) if aid2 not in aids] 
final_rec_list = list(aids) + top_aids2[:20 - len(aids)]

if len(final_rec_list)<20:
    return final_rec_list + popular_items[:20-len(final_rec_list)]
else:
    return final_rec_list

这样就可以完成对用户的推荐了,这里要注意,我们对不同行为的推荐结果都是相同的,由于只有点击行为的数据是非常丰富的,对于其他行为,数据是非常少的,所以这里就直接对这三个行为进行了相同的推荐。

test_df = test_df.sort_values(["session", "type", "ts"]) test_session_dict = test_df.groupby('session')['aid'].agg(list).to_dict() session_id_list = [] item_id_list = []

popular_items = list(train_df['aid'].value_counts().index)

for session_id,session_item_list in tqdm(test_session_dict.items()): item_list = recommend(session_item_list,popular_items)

session_id_list.append(session_id)
item_id_list.append(list(item_list))

res_df = pd.DataFrame() res_df['session_type'] = session_id_list res_df['labels'] = [' '.join([str(l) for l in lls]) for lls in item_id_list]

res_list = [] for type_ in [0,1,2]: temp_df = copy.deepcopy(res_df) temp_df['session_type'] = temp_df['session_type'].apply(lambda x:'{}{}'.format(x,id2type[type])) res_list.append(temp_df) res_df = pd.concat(res_list,axis=0)

可以看到,我们这次的Baseline的代码非常简单,而且效率非常的高,使用Kaggle自带的CPU环境只需要10分钟+就可以完成全流程的跑测,线上得分:0.553,虽然这个得分不是很高,但是这个baseline跑测效率较高,代码结构易懂,其潜力还是很大的~

百场比赛top方案资料包🚀🚀🚀

关注“KGMking”回复“比赛”免费获取

码字不易,欢迎大家点赞评论收藏!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/444508.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

聚观早报 |字节与Meta争夺VR开发者;苹果设备无故要求输入ID密码

今日要闻&#xff1a;字节与Meta争夺VR应用开发者&#xff1b;苹果设备无故要求输入ID密码&#xff1b;余承东称25年是智能电动汽车分水岭&#xff1b;小鹏回应G6售价及配置信息曝光&#xff1b;亚马逊将在爱尔兰裁员200人 字节与Meta争夺VR应用开发者 4 月 14 日消息&#xf…

运筹说 第89期|网络计划-网络计划的优化

通过画网络图并计算时间参数&#xff0c;我们已得到了一个初步的网络计划&#xff0c;而网络计划技术的核心却在于从工期、成本、资源等方面对这个初步方案做进一步的改善和调整&#xff0c;以求得最佳效果&#xff0c;这一过程&#xff0c;就是网络计划的优化。接下来让我们跟…

家用洗地机到底好不好用?国产性价比高的品牌

洗地机作为一种高效、节能、环保、卫生的清洁设备&#xff0c;不仅能够提升清洁效率&#xff0c;还能有效减少清洁成本&#xff0c;更重要的是&#xff0c;它可以帮助我们创造一个更加健康和舒适的生活环境。而且除菌方面大部分都是采用电解水的除菌方式&#xff0c;更加环保和…

【我的创作纪念日—5周年】

序言 用心生活&#xff0c;用力向上&#xff0c;微笑前行&#xff0c;就是对生活最好的回馈。 机缘 最开始写文章&#xff0c;没想那么多&#xff0c;主要是记录一下&#xff0c;就随便写了下&#xff0c;后来认识了一些写文章的小伙伴&#xff0c;在和他们的沟通中越来越体会到…

PACS/RIS影像管理系统源码,采用VC++编程语言,提供三维图像后处理和算法

PACS/RIS影像管理系统源码 医学影像管理&#xff08;PACS/RIS&#xff09;系统是一套完整的提供DICOM标准遵从、高效的实现医学影像归档存储、通讯和诊断处理功能的医学影像信息管理系统&#xff0c;其基于DICOM/HL7标准的开放性架构和模块化的结构体系&#xff0c;确保了系统…

自动驾驶就是在扯?比亚迪你凭什么?

比亚迪“炮轰”自动驾驶 上周&#xff0c;在比亚迪2022年财报交流会上&#xff0c;有投资人问比亚迪在自动驾驶方面的发展进度和规划&#xff0c;比亚迪集团董事长王传福直言&#xff1a;“无人驾驶那都是扯淡&#xff0c;弄个虚头巴脑的东西那都是忽悠&#xff0c;它就是一场皇…

【超算/先进计算学习】日报4

目录 今日已完成任务列表遇到的问题及解决方案任务完成详细笔记高性能算法计算机算法的特征及内涵科学计算算法的主要分类高性能算法与传统算法的异同稀疏矩阵向量乘法 SpMV 与稀疏矩阵存储结构常见的稀疏矩阵传统存储与其SpMV算法不同的稀疏矩阵传统存储结构存储效率与稀疏度针…

Linux进程概念及状态

Linux进程概念及进程状态 目录 Linux进程概念及进程状态引入1、什么是进程1.1 描述进程1.2 task_struct组织进程1.3 proc目录 2、进程标识符3、查看进程4、bash进程5、初始fork6、进程状态6.1 操作系统层面6.2 Linux内核源代码RSDX 6.3 僵尸进程6.4 孤儿进程关于kill指令 引入 …

nssctf web 入门(9)

[SWPUCTF 2021 新生赛]sql [SWPUCTF 2021 新生赛]sql 可以猜测做了过滤 这里可以bp跑一下看过滤了哪些 尝试发现过滤了空格/**/在sql中代表注释符在mysql中这个可以用来代表空格 发现--被过滤 #也不行我们试下url编码的#也就是%23 成功了 3个字段 得到库名test_db 这里提示非…

一篇文章让你彻底学会--防抖(并且自己可以手写)

Hi,有的小伙伴们在面试的时候会被要求手写防抖函数&#xff0c;很多都被难着了吧&#xff0c;宝贝&#xff0c;那你你没有理解防抖函数。 今天&#xff0c;就让我带你攻克它&#xff01; 1.防抖 防抖:单位时间内&#xff0c;频繁触发事件&#xff0c;只执行最后一次。 人话:说…

嵌入式Linux(1):make menuconfig图形化界面

文章目录 搜索功能配置驱动状态退出和make menuconfig有关的三个文件make menuconfig会读取哪个目录下的Kconfig文件&#xff1f;为什么要复制成.config而不复制成其他的文件呢&#xff1f;在默认的deconfig上面通过make menuconfig来改配置&#xff0c;然后保存怎么和Makefile…

门店智能经营平台能解决哪些问题?应该如何选购?

现在很多实体店都开始借助第三方软件或系统&#xff0c;来为自家门店搭建门店智能经营平台&#xff0c;来智能管理自家门店的商品和库存&#xff0c;提高门店运营效率。 一、使用门店智能经营平台能解决哪些难题&#xff1f; 1、实现数据化决策 通过门店智能经营平台&#xff…

VUE3的使用

文章目录 一、Vue3基础语法1、Vue开发准备2、Vue的模板语法3、条件渲染4、列表渲染5、事件处理6、表单输入绑定 二、Components组件1、组件基础2、组件交互3、自定义事件的组件交互4、组件生命周期5、引入第三方组件 三、网络请求及路由配置1、Axios网络请求2、Axios网络请求封…

【Python_Matplotlib学习笔记(一)】pyplot模块的基本用法

pyplot模块的基本用法 前言 Matplotlib 是一个 Python 的 2D绘图库&#xff0c;它以各种硬拷贝格式和跨平台的交互式环境生成出版质量级别的图形&#xff08;来自&#xff1a;百度百科&#xff09;。pyplot 模块是 Matplotlib 模块提供的快速绘图模块&#xff0c;它模仿了 MA…

H12-831最新解析25题

401、(判断)isis silent命令用来配置IS-IS接口为抑制状态&#xff0c;即抑制该接口接收和发送IS-IS报文&#xff0c;但此接口所在网段的路由可以被发布出去。 A.TRUE B.FALSE 答案&#xff1a;A 解析&#xff1a;isis silent命令为设置静默接口&#xff0c;配置了之后该接口…

5.1、阻塞/非阻塞、同步/异步(网络IO)

5.1、阻塞/非阻塞、同步/异步&#xff08;网络IO&#xff09; 1.阻塞/非阻塞、同步/异步(网络IO)①典型的一次IO的两个阶段是什么&#xff1f; 2.日志系统①基础知识②整体概述③本文内容④单例模式1.经典的线程安全懒汉模式2.局部静态变量之线程安全懒汉模式 ⑤饿汉模式⑥条件…

Tomcat 部署与优化

1. Tomcat概述 Tomcat是Java语言开发的&#xff0c;Tomcat服务器是一个免费的开放源代码的Web应用服务器&#xff0c;是Apache软件基金会的Jakarta项目中的一个核心项目&#xff0c;由Apache、Sun和其他一些公司及个人 共同开发而成。Tomcat属于轻量级应用服务器&#xff0c;在…

电商系统架构设计系列(一):电商系统到底是如何设计出来的?

引言 电商这个业务&#xff0c;和我们的生活息息相关。你可能对电商多少有一些了解&#xff0c;但是&#xff0c;即使是一个最小化的电商系统&#xff0c;它仍然非常复杂。在这个系列的文章里&#xff0c;我们将一起以一个创业公司的 CTO 的视角&#xff0c;来设计一个最小化的…

深度学习实战26-(Pytorch)搭建TextCNN实现多标签文本分类的任务

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下深度学习实战26-(Pytorch)搭建TextCNN实现多标签文本分类的任务&#xff0c;TextCNN是一种用于文本分类的深度学习模型&#xff0c;它基于卷积神经网络(Convolutional Neural Networks, CNN)实现。TextCNN的主要思想…

C语言实现链表--数据结构

魔王的介绍&#xff1a;&#x1f636;‍&#x1f32b;️一名双非本科大一小白。魔王的目标&#xff1a;&#x1f92f;努力赶上周围卷王的脚步。魔王的主页&#xff1a;&#x1f525;&#x1f525;&#x1f525;大魔王.&#x1f525;&#x1f525;&#x1f525; ❤️‍&#x1…