1 什么是混合推荐系统
目前介绍的算法各有利弊:
- 基于内容的推荐方法:一类item的特征描述
- 协同过滤:利用user和item的特定类型的信息转化生成推荐结果
- 社交网络的推荐算法:根据user的相互影响关系进行推荐
所以,希望构建一种混合的推荐系统,结合不同算法的有点,克服缺陷,以提高推荐系统的可用性
1.1 混合推荐系统的意义
1.1.1 海量数据推荐
海量数据推荐系统通常是三个部分构成的:在线系统、近线系统和离线系统。
- 离线系统是传统的个性化推荐系统的主体,定期利用大量历史操作日志进行批处理运算,然后进行特征构造及选取, 最终建立模型并更新。
- 近线系统是将用户产生的事件,利用流式计算得到中间结果,这些中间结果一方面发送给在线部分用于实时更新推荐模型, 另一方面将中间结果存储起来作为备份。
- 在线部分利用离线部分的主体模型并考虑近线部分的实时数据对模型进行增量更新,然后得到实时的推荐模型,进而根据用户的行为来对用户进行实时推荐。
1.1.2 高质量推荐
为了提升推荐系统的推荐精度以及推荐多样性,工业上会对推荐系统进行特征、模型等多层面的融合来构建混合推荐系统。
1.2 混合推荐系统的算法分类
- 加权型混合推荐:就是将不同算法的推荐结果进行加权总和,生成最终的排序结果。权重可以根据用户的反馈进行调整。缺点是在数据稀疏的时候,相关的推荐方法没有办法获得好的效果。
- 切换型混合推荐:根据问题的背景和实际情况在使用不同的推荐技术
- 交叉型混合推荐:将不同推荐算法的生产结果,按照一定的配比融合在一起,打包后集中呈献给用户。主要可能存在的问题是结果组合时的冲突解决问题。
- 特征组合型混合推荐:将不同推荐数据源的特征组合,由一种单一的推荐技术使用。
- 瀑布型混合推荐:采用了过滤的设计思想,把不同的推荐算法看作是不同粒度的过滤器,特别适用于推荐对象与所需推荐的结果数量相差悬殊的时候,一般会把算起来快,区分度低的算法放在前面。
- 特征递增型混合推荐:将前一个推荐方法的输出作为后一个推荐方法的输入,前者会为后者提供某些特征。
- 元层次型混合推荐:将不同的推荐模型在模型层面上进行深度的融合
上面的这些混合推荐方式,又可以分为三类:
- 整体式混合推荐系统:对算法内部进行调整
- 并行式混合推荐系统:对结果进行调整
- 流水线式混合推荐系统:利用多个流程顺序产生推荐结果
2 推荐系统特征处理方法
2.1 特征处理方法
2.1.1 数值特征处理
- 方法一:无量纲处理:
名称 | python代码 | 计算方法 |
---|---|---|
标准化 | sklearn.preprocessing.scale | x ′ = x − x S x^{'}=\frac {x-x} {S} x′=Sx−x |
最大最小标准化 | sklearn.preprocessing.MinMaxScale | x ′ = x − M i n M a x − M i n x^{'}=\frac {x-Min} {Max-Min} x′=Max−Minx−Min |
二次核 | sklearn.preprocessing.normalize | / |
- 方法二:非线性变化:对数变换,主要的作用是解决随着自变量增加,因变量的方差变大的问题;把非线性转化为线性
- 方法三:离散化,主要的优点,减少异常值的影响,易于存储,使得模型更稳定
- 无监督离散化:
- 等宽度离散方法
- 等频分箱法:使得分到每个箱中的数据个数是相同的
- 基于聚类分析的离散化方法:自顶向下的分裂策略和自底向上的合并策略
- 有监督离散化:基于熵的离散化方法和基于卡方的离散化方法
- 无监督离散化:
2.1.2 离散特征处理
- 方法一:One-Hot编码 sklearn.preprocessing.OneHotEncoder()
- 方法二:特征哈希
- 作用:把高维特征向量压缩成低维特征向量
- 针对特征:如id类型特征
- 相比embedding方法更加节约资源
- 方法三:时间特征处理
2.2 特征选择方法
2.2.1 单变量特征选择
方法 | 计算介绍 | 优缺点 |
---|---|---|
皮尔森相关系数 | 两个变量之间协方差与标准差的商 | 衡量的是线性相关性,只对线性关系敏感 |
距离相关系数 | 余弦相似度 | 优点是变量大小不是必须一致的 |
卡方检验 | 通过观察实际值与理论值的偏差程度 | / |
2.2.2 基于模型的特征选择
- 逻辑回归和正则化特征选择
方法 | 介绍 |
---|---|
L1正则 | 弱特征的系数会变成0,导致学习到的模型稀疏 |
L2正则 | 使得系数的取值变得平均,是一个更稳定的模型 |
- 随机森林特征选择
- xgboost特征选择
- 基于深度学习的特征选择
3 常见的预测模型
- 逻辑回归
- 支持向量机
- 梯度提升树
4 排序学习
4.1 基于排序的指标优化
之前的排序是采用均方根作为优化指标,但是发现:
- 排序问题更关心:头部产品能否预测准确,而不是所有产品能否预测准确
- 排序问题更关心:所有商品的相对偏序关系,而不是预测值的绝对值的准确。
经典的排序指标
- MAP(mean reciprocal rank)
- MRR(mean average precision)
- NDCG(Normalized Discounted Cumulative Gain)
D C G @ T = s u m i = 1 T 2 l i − 1 l o g ( 1 − i ) DCG@T=sum_{i=1}^T \frac {2^{l_i}-1} {log(1-i)} DCG@T=sumi=1Tlog(1−i)2li−1
其中l是系统给出的前T个商品的评分,分子表示推荐对应的i的收益,坟墓是位置的偏置。计算完了以后需要进行归一化,也就是除以一个理想的最好的DCG的结果
4.2 L2R算法的三种情形
4.2.1 point-wise
- 基于单个样本的优化
- 问题:模型的分数是和用户无关的;对头部商品不敏感,无法有效容忍某个用户或者某个商品的偏置
4.2.2 pair-wise
- 对偏序对的二分类问题
- 问题:评价指标与损失函数不一致,因为NDGG不是连续的不能直接拿来做损失函数,lambda系列的算法就是为了解决这个问题
4.2.3 list-wise
- 基于整个排序列表的优化