引言
微信读书 App 中的书籍推荐系统,逐渐开始在运营活动中(每周热榜、新手卡片)使用,尝试从技术侧帮助运营侧提高转活动的化率。
对微信读书的活跃用户,我们根据其读书时长、点评书等用户行为,做书籍推荐。对微信读书新增用户,由于缺少用户行为数据,无法使用这种方法做推荐,此类问题常被称为推荐系统冷启动问题。
然而,我们发现微信用户画像,比如基础属性(年龄、城市、性别等)和公众号阅读兴趣等,与微信读书用户的阅读兴趣相关。借助微信用户画像进行书籍推荐,准确率较随机推荐提升约 1 倍。
分析建模
如何评估微信用户画像与微信读书用户阅读兴趣是否相关?
我们建立预测模型进行初步验证,步骤如下:
- 准备数据集:微信读书n本热门书籍,把热门书架加入书架的用户及其微信画像
- 预测模型:把问题化简成 n 分类的问题,输入微信画像、输出预测书1 ~ n
- 假设:微信读书用户加书架的行为,可以反映其阅读偏好
- 在数据集基础上建立的预测模型,可以衡量用户画像和加书架的相关性。结合假设,该模型可以衡量用户画像和阅读偏好的相关性
如果有相关性,那么我们得到的预测模型就可以用于冷启动书籍推荐。
分析数据
微信用户画像基础属性
基础属性包括:城市,年龄,性别等。
其中,城市属性可以转化为 n 线城市作为属性。猜测城市、年龄、性别等属性,与阅读偏好的关联较大。
微信用户画像扩展属性:公众号阅读兴趣
包括一级分类如:如育儿、饮食、旅游、金融财经、时尚美容、养生培训等。
其中,每个用户每月都有一个阅读兴趣记录,由偏好类别、权重组成。比如:用户A 201608 养生健康0.8 教育培训0.1 时尚美容0.1。
选取四本书,抽取加书架的用户,统计这些用户的公众号阅读兴趣的人数累加和,按人数降序排列结果如下:
《囚徒健身:用失传的技艺练就强大的生存实力 保罗·威德 谷红岩译》
兴趣标签 | 有对应兴趣标签的人数 |
---|---|
健身运动 | 388 |
养生健康 | 259 |
教育培训 | 238 |
旅游 | 235 |
… | … |
《逆龄养颜术(我最想要的美肌能量书)》梅切尔·沙尔
兴趣标签 | 有对应兴趣标签的人数 |
---|---|
养生健康 | 652 |
教育培训 | 437 |
时尚美容 | 418 |
旅游 | 306 |
… | … |
《信用卡,从卡奴到卡神(简七理财010)》简七理财
兴趣标签 | 有对应兴趣标签的人数 |
---|---|
金融财经 | 400 |
养生健康 | 385 |
教育培训 | 338 |
旅游 | 272 |
… | … |
《轻断食:正在横扫全球的瘦身革命》 麦克尔·莫斯利 咪咪·史宾赛
兴趣标签 | 有对应兴趣标签的人数 |
---|---|
养生健康 | 784 |
教育培训 | 505 |
旅游 | 491 |
时尚美容 | 305 |
… | … |
猜测此属性与阅读偏好强相关。
特征选取
我们分别取微信用户基础属性、公众号阅读兴趣属性、基础属性+阅读兴趣作为特征。
准备数据集
- 随机选取 n 本书,找出曾经加书架的用户(采样确保每本书籍用户数相等,且每个用户书架只有 n 本中的一本),获取用户的微信画像属性 x
- 将 n 本书编号 1~n
- 提取出标签(书籍编号) y 和属性 x,把样本按 6:4 划分成训练集、测试集
模型选择
使用 Spark mllib 提供的 Random Forest 算法。
在该模型中,输入用户画像 x,输出预测书籍标签 y。
选择 Random Forest 的原因有:
-
训练结果为决策树,容易解读和实现
-
能够处理高维数据,不用做特征选择,适应性强
将数据划分为训练集和测试集,使用训练集训练模型,最后得到随机森林,即多颗决策树。树节点是决策的过程,树叶是决策结果;权衡多颗树的决策,最终得到模型的预测结果。取其中一颗举为例:
1 | 例 Tree0: |
训练模型
将数据集按 6:4 分为训练集、测试集。
使用训练集训练模型,得到模型参数w。
测试模型
在测试集上,使用模型和参数 w,验证准确率。
验证模型
实验数据集来自加书架的用户属性,假设『微信读书用户加书架的行为,可以反映其阅读偏好』,模型准确率高,可以推论微信画像与微信读书用户阅读偏好相关。
然而,我们希望这个推荐算法能够用与运营活动的书籍推荐,因此需要进行 A/B 测试,来验证随机森林推荐算法的有效性。
效果评估
在 4 本书选择 1 本进行推荐的任务中:
(随机推荐准确率的期望是25%)
特征 | 训练集 | 测试集 | 测试集准确率 |
---|---|---|---|
微信基础属性 | 7907 | 5432 | 39.96% |
公众号阅读兴趣 | 8038 | 5301 | 32.35% |
微信基础属性+公众号阅读兴趣 | 8025 | 5314 | 38.85% |
在 10 本书选择 1 本进行推荐的任务中:
(随机推荐准确率的期望是 10%)
特征 | 训练集 | 测试集 | 测试集准确率 |
---|---|---|---|
微信基础属性 | 19175 | 12662 | 19.00% |
公众号阅读兴趣 | 19126 | 12711 | 16.38% |
微信基础属性+公众号阅读兴趣 | 19137 | 12700 | 19.00% |
在 20 本书选择 1 本进行推荐的任务中:
(随机推荐准确率的期望是 5%)
特征 | 训练集 | 测试集 | 测试集准确率 |
---|---|---|---|
微信基础属性 | 34131 | 23112 | 11.04% |
公众号阅读兴趣 | 34275 | 22968 | 9.13% |
微信基础属性+公众号阅读兴趣 | 34319 | 22924 | 10.78% |
在 50 本书选择 1 本进行推荐的任务中:
(随机推荐准确率的期望是 2%)
特征 | 训练集 | 测试集 | 测试集准确率 |
---|---|---|---|
微信基础属性 | 79575 | 52704 | 5.02% |
公众号阅读兴趣 | 79424 | 52855 | 4.66% |
微信基础属性+公众号阅读兴趣 | 79188 | 53091 | 5.30% |
在 100 本书选择 1 本进行推荐的任务中:
(随机推荐准确率的期望是 1%)
特征 | 训练集 | 测试集 | 测试集准确率 |
---|---|---|---|
微信基础属性 | 127688 | 85649 | 2.86% |
公众号阅读兴趣 | 128132 | 85205 | 2.54% |
微信基础属性+公众号阅读兴趣 | 127927 | 85410 | 3.05% |
在 200 本书选择 1 本进行推荐的任务中:
(随机推荐准确率的期望是 0.5%)
特征 | 训练集 | 测试集 | 测试集准确率 |
---|---|---|---|
微信基础属性 | 146692 | 97783 | 2.81% |
公众号阅读兴趣 | 146142 | 98333 | 2.62% |
微信基础属性+公众号阅读兴趣 | 146641 | 97834 | 2.94% |
总结
根据结果,我们发现微信基础属性与微信读书用户阅读偏好的相关性最高,尤其是年龄、性别、n 线城市、好友数等属性。
其次,用户公众号阅读兴趣与推荐书籍相关,但没有基础属性的显著,可作为推荐策略的考量因素。
在 n 本书推荐 1 本的任务中,结合微信用户画像的先验信息推荐,与随机推荐相比,准确率增加约一倍。
因此,对于微信读书的冷启动用户,运营侧可以考虑结合微信用户画像进行运营活动的书籍推荐(人为设定推荐规则或者使用随机森林),以提高转化率。应用随机森林进行推荐时,需做 A/B 测试以验证模型的有效性。
引用
TODO