Coggle 30 Days of ML(22年12月)


## Part1 内容介绍

在给大家分享知识的过程中,发现很多入门同学对文本编码和推荐系统比较感兴趣:

  • 如何计算文本和用户之间的相似度?
  • 如何进行协同过滤和多路召回?
  • 如何去评价推荐系统的多阶段精度?

而上述问题都是一个推荐算法工程师必备的,本月我们将组织一次推荐系统竞赛训练营活动,希望能够帮助大家入门数据竞赛。

12月份的竞赛活动将以天池 零基础入门推荐系统赛题展开。在活动中我们将布置具体竞赛任务,然后参与的同学们不断闯关完成,尽可能的帮助大家入门。


## Part2 活动安排

  • 免费学习活动,不会收取任何费用。
  • 请各位同学添加下面微信,并回复【竞赛学习】,即可参与。


## Part3 积分说明和奖励

为了激励各位同学完成的学习任务,将学习任务根据难度进行划分,并根据是否完成进行评分难度高中低的任务分别分数为3、2和1。在完成学习后(本次活动,截止12月31),将按照积分顺序进行评选 Top3 的学习者。

打卡链接:https://shimo.im/forms/TX81bYDbhD8xRgoy/fill

打卡可以写在一个地址,每次有新完成的可以重复提交打卡!

昵称 得分
davidzhou0803 8
刘鹏华 3
Shinerise 3
Zouia Gail 3
Je vais bien 2
统计小白er 3
老胡中肯 3
Z1998zs 2
༺ཌ༈閉關修煉༈ད༻ 1
Nikii-Zhang 1
涅墨西斯 1
likr💕 1
jo 1
潇墨 1
孙宇翔 1
xx 1
【湫】 1

Top1的学习者将获得以下奖励

  • Coggle 竞赛专访机会
  • 《机器学习算法竞赛实战》

Top2-3的学习者将获得以下奖励

  • Coggle 周边福利
  • Coggle 竞赛专访机会

历史活动打卡链接,可以参考如下格式:


## Part4 新闻推荐预测

### 赛题介绍

赛题以新闻APP中的新闻推荐为背景,要求选手根据用户历史浏览点击新闻文章的数据信息预测用户未来点击行为,即用户的最后一次点击的新闻文章,测试集对最后一次点击行为进行了剔除。通过这道赛题来引导大家了解推荐系统中的一些业务背景,解决实际问题,帮助竞赛新人进行自我练习、自我提高。

### 数据说明

数据文件说明:

  • train_click_log.csv:训练集用户点击日志
  • testA_click_log.csv:测试集用户点击日志
  • articles.csv:新闻文章信息数据表
  • articles_emb.csv:新闻文章embedding向量表示
  • sample_submit.csv:提交样例文件
Field Description
user_id 用户id
click_article_id 点击文章id
click_timestamp 点击时间戳
click_environment 点击环境
click_deviceGroup 点击设备组
click_os 点击操作系统
click_country 点击城市
click_region 点击地区
click_referrer_type 点击来源类型
article_id 文章id,与click_article_id相对应
category_id 文章类型id
created_at_ts 文章创建时间戳
words_count 文章字数
emb_1,emb_2,…,emb_249 文章embedding向量表示

### 评估方式

MRR(Mean Reciprocal Rank):首先对选手提交的表格中的每个用户计算用户得分:

$$ score(user)=\sum_{k=1}^5\frac{s(user,k)}{k} $$

如果选手对该user的预测结果predict k命中该user的最后一条购买数据则s(user,k)=1; 否则s(user,k)=0 。而选手得分为所有这些score(user)的平均值。

### 提交方式

提交前请确保预测结果的格式与sample_submit.csv中的格式一致,以及提交文件后缀名为csv。其格式如下:

user_id,article_1,article_2,article_3,article_4,article_5

其中user_id为用户id, article_1,article_2, article_3, article_4, article_5为预测用户点击新闻文章Top5的article_id依概率从高到低排序,例如:

user_id,article_1,article_2,article_3,article_4  ,article_5
   200000,1  ,2,3,4,5
   200001,1  ,2,3,4,5
   200002,1  ,2,3,4,5
   200003,1  ,2,3,4,5

### 学习打卡

任务名称 难度
任务1:比赛报名与读取 低、1
任务2:比赛数据分析 中、2
任务3:验证集构造与本地评分 中、2
任务4:协同过滤思路 高、3
任务5:树模型与特征工程 中、2
任务6:深度学习思路 高、3
任务7:多模型训练与集成 高、3
  • 任务1:比赛报名与数据读取
    • 步骤1:在报名比赛
    • 步骤2:下载比赛数据集,DataA1121.md内为文件链接。
    • 步骤3:理解文件逻辑,并使用Pandas读取数据集。
import pandas as pd
import numpy as np

articles = pd.read_csv('articles.csv')
articles_emb = pd.read_csv('articles_emb.csv')

train_clicks = pd.read_csv('train_click_log.csv')
test_clicks = pd.read_csv('testA_click_log.csv')

  • 任务2:比赛数据分析
    • 步骤1:用户属性分析,使用可视化图表分析以下内容
      • 训练集和测试集中分别有多少用户?
      • 用户城市分布有什么规律?
      • 平均每个用户会点击多少个文章?
      • 点击来源与文章点击次数是否存在关联?
    • 步骤2:用户行为分析,使用可视化图表分析以下内容
      • 用户点击行为从时间戳上,能够判断连续点击?
      • 用户在查看文章时,文章的之间是否存在相似性?
      • 用户在查看文章时,点击来源和文章类型是否存在关联?
    • 步骤3:文章内容分析,使用可视化图表分析以下内容
      • 文章字数与点击次数是否存在关联
      • 文章嵌入的向量是否可以用来计算文章相似度,尝试聚类并进行降维可视化
      • 文章创建的时间与文章点击的时间是否存在关联?
    • 参考资料:https://tianchi.aliyun.com/notebook-ai/detail?postId=144451

你可以自己撰写代码,完成自己的数据分析,如下是一些分析结论样例:

1.  训练集和测试集的用户id没有重复,也就是测试集里面的用户模型是没有见过的
2.  训练集中用户最少的点击文章数是2, 而测试集里面用户最少的点击文章数是1
3.  用户对于文章存在重复点击的情况, 但这个都存在于训练集里面
4.  同一用户的点击环境存在不唯一的情况,后面做这部分特征的时候可以采用统计特征
5.  用户点击文章的次数有很大的区分度,后面可以根据这个制作衡量用户活跃度的特征
6.  文章被用户点击的次数也有很大的区分度,后面可以根据这个制作衡量文章热度的特征
7.  用户看的新闻,相关性是比较强的,所以往往我们判断用户是否对某篇文章感兴趣的时候, 在很大程度上会和他历史点击过的文章有关
8.  用户点击的文章字数有比较大的区别, 这个可以反映用户对于文章字数的区别
9.  用户点击过的文章主题也有很大的区别, 这个可以反映用户的主题偏好 10.不同用户点击文章的时间差也会有所区别, 这个可以反映用户对于文章时效性的偏好

  • 任务3:验证集构造与本地评分
    • 步骤1:验证集划分
      • 划分方法1:将训练集每个用户最终五个文章划分划分为验证集,剩余的划分为训练集。
      • 划分方法2:将训练集按照时间戳划分训练集与验证集,时间戳可以自定义
      • 划分方法3:按照用户占比划分,如80%的用户划分为训练集,剩余的20%作为验证集
      • 思考:上述三种划分方法,哪种在比赛中最合适?为什么?哪种可以交叉验证?
    • 步骤2:定义评分方法
      • 使用Numpy定义评分函数函数
      • 思考:评分方法评价的是一个排序问题,还是一个召回问题?
      • 思考:在构建模型时,选择二分类还是多分类建模,为什么?

  • 任务4:协同过滤思路(召回阶段)
    • 步骤1:Iterm-CF思路
    • 步骤2:User-CF思路
    • 步骤3:内容相似度召回思路(提示,通过embedding计算文章的相似度)
    • 步骤4:文章热度排序(统计用户当前点击时文章的热度)
    • 步骤5:
      • 【基础】使用任务4中第三种划分方法,对比步骤1-步骤4四种方法下验证集文章的MRR得分
      • 【基础】选择上述方法中精度最高的一种,对测试集进行预测,提交到天池
      • 【进阶】使用上述方法进行综合打分,比如每个思路得到的文章权重为0.25,得到综合的文章排序
      • 【进阶】尝试多种加权方法,得到最优的精度加权组合,对测试集进行预测,提交到天池
    • 参考资料:

https://cdn.coggle.club/img/rs-user-cf.png

  • 任务5:树模型与特征工程(排序阶段)

    • 步骤1:树模型非常适合用来进行二分类,也就是排序阶段,请使用LightGBM完成以下操作
      • 计算每个用户历史点击时间与文章发布时间的平均间隔
      • 计算每个用户点击文章的类型
      • 计算每个用户每次点击下不同来源的点击概率
    • 步骤2:采样得到负样本,使用训练集点击的样本作为正样本,召回后的非点击文章作为负样本。
    • 步骤3:训练得到初步的排序模型,记录下模型的MRR。
    • 参考资料:https://tianchi.aliyun.com/notebook-ai/detail?postId=144453
  • 任务6:深度学习思路(排序阶段)

    • 步骤1:搭建深度学习模型,输入用户 + 文章的信息,其中类别类型需要进行embeding嵌入。
    • 步骤2:使用模型来训练模型,通过验证集调整最优模型的网络结构。
  • 任务7:多模型训练与集成

    • 步骤1:对比多种召回方法,最终召回得到的文章的MRR,选择最优的召回方法。
    • 步骤2:对比多种排序方法,对召回的文章进行排序,计算最终的MRR。
    • 步骤3:使用划窗的方式构建得到多个排序模型。
    • 参考资料:https://tianchi.aliyun.com/notebook-ai/detail?postId=144454

### 学习资料



© 2019-2023 coggle.club 版权所有     京ICP备20022947    京公网安备 11030102010643号