专栏首页刘笑江的专栏尝试改进微信读书个性化推荐:一个基于 CTR 预估的方法

尝试改进微信读书个性化推荐:一个基于 CTR 预估的方法

引言

微信读书的书籍个性化推荐包括:

  1. 冷启动用户的书籍推荐,如发现 tab – 新手卡片,为新注册用户推荐书籍,方法参见文章 微信读书冷启动用户书籍推荐初探:一个借助微信用户画像的方法 微信读书冷启动推荐实战:一种基于用户属性的方法
  2. 基于协同过滤(Item-CF / Word2vec)的书籍推荐,如于书城 – 搜索 – 猜你喜欢,为老用户推荐书籍。

为提升 2 的效果,本文设计了一个离线实验,用 CTR 预估方法做书籍个性化推荐,发现效果(准确率、召回率)较现网方法(Word2vec)提升接近一倍。

实验设计

实验对象

随机取 2017 年 1~4 月有加书架行为的 500 名用户。

推荐任务

对每个用户,根据 1~3 月的用户行为,预测 3~4 月被加入书架的 topN 本书,作为推荐结果。topN 取 200。

评估指标

TopN 准确率(查全率):推荐命中次数/推荐次数

TopN 召回率(查准率):推荐命中次数/加书架次数

推荐算法

对照组:Word2vec

微信读书的猜你喜欢使用 Item-CF 和 Word2vec 两种算法,二者转化率相近。在本次实验中用 Word2vec 作为对照组。

Word2vec 是一个语言模型,能够从语料中学习到词汇的向量表示,向量可以用于衡量词汇间的相似度。Word2vec 也可用于个性化推荐,能够学习到物品、用户间的相似度,是一种协同过滤的推荐方法。

具体地说,我们把书籍 ID 当成 word,把每个用户加书架的书籍 ID 序列当成 sentence,把 1~3 月用户的加书架行为当成训练语料,输入 Word2vec,得到每个书籍 ID 的向量表示。两本书籍间的向量距离,可以表示两本书的相似度。

对每个用户,把他 1~3 月读的近 15 本书作为种子,寻找向量距离最相近的 topN 本书,作为推荐结果。

微信读书现网 word2vec 的训练语料把用户感兴趣的书作为 word,而在本次实验中简单处理,把用户加书架的书籍作为 word。

实验组:CTR 预估方法

CTR 预估方法,即利用点击率预测模型,对候选集的 user-item 特征,预测点击率,然后重新排序生成推荐结果。

利用 CTR 预估方法做推荐,一般步骤是:

  1. 生成候选集:利用协同过滤方法(Word2vec)产生的 topN * 3 个推荐结果作为候选集。
  2. 训练点击率预估模型:以 1~4 月非实验对象用户数据作为训练集,根据用户在 1~3 月的微信属性、阅读行为和书籍的特征(详见附录),预测用户在 4月加书架的概率。常见的模型有:LR / GBDT / GBDT+LR / FM 等,可参考 3
  3. 点击率预估,对候选集重排序:对每个用户,用 LR 模型预测他把候选集书籍加入书架的概率,然后排序取 topN 作为推荐结果。

其中,GBDT 算法可以自动选择特征,LR 需要特征筛选以提高准确率,具体过程略,可参考 4

总结

效果 \ 推荐方法

Word2vec(现网)

CTR LR

CTR GBDT

召回率(查全率)

0.061116

0.103632

0.102746

准确率(查准率)

0.001202

0.002614

0.002592

从实验结果可以发现,CTR 预估方法较 Word2vec 方法在推荐效果上有近一倍的提升。

提升的原因,可能是 Word2vec 方法利用单一的用户加书架的信息进行训练;而 CTR 预估方法利用了更丰富信息进行训练,如用户属性、用户行为、书籍属性等,更好地学习用户的阅读偏好,从而作出更精准的推荐。

而且随着更多有效特征的加入,如用户-书籍的点赞评论特征、价格特征、对语音节目偏好特征,CTR 预估方法能够学习到更全面、更具体的用户阅读偏好,以进一步提升个性化推荐效果。

此外,CTR 预估方法也可用于读书电台等听书栏目,通过个性化推荐,提升用户体验。

参考

1 美团推荐算法实践

2 因子分解机FM-高效的组合高阶特征模型

3 CTR预估模型(点击率预测模型)的进化之路

4 特征工程简介

5 Word2Vec-知其然知其所以然

6 LR, 逻辑回归

附录

CTR 预估模型特征

特征

name

用户性别

user_sex

用户年龄

user_age

用户n线城市

user_city

用户性别哑变量

user_sex_0

user_sex_1

user_sex_2

user_sex_3

用户年龄哑变量

user_age_0

user_age_1

user_age_2

user_age_3

user_age_4

用户城市哑变量

user_city_0

user_city_1

user_city_2

user_city_3

user_city_4

用户最近加书架书的标签和此书标签的交集数

past_tag_num

物品被具有某特征用户加书架转化率

item_sex_0_ctr

item_sex_1_ctr

item_sex_2_ctr

item_sex_3_ctr

item_age_0_ctr

item_age_1_ctr

item_age_2_ctr

item_age_3_ctr

item_age_4_ctr

item_city_0_ctr

item_city_1_ctr

item_city_2_ctr

item_city_3_ctr

item_city_4_ctr

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • iOS App 启动必 crash 监控

    刘笑江
  • 微信读书冷启动推荐实战:一种基于用户属性的方法

    刘笑江
  • 微信读书冷启动用户书籍推荐初探:一个借助微信用户画像的方法

    刘笑江
  • 互联网架构为什么要做服务化?

    近期参加一些业界的技术大会,“微服务架构”的话题非常之火,也在一些场合聊过服务化架构实践,最近几期文章期望用通俗易懂的语言聊聊了个人对服务化以及微服务架构的理解...

    架构师之路
  • Discuz x3.4 前台 SSRF 分析

    2018年12月3日,@L3mOn公开了一个Discuz x3.4版本的前台SSRF,通过利用一个二次跳转加上两个解析问题,可以巧妙地完成SSRF攻击链。

    Seebug漏洞平台
  • R︱foreach+doParallel并行+联用迭代器优化内存+并行机器学习算法

    接着之前写的并行算法parallel包,parallel相比foreach来说,相当于是foreach的进阶版,好多东西封装了。而foreach包更...

    素质
  • 干货 | 【深度学习】 在 【推荐算法】 上的应用研究进展

    关键字全网搜索最新排名 【机器学习算法】:排名第一 【机器学习】:排名第一 【Python】:排名第三 【算法】:排名第四 文章来源:知乎 作者:赵鑫 深度学...

    昱良
  • 面向纯新手的TensorFlow.js速成课程

    本课程由CodingTheSmartWay.com出品,在本系列的第一部分中,你将学到:

    AiTechYun
  • 一篇带你看懂Flutter叠加组件Stack

    Stack未定位的子组件大小由fit参数决定,默认值是StackFit.loose,表示子组件自己决定,StackFit.expand表示尽可能的大,用法如下:

    老孟程序员
  • PC市场太萎靡!英特尔不得不和老对手ARM合作

    镁客网

扫码关注云+社区

领取腾讯云代金券