推荐系统赛题理解与Baseline
<天池推荐系统比赛记录>
推荐系统概述
更具用户信息给用户推荐商品,本质上是一种实现将用户-商品-公司之间利益最大化的手段。
评测指标:用户满意度,覆盖率,多样性,新颖性,AUC曲线等。
召回:召回阶段负责将海量的候选集快速缩小为几万到几千的规模,利用少量的特征和简单的模型对大规模的数据集进行快速的筛选,Embedding召回是一个综合性强且计算速度也能满足需求的召回方法。
本次赛题
目标: 根据用户历史浏览点击新闻的数据信息预测用户最后一次点击的新闻文章。
提交形式:
user1, article1, article2, article3, article4, article5.
数据:用户的点击日志,无特征+标签。
问题转化:监督学习问题,首先分类是否会点击某篇文章,其次预测用户的点击文章的概率。
Baseline
主要分为几个模块:导包,reduce_mem
节约内存函数,get_all_click_sample
、get_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)=∑i∈I(rui−rˉu)2∑i∈I(rvi−rˉv)2∑i∈I(rui−rˉu)(rvi−rˉ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提供了一个比较全面解决推荐系统问题的思路,但是后续还需要对里面涉及的一些方法进行改进,主要有相似度的计算方法、召回的方法,考虑使用不同的策略来进行召回。