2020 推荐系统入门 (2)
推荐算法架构
Match
也就是召回,之前我们已经介绍过,这阶段就是从成千上万的数据中进行筛选,常用算法就是协同过滤,可以是基于用户的,也可以是基于物品的,除此之外还有基于内容和基于隐语义。
Rank
排序阶段就是基于召回过滤出物品进行进一步筛选,缩小范围拟合用户喜好,决定了最终的推荐效果。CTR 预估,所谓 CTR 预估也就是点击率预估,使用 LR 算法,CTR 主要用于估计用户是否会点击某个商品,需要用户点击数据。这里简单说一下如何使用 LR(logistic regression),大家喜欢叫这个逻辑回归,其实这样叫并不专业,专业的 logistics 回归或者多级指数回归吧。点击率预估是我们给用户推荐的物品看用户是否点击然后将物品和是否点击的结果作为样本来训练模型,当然样本数据中会包括许多用户或商品特征。这里LR要是的点击概率,然后通过概率来调整推荐次序
策略调整
重点说一下后两个环节规则和展示,规则就是我们还需根据实际业务指定规则对排序给出物品进行再一次筛选,展示就是用户最终看到我们推荐给他的 TopN 物品。
推荐算法
如何构建推荐模型
- 数据
- 特征工程
- 选择合适机器学习模型
- 预测和反馈
推荐模型设计流程,也需要经历上面几个步骤
数据
图
数据是一切的保证,只有肥沃的土地才能长出好的庄稼,再现代化机器播种和收割也无法取代土地对收成起着决定性的重要地位。
数据来源
首先我们看如何收集数据
- 显式数据
- 评分
- 评论/评价
- 隐式数据
- 历史订单
- 加入购物车
- 页面浏览
- 点击
- 搜索记录
显式收集数据比较好理解,也容易收集。而隐式数据需要我们花一些心思进行设计,如何有效预埋点来采集用户行为。
特征工程
所谓特征工程就是,用一些物品的关键词(标签)将物品明确地表示描述出来,并且便于与其他物品进行区分。这些特征也包括用户对物品描述,也就是将物品抽象为一系列词,这些词用于判断用户是否喜欢该物品
| item\user | tony | jerry | alice | mike | joan |
|---|---|---|---|---|---|---|---|
| AItem | 1 | | .25 | | .25 |
这就是 user-item 表,1 表示 tony 用户对 AItem 评分。
| item\user | tony | jerry | alice | mike | joan |
|---|---|---|---|---|---|---|---|
| AItem | 1 | | .25 | | .25 |
| BItem | | .25 | | | .25 |
| CItem | 1 | | .25 | | |
| DItem | | | .25 | | 1 |
| EItem | | .25 | | | .25 |
基于内容特征提取还会用分词、word2vec
选择合适机器学习模型
这部分内容是随后重点介绍的内容。
预测输出
- cross-sell
- Up-sell
协同过滤
之前我们已经介绍了什么是协同过滤,以及什么是User-based CF 和 Item-based CF,今天重点说一说相似度计算。
图
相似度计算
在协同过滤中相似度的算法选择也是根据实际情况而定,例如如果数据是用户评分,也就是实数情况,
第二种情况就是布尔值
余弦相似度
KNN 中就会用到各种不同方法来计算两个向量间距离,余弦距离就是计算两个向量在空间的夹角,如果他们重合就是 1 垂直就是 0 也就是他们没有相关性,180 就是 -1 ,从而我们可以得到两个向量间的关系。
余弦相似度忽略向量长度,仅考虑向量的角度。所以假设 Alice 给 A 和 B 两个物品的评分分别是 8 和 5 而 Tony 给 A 和 B 物品评分为 1 和 0.5 通过余弦相似度似乎他们很接近,但是实际好像并非如此。
皮尔逊相关系数(Pearson's Correlation)
对余弦相似度优化,对向量去中心化。每一个分量做平均值,5 和 3 然后求均值 6.5 然后分别 8 和 5 去掉均值得到 1.5 和 -1.5 ,然后 1 和 0.5 情况类似 0.75 然后得到去中心化的分别为 0.25 和 -0.25,然后在计算得到值要由于仅用余弦相似度计算两个向量间距离。所谓优于余弦相对度就是因为在皮尔逊相关中考虑到了长度。
如果评分数据是连续数值,适合用余弦相似度和皮尔逊相关系数来计算。
杰卡德相似度
所谓杰卡德相似度是交集除以并集。适合用于杰卡德相似度来计算。