天池推荐系统赛题理解与Baseline

推荐系统赛题理解与Baseline

<天池推荐系统比赛记录>

推荐系统概述

更具用户信息给用户推荐商品,本质上是一种实现将用户-商品-公司之间利益最大化的手段。

评测指标:用户满意度,覆盖率,多样性,新颖性,AUC曲线等。

召回:召回阶段负责将海量的候选集快速缩小为几万到几千的规模,利用少量的特征和简单的模型对大规模的数据集进行快速的筛选,Embedding召回是一个综合性强且计算速度也能满足需求的召回方法。

本次赛题

目标: 根据用户历史浏览点击新闻的数据信息预测用户最后一次点击的新闻文章。

提交形式:

user1, article1, article2, article3, article4, article5.

数据:用户的点击日志,无特征+标签。

问题转化:监督学习问题,首先分类是否会点击某篇文章,其次预测用户的点击文章的概率。


Baseline

主要分为几个模块:导包,reduce_mem节约内存函数,get_all_click_sampleget_all_click_df读取数据函数,get_user_item_time获取 用户 - 文章 - 点击时间字典,get_item_topk_click获取点击最多的topk个文章,itemcf_sim文章与文章之间相似性矩阵计算,item_based_recommend基于文章协同过滤的召回,召回字典转换成dataframe,submit生成提交文件。

协同过滤:

基于用户行为计算与其他已知喜好用户的相关性,相关性的度量有以下几种方法

1、杰卡德(Jaccard)相似系数
s i m u v = ∣ N ( u ) ∩ N ( v ) ∣ ∣ N ( u ) ∣ ∪ ∣ N ( v ) ∣ sim_{uv}=\frac{|N(u) \cap N(v)|}{\sqrt{|N(u)| \cup|N(v)|}} simuv=N(u)N(v) N(u)N(v)
杰卡德相似系数一般无法反映具体用户的评分喜好信息, 所以常用来评估用户是否会对某商品进行打分。

2、余弦相似度
s i m u v = ∣ N ( u ) ∣ ∩ ∣ N ( v ) ∣ ∣ N ( u ) ∣ ⋅ ∣ N ( v ) ∣ sim_{uv}=\frac{|N(u)| \cap |N(v)|}{\sqrt{|N(u)|\cdot|N(v)|}} simuv=N(u)N(v) N(u)N(v)
3、皮尔逊相关系数
s i m ( u , v ) = ∑ i ∈ I ( r u i − r ˉ u ) ( r v i − r ˉ v ) ∑ i ∈ I ( r u i − r ˉ u ) 2 ∑ i ∈ I ( r v i − r ˉ v ) 2 sim(u,v)=\frac{\sum_{i\in I}(r_{ui}-\bar r_u)(r_{vi}-\bar r_v)}{\sqrt{\sum_{i\in I }(r_{ui}-\bar r_u)^2}\sqrt{\sum_{i\in I }(r_{vi}-\bar r_v)^2}} sim(u,v)=iI(ruirˉu)2 iI(rvirˉv)2 iI(ruirˉu)(rvirˉv)
皮尔逊相关系数通过使用用户的平均分对各独立评分进行修正,减小了用户评分偏置的影响。

目前应用比较广泛的协同过滤算法是基于邻域的方法, 其中基于用户的协同过滤算法,主要是找到某用户与其他用户的相似度,再使用最相似用户对于物品的偏好对对该用户对未评分物品进行打分,实现过程:建立数据表、计算用户相似矩阵、计算前n个相似用户、计算最终得分。

另外一种是基于物品的协同过滤算法,主要是找到物品和物品之间的相似性,如果物品a和物品c具有很大的相似度是因为喜欢物品a的用户大都喜欢物品c,实现过程:建立数据表、计算物品相似矩阵、计算前n个相似物品,根据用户计算物品最终得分。

召回:

召回的主要目的是缩减问题的规模,主要的做法还是通过多种方式评选出一部分候选集,再把候选集混合在一起并进行排序最终选出多种召回策略下最优的n个选择。

其中协同过滤就是一种召回策略,在Baseline中使用了基于文章的协同过滤召回,主要计算了文章之间的相似矩阵来召回得分最高文章最终推荐给用户。


测试Baseline

测试过程主要有以下几个问题:

最后在生成提交文件的函数submit出错,提示不是每个用户都有5篇以上

tmp = recall_df.groupby('user_id').apply(lambda x: x['rank'].max())
assert tmp.min() >= topk

问题来源:获取部分测试集时,测试集testA_click_log.csv中的用户user_id与训练集中不一致,所以召回数据中没有来自测试集的用户,tet_recall空无法生成提交文件。

使用全量测试集后,能够生成提交文件,Baseline得分0.1026


总结

Baseline提供了一个比较全面解决推荐系统问题的思路,但是后续还需要对里面涉及的一些方法进行改进,主要有相似度的计算方法、召回的方法,考虑使用不同的策略来进行召回。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值