一、业务背景
推荐系统是一种信息过滤系统,用于预测用户对物品的“评分”或“偏好”。
平台运用推荐系统,进行精准流量分发,让用户更快速的获取心仪商品,平台也因此更具有粘性,流量、点击率、联络/购买率形成正向循环。
在平台运营初期,我们推荐场景是猜你喜欢、推荐物件推送、热门推荐,选用的算法为余弦相似算法。
余弦相似算法,即将用户标签化,与商品标签比对,得到余弦相似值,通过值降序排序,将对应商品推荐给适当用户。实践中,我们发现其有天然弱势:用户-商品在低稀疏场景下,无法进行有效的媒合,同时无法进行模型调优,天花板明显。
在探究了业内主流平台:58同城、NETFLIX、AirBnb,我们明确了新的推荐算法方向:基于协同过滤的推荐算法!
二、技术调研
协同过滤:(collaborative filtering)是一种在推荐系统中广泛使用的技术。 该技术通过分析用户或者事物之间的相似性(“协同”),来预测用户可能感兴趣的内容并将此内容推荐给用户。
协同过滤广义划分为三种,我们通过一则简单范例,来快速了解:
第一种:基于用户的协同过滤 若A用户对影视剧《天龙八部》、《大话西游》、《将夜》高评分,D用户对影视剧《将夜》高评分。那么,我们认定A与D用户归属一类,就可以将A用户高评分的《天龙八部》、《大话西游》作品推荐给D用户。
第二种:基于商品的协同过滤 若《将夜》、《大话西游》、《天龙八部》同属仙侠影视剧,归属一类。用户D看过《将夜》,我们就可以将《大话西游》、《天龙八部》作品对用户D进行推荐。
看到这里,小伙伴可能会问了,那第三种是什么呢?
切入正题:第三种:基于用户-商品的协同过滤 将用户归类,与商品归类一并纳入协同考虑,得到我们的预测结果。此模型算法简称:协同过滤ALS推荐算法。
三、协同过滤ALS介绍
协同过滤ALS:对稀疏矩阵进行模型分解,评估缺失项的值,从而得到基本的训练模型。在协同过滤分类方面,ALS算法属于User-Item CF(Collaborative Filtering),兼顾User和Item项,也称为混合CF。
这里我们通过范例,让大家快速了解:
ALS建模推导过程:按照8-2原则,由训练数据集合P1,推导出测试集合P2ˇ,如若P2ˇ≈P2,则证明得到最佳模型。
通过最佳模型预测值,order by score desc limit N,获取前项作推荐
接下来,我们简单了解下ALS算法核心:
注:图示user1与movie1评分0.88,即1 * 0.9 + 0.1 * (-0.2)
现实生活中,users集往往上百千万,items集合也有万计,这样评分矩阵百千万-万计,推导千亿级矩阵运算量极大。
因此,我们使用最小交替二阶乘运算,users-items矩阵,转为users-K与K-items两个小矩阵相乘。
ALS推荐算法核心:基于潜在因子模型的最小二乘算法 & 矩阵分解降低计算复杂度
四、协同过滤ALS实践
业务场景:
每日推荐笋盘列表,之前余弦算法获取数据,在流程不变情况下,应用协同过滤ALS算法
注:图源安居客(侵删),我司业务场景与其类似,仅供参考
业务流程:
-
记录用户详细浏览记录
-
进行业务加权,得到userId - postId - score三维数组
-
通过机器学习ALS建模,预测userId与全物件评分
-
基于推荐和规则,推荐笋盘
基于Spark的ALS推荐算法代码详见:传送门
实践结论:
-
通过喜好与ALS推荐物件对比,发现两者存在较强相似度,大机会被用户点阅
-
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同城