kaggle(05)---Event Recommendation Engine Challenge(基础版)

文章目录

  • 目录
    • 1.比赛相关介绍
      • 1.1 比赛介绍
      • 1.2 数据集介绍
      • 1.3 评价标准介绍
      • 1.4 个人理解
    • 2. 解决方案
      • 2.1 统计用户和event信息
      • 2.2 计算用户相似度
      • 2.3 用户社交关系信息处理
      • 2.4 构建event和event相似度数据
      • 2.5 活跃度/event热度数据
      • 2.6 构建特征
      • 2.7 模型构建和预测
    • 3. 遇到的问题
    • 4. 总结

目录

kaggle比赛官网链接
下载好的数据集链接(百度云,提取码:ino3)

1.比赛相关介绍

1.1 比赛介绍

根据user actions, event metadata, and demographic information(社交信息)预测用户对哪个event感兴趣

1.2 数据集介绍

共有六个文件:train.csv,test.csv, users.csv,user_friends.csv,events.csv和 event_attendees.csv。

  • train.csv 有六列: user,event, invite,timestamp,interested和not_interested。 Test.csv 包含与train.csv相同的列,但interested和not_interested除外。每行对应于在我们的应用程序中向用户显示的事件。 event是一个标识我们系统中事件的id。 user是表示系统中用户的id。 invite 是一个二进制变量,指示用户是否已被邀请参加该事件。 timestamp是ISO-8601 UTC时间字符串,表示用户在我们的应用程序中看到事件时的大致时间(+/- 2小时)。 有兴趣是一个二进制变量,指示用户是否单击了此事件的“感兴趣”按钮; 如果用户单击了“兴趣”,则为1;如果用户未单击该按钮,则为0。类似地, not_interested是一个二进制变量,指示用户是否点击了此事件的“Not Interested”按钮; 如果用户单击按钮则为1,否则为0。用户可能会看到一个事件,并且单击既不感兴趣也不感兴趣,因此有些行包含0,0作为 感兴趣的值,not_interested。
  • users.csv包含有关我们的一些用户(包括列车和测试文件中出现的所有用户)的人口统计数据,它包含以下列: user_id, locale, birthyear, gender, joinedAt, location和 timezone。 user_id是我们系统中用户的ID。 locale是一个表示用户区域设置的字符串,其格式应为 language _ territory。birthyear是一个4位整数,表示用户出生的年份。 性别是男性还是女性,具体取决于用户的性别。 joinedAt是ISO-8601 UTC时间字符串,表示用户首次使用我们的应用程序时。 location 是表示用户位置的字符串(如果已知)。timezone是一个有符号整数,表示用户的UTC偏移量(以分钟为单位)。
  • user_friends.csv包含有关此用户的社交数据,包含两列:user和friends。 user是我们系统中用户的id,而 friends是用户朋友ID的空格分隔列表。
  • events.csv 包含有关我们系统中事件的数据,并且有110列。前九列是 event_id,user_id,start_time,city,state,zip,country, lat和lng。 event_id是事件的id,user_id 是创建事件的用户的id。 城市, 州, 邮编和 国家/地区代表有关场地位置的更多详细信息(如果已知)。 lat 和lng 是代表场地的纬度和经度坐标的浮点数,四舍五入到小数点后三位。 start_time 是ISO-8601 UTC时间字符串,表示事件计划何时开始。最后101列需要更多解释; 首先,我们确定了在我们事件的大型随机子集的名称或描述中出现的100个最常见的词干(通过Porter Stemming获得)。最后101列是count_1, count_2,…, count_100, count_other,其中 count_N是一个整数,表示第N个最常见词干出现在此事件的名称或描述中的次数。 count_other 是其余词的统计,其茎不是100个最常见的词干之一。
  • event_attendees.csv包含有关哪些用户参加了各种事件的信息,并包含以下列: event_id,yes,maybe,invite和no。event_id 标识事件。是,也许, 邀请,并且没有以空格分隔的用户ID列表,表示用户表示他们要去,可能去,被邀请或不去参加活动。

从数据介绍主要有3类数据

1.用户的历史数据 => 对event是否感兴趣/是否参加
2.用户社交数据 => 朋友圈
3.event相关的数据 => event相关的信息

简单思考

1.要把更多维度的信息纳入考量
2.协同过滤是基于 用户-event 历史交互数
3.需要把社交数据 和 event相关信息 作为影响最后结果的因素纳入考量
4.视作分类模型, 每一个人 感兴趣/不感兴趣 是target, 其他影响结果的是feature
5.影响结果的feature包括由协同过滤产出的推荐度

初步思路简图
在这里插入图片描述

1.3 评价标准介绍

  • 对于测试集中的每个用户,提交事件列表。这些事件为模型预测出的用户最感兴趣到用户最不感兴趣的排序。

  • 此竞赛的评估指标是前200个推荐的平均精度(任何一个用户的最大事件数为116,因此200不会产生有意义的限制)。您可以在 Kaggle wiki上找到有关此评估指标的更多信息 。

  • 可以从数据页面下载样本提交文件。提交文件的格式应如下:

有一个标题:“用户,事件”
包含两列
用户:按排序顺序的用户ID
事件:以空格分隔的推荐事件列表,从用户最感兴趣的事件列表到用户最不感兴趣的事件列表
提交样本的前几行:
用户,事​​件
1776192,2877501688 1024025121 4078218285 2972​​428928 3025444328 1823369186 2514143386 
3044012,2529072432 1532377761 1390707377 1502284248 3072478280 1918771225 
4236494,152418051 4203627753 2790605371 799782433 823015621 2352676247 110357109

1.4 个人理解

  • 我们需要从users.csv,user_friends.csv,events.csv和 event_attendees.csv文件提取出一些对预测用户是否会对某些事件感兴趣的特征。
  • 最终我们需要实现一个模型能够输出每个用户对所有事件的一个感兴趣程度,并根据感兴趣程度对事件进行降序排序输出。

2. 解决方案

具体代码

2.1 统计用户和event信息

  • 1.读取train.csv和test.csv文件
  • 2.统计出用户和事件信息,构建用户-索引字典和事件-索引字典
  • 3.构建用户-事件字典和事件-用户字典
  • 4.构建用户-事件-兴趣矩阵
  • 5.构建关联用户字典和关联事件字典。

2.2 计算用户相似度

  • 1.读取user.csv文件
  • 2.对user数据结构中的每一列进行处理,主要是将字符型的数据转换为数值型的数据,其中locale(locale库进行处理),joinedAt(datetime进行事件处理),location(pycountry进行编码)。
  • 3.将处理后的特征进行归一化处理。
  • 4.通过scipy.spatial.distance库中的函数计算每两个用户之间的相似度,从而构成一个用户相似矩阵。

2.3 用户社交关系信息处理

  • 1.读取user_friends.csv文件
  • 2.统计每个用户其朋友的数量(如果你有更多的朋友,可能你性格外向,更容易参加各种活动)
  • 3.统计每个用户其朋友参与事件的情况,构建用户-用户朋友参与事件情况矩阵。(如果你朋友会参加某个活动,可能你也会跟随去参加一下)

2.4 构建event和event相似度数据

  • 1.读取events.csv文件
  • 2.将数据按照属性是否有具体的意义划分为两个矩阵
  • 3.对具有意义的属性列进行hash处理,其余的列复制即可。
  • 4.对上面的2个矩阵进行归一化处理
  • 5.对上面两个矩阵分别计算用户-event和event-event相识度,构建两个相似度矩阵。

2.5 活跃度/event热度数据

  • 1.读取event_attendees.csv文件
  • 2.统计每个活动参加和不参加的人数,从而计算出互动的活跃度。

2.6 构建特征

  • 1.读取之前几个步骤保存下来的文件
  • 2.基于之前的得到的特征,根据User-based协同过滤,得到event的推荐度;
  • 3.根据基于物品的协同过滤,得到Event的推荐度;
  • 4.基于用户的朋友个数来推断用户的社交程度。朋友对用户的影响
  • 5.活动本身的热度
  • 6.把前面user-based协同过滤和item-based协同过滤以及各种热度和影响度作为特征组合在一起生成新的train,用于分类器分类使用。

2.7 模型构建和预测

  • 读取前面保存好的训练集进行模型的训练(XGBT)
  • 进行交叉验证,判断模型的性能
  • 使用模型对测试集上的用户进行预测。

3. 遇到的问题

  • 由于电脑性能有限,所以在统计用户和时间信息的时候,我们只关注在train和test两个文件中出现的用户和事件,其余的不作考虑,因为我们最终是要对通过对train中的数据的学习,然后对test中用户的预测。其他的没有出现的用户则不用考虑。如果电脑的性能允许的话,最好是对所有的用户都进行考虑。否则会出现用户的一些朋友在不在考虑的用户范围内。
  • 再用文件user.csv文件计算用户相似度矩阵的时候,我们需要对该文件中的一些类型属性进行处理,尤其是国家属性和时间属性。其中国家属性不能简单使用one-hot进行处理,否则矩阵会非常的稀疏,应该使用pycountry库对其进行编码处理。时间属性则需要将年月进行提出。在将特征数据都转换为数值型的数据后,需要对特征数据进行归一化处理,然后使用scipy对每个用户两两之间计算相似性(向量的相似性)
  • 时间属性特征一定要单独处理
  • 有具体含义的特征和没有具体含义的特征需要单独进行处理
  • 构建event-event相似矩阵的时候,也要对特征进行处理(类别性的数据,数值型的数据)

4. 总结

  • 了解问题
  1. 问题分析
    • 通过查阅资料,了解要解决的问题是什么(分类还是回归)
    • 通过查阅文档,了解给出的数据中每个属性代表的意义。
    • 结合实际的生活和自己的理解,给出初步的解决方案。

2.初步想法:
- 1.通过查阅资料发现本文解决的问题是一个推荐问题,需要我们输出TOPN.
- 2.从给出的数据可以看出,除了传统的基于用户的协同过滤和基于物品(活动)的协同过滤外,还应该利用用户的朋友圈的信息

3.具体方案:

  • 1.基于user.csv文件,得出用户-用户之间的相似度矩阵
    • 方法1:通过历史行为,找出关联用户
    • 方法2:通过用户的信息,即该数据集中其他的属性信息,通过度量不同用户之间向量的距离作为用户之间的相似度。
  • 2.基于event,得出event-event之间的相似度矩阵和用户-event的相似度矩阵。
    • 方法1:基于用户的历史信息,找出关联的事件和用户关联的事件
    • 方法2:基于事件的属性,即数据中其他属性的信息,衡量不同事件的向量的距离作为事件与事件之间的相似度。
  • 3.基于friend.csv文件,得出用户的朋友数目和用户朋友的活跃度
    • 用户的朋友数目越多,则其越外向,越有可能参与活动
    • 用户朋友都是那种乐意参加活动的人,那么用户自己参加活动的可能性也会很高。
  • 4.基于event_attendees.csv文件得出互动的活跃度
    • 活跃度越高的事件,用户参加的可能性越大。

4.具体实施:

  • 1.数据清洗
    • 类别数据转换为数值型的数据
    • 事件数据进行拆分
    • 缺失数据进行填充
  • 2.处理用户和活动之间的关联数据
    • 得到用户列表(不重复)
    • 得到活动列表(不重复)
    • 得到用户和活动的的关联数据。
  • 3.用户与用户之间的相似度矩阵
    • 通过用户信息计算用户之间的相似性
    • 通过用户的活动行为计算用户之间的相似性(如果两个用户参加的活动好多都相同,那么这两个用户之间相似)
  • 4.构建event 和 event之间的相似度矩阵
    • 通过event的属性信息计算event之间的相似性
    • 通过用户参与活动的历史信息计算event之间的相似性。(相似的用户购买的产品也相似)
  • 5.用户社交关系挖掘
    • 统计每个用户的朋友信息
    • 统计每个用户朋友活跃度信息(参加活动总数/总的朋友数)
  • 6.统计event热度
    • 统计每个活动参与的人数信息作为活动的热度标准
  • 7.串起所有的数据处理和准备流程
    • 计算上诉的特征,并进行保存
  • 8.构建特征
    • 读取上诉保存的特征
    • 基于用户-用户的相似度矩阵,得出基于用户的活动推荐度
    • 基于活动-活动的相似度矩阵,得出基于活动的活动推荐度
    • 合并所有的特征,并进行保存
  • 9.建模与预测
    • 模型训练
    • 参数调节
    • 模型评估
    • 进行预测

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

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

相关文章

Python(2)-第一个python程序、执行python程序三种方式

第一个Python 程序1. 第一个Python 程序2. 常用两Python个版本3. 程序执行的三种方式3.1 解释器3.2 交互式运行Python程序3.3 IDE(集成开发环境)-pycharm1. 第一个Python 程序 Python 源程序就是一个特殊格式的文本文件,所以可以采用任意的文…

推荐算法---FM,协同过滤

文章目录目录1.FM算法产生背景2.FM算法模型3.FM算法VS其他算法4.推荐算法总结目录 1.FM算法产生背景 在传统的线性模型如LR中,每个特征都是独立的,如果需要考虑特征与特征直接的交互作用,可能需要人工对特征进行交叉组合;非线性…

借助桶排序思想完成的一道题

问题: 数组排序之后的相邻数的最大差值; 嗯,你可以排序,然后找相邻的最大差值。 但是你觉得这么简单我写他干啥。 最优解:时间复杂度O(N),空间O(1) 那我们开始说这种方法: 1)遍…

Python(3)-Pycharm基本使用技巧

初识Pycharm1.界面2.恢复初始设置3.第一次打开Pycharm4.打开一个项目5.设置解释器的版本。6.新建项目7.编辑器、控制台的字体设置Pycharm–适合于开发管理大型项目,项目是用以解决复杂功能的软件。1.界面 导航区–主要有什么文件 编辑区–编辑具体的文件 控制台窗口…

推荐算法概述(01)

1.什么是推荐系统 用户没有明确的需求,你需要的是一个自动化的工具,它可以分析你的历史兴趣,从庞大的电影库中找到几部符合你兴趣的电影供你选择。这个工具就是个性化推荐系统。 推荐系统的主要任务 推荐系统的任务就是联系用户和信息&…

何为布隆过滤器

问题的提出 我们有一个不安全网页的黑名单,包含了100亿个黑名单网页的URL,每个网页URL最多占用64B.。 现在我们要设计一个网页过滤系统,这个系统要判断该网页是否在黑名单里,但是我们的空间有限,只有30GB. 允许有万分之一的判断…

推荐算法--利用用户行为数据(02)

文章目录目录1.什么是用户行为数据?1.1用户行为分类2.用户行为数据如何使用?2.1 用户活跃度和物品流行度的分布2.2 用户活跃度和物品流行度的关系2.3 协同过滤算法3.实验设计和算法评测4.基于邻域的的推荐算法4.1 基于用户的协同过滤算法4.2 基于物品的协…

《Head First设计模式》第九章(2)组合模式

组合模式 ​ 基于前一篇迭代模式的案例进行需求更新,餐厅的菜单管理系统需要有煎饼屋菜单和披萨菜单。现在希望在披萨菜单中能够加上一份餐后甜点的子菜单。 在迭代模式中,披萨菜单是用数组维护的,我们需要让披萨菜单持有一份子菜单&#xf…

Python(4)--Pycharm安装、使用小技巧

Pycharm安装1.专业版Pycharm 安装2.设置Pycharm桌面快捷图标3.Linux卸载一个软件4.教育版Pycharm的安装5.多文件项目演练(Pycharm针对学生和教师开发了免费使用版)1.专业版Pycharm 安装 1.官网下载安装包 .tar.gz 2.解压缩 tar -zxvf 文件名 3.移动解压…

推荐算法--推荐系统冷启动问题(03)

文章目录目录1.什么是冷启动问题?1.1冷启动问题1.2 冷启动问题的分类1. 用户冷启动2 物品冷启动3 系统冷启动2.如何解决冷启动问题?2.1利用用户注册信息2.2选择合适的物品启动用户的兴趣2.3利用物品的内容信息2.4 发挥专家的作用目录 1.什么是冷启动问题…

《Head First 设计模式》第十章-状态模式 状态模式

状态模式 策略模式和状态模式是双胞胎,在出生时才分开。你已经知道,策略模式是围绕可以互换的算法来创建成功业务的,然而,状态走的是更崇高的路,它通过改变对象内部的状态来帮助对象控制自己的行为。 定义状态模式 …

推荐算法--利用用户标签数据(04)

文章目录流行的推荐系统通过3种方式联系用户兴趣和物品 (1):利用用户喜欢过的物品,给用户推荐与他喜欢过的物品相似的物品,这是基于物品的算法。 (2):利用和用户兴趣相似的其他用户…

Python(5)-注释

Python注释1.单行注释2. 多行注释(块注释)3.注释的使用和代码规范pyhton 的注释 使用自己熟悉的语言(中文),解释代码。Python解释器在执行文件时不会执行井号右边边的内容。1.单行注释 # 井号后面跟着注释内容 灰灰的虚…

网络原理知识点总结

第一章: 计算机网络系统由资源子网和通信子网组成。 计算机网络系统主要由网络通信系统、操作系统和应用系统构成 互联网基础结构发展的三个阶段: 第一阶段:从单个网络 ARPANET 向互联网发展的过程。 第二阶段:建成了三级结构…

推荐算法--时效性(05)

时效性 推荐系统应该考虑时间效应,因为用户的兴趣是有时间变化的。用户一年前喜欢的东西现在不一定感兴趣,相比于推荐过去喜欢的物品,推荐用户近期喜欢的物品更有参考价值。而在新闻更是如此,推荐过去跟用户兴趣一致的新闻已经失去…

推荐算法--推荐系统架构(06)

外围架构一般来说,每个网站都有一个 UI 系统,UI 系统负责给用户展示网页并和用户交互。网站会通过日志系统将用户在 UI 上的各种各样的行为记录到用户行为日志中。 从上面的结构可以看到,除了推荐系统本身,主要还依赖两个条件--界…

Python(6)-算数运算符

算数运算符1.算数运算符2.优先级1.算数运算符 加 减- 乘* 除/ 取商// 取余数% 幂**(能算n次方: 2**38,一直以为只能算平方) 扩展: 乘法用于字符串:字符串重复指定的次数,要拼接的次数很长时,用乘号很方便…

推荐算法--其他信息(07)

文章目录目录1.利用上下文信息1.1时间上下文1.2地点上下文2.利用网络社交数据2.1 获取网络社交数据途径2.2 社交网络数据2.3 基于社交网络的推荐2.4 推荐算法2.5 给用户推荐好友目录 1.利用上下文信息 1.1时间上下文 用户的兴趣是随着时间变化的,三天打鱼两天晒网…

Python(7)-程序执行的原理

程序执行的原理1.计算机中的三个核心部件2.程序执行的原理3.程序的作用1.计算机中的三个核心部件 CPU:中央处理区,超大规模的集成电路,负责处理数据、计算 内存:临时存储数据,断电数据消失,读取数据快 硬盘…

橙白oj 2017级《算法分析与设计》-练习02

注:A题我以为给新生出的,应该贼简单,是按顺序消灭,卡了十几分钟,成了最后一个ac的题,真是菜的真实。 Problem A: Description 白细胞是人体与疾病斗争的“卫士”。当病菌侵入人体体内时,白细胞…