十分钟入门机器学习 - 讲透ALS推荐算法

1,859 阅读5分钟

一、业务背景

推荐系统是一种信息过滤系统,用于预测用户对物品的“评分”或“偏好”。

平台运用推荐系统,进行精准流量分发,让用户更快速的获取心仪商品,平台也因此更具有粘性,流量、点击率、联络/购买率形成正向循环。

在平台运营初期,我们推荐场景是猜你喜欢、推荐物件推送、热门推荐,选用的算法为余弦相似算法。

余弦相似算法,即将用户标签化,与商品标签比对,得到余弦相似值,通过值降序排序,将对应商品推荐给适当用户。实践中,我们发现其有天然弱势:用户-商品在低稀疏场景下,无法进行有效的媒合,同时无法进行模型调优,天花板明显。

在探究了业内主流平台:58同城、NETFLIX、AirBnb,我们明确了新的推荐算法方向:基于协同过滤的推荐算法!

二、技术调研

协同过滤:(collaborative filtering)是一种在推荐系统中广泛使用的技术。 该技术通过分析用户或者事物之间的相似性(“协同”),来预测用户可能感兴趣的内容并将此内容推荐给用户。

协同过滤广义划分为三种,我们通过一则简单范例,来快速了解:

1.png

第一种:基于用户的协同过滤 若A用户对影视剧《天龙八部》、《大话西游》、《将夜》高评分,D用户对影视剧《将夜》高评分。那么,我们认定A与D用户归属一类,就可以将A用户高评分的《天龙八部》、《大话西游》作品推荐给D用户。

2.png

第二种:基于商品的协同过滤 若《将夜》、《大话西游》、《天龙八部》同属仙侠影视剧,归属一类。用户D看过《将夜》,我们就可以将《大话西游》、《天龙八部》作品对用户D进行推荐。

看到这里,小伙伴可能会问了,那第三种是什么呢?

切入正题:第三种:基于用户-商品的协同过滤 将用户归类,与商品归类一并纳入协同考虑,得到我们的预测结果。此模型算法简称:协同过滤ALS推荐算法

三、协同过滤ALS介绍

协同过滤ALS:对稀疏矩阵进行模型分解,评估缺失项的值,从而得到基本的训练模型。在协同过滤分类方面,ALS算法属于User-Item CF(Collaborative Filtering),兼顾User和Item项,也称为混合CF。

这里我们通过范例,让大家快速了解:

3.png

ALS建模推导过程:按照8-2原则,由训练数据集合P1,推导出测试集合P2ˇ,如若P2ˇ≈P2,则证明得到最佳模型。

4.png

通过最佳模型预测值,order by score desc limit N,获取前项作推荐

接下来,我们简单了解下ALS算法核心:

5.png

注:图示user1与movie1评分0.88,即1 * 0.9 + 0.1 * (-0.2)

现实生活中,users集往往上百千万,items集合也有万计,这样评分矩阵百千万-万计,推导千亿级矩阵运算量极大。

因此,我们使用最小交替二阶乘运算,users-items矩阵,转为users-K与K-items两个小矩阵相乘。

ALS推荐算法核心:基于潜在因子模型的最小二乘算法 & 矩阵分解降低计算复杂度

四、协同过滤ALS实践

业务场景:

每日推荐笋盘列表,之前余弦算法获取数据,在流程不变情况下,应用协同过滤ALS算法

8.png

注:图源安居客(侵删),我司业务场景与其类似,仅供参考

业务流程:

  1. 记录用户详细浏览记录

  2. 进行业务加权,得到userId - postId - score三维数组

  3. 通过机器学习ALS建模,预测userId与全物件评分

  4. 基于推荐和规则,推荐笋盘

基于Spark的ALS推荐算法代码详见传送门

实践结论:

7.png

  1. 通过喜好与ALS推荐物件对比,发现两者存在较强相似度,大机会被用户点阅

  2. ALS推荐相较于余弦集合,七日日均点击比率及联络比率,均有明显成长

五、经验分享

实践经验:

  • 业务数据长尾效应,对数据源要做适当清洗

  • 模型调整:useritem仅支持int类型、显性与隐性评级设定

  • 推荐结果集,再结合余弦、embeding做规划优化效果更佳

本文从业务推荐背景切入,将推荐算法由余弦相似重构为ALS建模,效果良好,因此将ALS算法,以及实践结果和经验分享给大家。

同时,推荐系统视平台大小不同,从特征提取,模型矫正,架构优化(离线、在线、实时)等多维度都需要深入挖掘,才能得到更好的推荐效果。

机器学习之ALS算法犹如一把钥匙,打开了我对技术新世界的大门,让我看到基于数学的矩阵分解,与业务的推荐场景能够如此完美契合,希望大家可以保持探索欲,秉承技术热忱,发现更多精彩!

参考资料:

《Collaborative Filtering - RDD-based API》| Spark

《Spark ALS API Reference》| Spark

《PySpark Collaborative Filtering with ALS》 | Snehal Nair

《Embedding技术在房产推荐中的应用》| 58同城