目录标题 推荐系统简介 1、推荐系统目的 2、推荐系统的应用 3、推荐系统的基本思想 4、推荐系统的数据分析 5、推荐系统的分类 6、推荐算法简介 6.1 基于人口统计学的推荐算法(基于用户数据) 6.2 基于内容的推荐算法(基于内容信息) 6.3 基于协同过滤的推荐算法(基于行为数据) 6.4 混合推荐 7、推荐系统评测 推荐系统算法详解 1、基于人口统计学的推荐 2、基于内容的推荐算法 相似度 特征工程 数值型特征处理 类别型特征处理 时间型特征处理 统计型特征处理 推荐系统常见反馈数据 基于 UGC 的推荐 TF-IDF TF-IDF对基于 UGC 推荐的改进 3、基于协同过滤的推荐算法 基于近邻的协同过滤 基于协同过滤的推荐优缺点 基于模型的协同过滤思想 LFM 降维方法 —— 矩阵因子分解 模型的求解 —— 损失函数 模型的求解算法 —— ALS 求解过程:(以固定Q,求解P为例) Sparrow Recsys项目介绍
推荐系统简介
1、推荐系统目的
信息过载
让用户更快更好的获取到自己需要的内容 内容更快更好的推送到喜欢它的用户手中 让网站(平台)更有效的保留用户资源 即好的推荐系统–让三方共赢
2、推荐系统的应用
个性化音乐、电影视频、社交网络、个性化阅读、证券理财、个性化旅游、个性化广告 音乐听完后很可能再听,但买过的商品看过的电影就少量会重复
3、推荐系统的基本思想
利用用户和物品的特征信息,给用户推荐那些具有用户喜欢的特征的物品。 利用用户喜欢过的物品,给用户推荐与他喜欢过的物品相似的物品。 利用和用户相似的其他用户,给用户推荐那些和他们兴趣爱好相似的其他用户喜欢的物品 知你所想,精准推送 – 利用用户和物品的特征信息,给用户推荐那些具有用户喜欢的特征的物品。 物以类聚 – 利用用户喜欢过的物品,给用户推荐与他喜欢过的物品相似的物品。 人以群分 – 利用和用户相似的其他用户,给用户推荐那些和他们兴趣爱好相似的其他用户喜欢的物品
4、推荐系统的数据分析
在作推荐之前需要先收集到的数据:
针对用户的信息:个人信息、喜好标签(勾选的感兴趣标签)、上下文信息(浏览记录) 物品的信息:内容信息、分类标签、关键词 行为数据(交互):点击、浏览、收藏、购买、评分、评价、打标签(反映用户对物品或者信息的偏好) — 显示的用户反馈:用户对物品的评分,或者对物品的评论等(业务系统的数据库中获取) — 隐式的用户反馈:点击、浏览、收藏、购买等(通过埋点,日志获取)
5、推荐系统的分类
根据实时性分类 – 离线推荐 – 实时推荐
根据推荐是否个性化分类 – 基于统计的推荐(热门推荐) – 个性化推荐
根据推荐原则分类 – 基于相似度的推荐(人以群分) – 基于规则的推荐(即按照经验,程序员更偏爱格子衬衫) – 基于模型的推荐(训练数据找规律)
根据数据源分类 – 基于人口统计学的推荐(基于用户数据,作用户画像) – 基于内容的推荐(基于内容信息) – 基于协同过滤的推荐(基于行为数据)
6、推荐算法简介
6.1 基于人口统计学的推荐算法(基于用户数据)
6.2 基于内容的推荐算法(基于内容信息)
6.3 基于协同过滤的推荐算法(基于行为数据)
协同过滤(Collaborative Filtering,CF) 利用类似这样矩阵来判断: U1、U2、、用户 I1、I2、、物品 中间数据:评分
分成两大类:基于近邻和基于模型
基于近邻的协同过滤 – 基于用户(User-CF)的协同过滤 – 基于物品(Item-CF)的协同过滤 基于模型的协同过滤 – 奇异值分解(SVD) – 潜在语义分析(LSA) – 支撑向量机(SVM)
CF特点:
基于内容(Content based,CB)主要利用的是用户评价过的物品的内容特征,当拿不到物品信息时,CF可以解决,只要用户与物品进行了交互,日志中就会保存有用户行为数据 缺点:得到的矩阵不完整的,是稀疏矩阵。比较依赖历史交互数据,对新上线的物品不够友好 注:在矩阵中,若数值为0的元素数目远远多于非0元素的数目,并且非0元素分布没有规律时,则称该矩阵为稀疏矩阵
User-CF 基于用户的协同过滤: 与基于用户数据的对比:没有用户的基本信息,依据的是用户的行为相似度
Item-CF 基于物品的协同过滤: 与基于物品数据的对比:没有物品的基本信息,依据的是物品被喜欢群体的相似度 物品A与物品C都被用户ab喜欢,所有推测物品AC是相似的,便可以把物品C推荐给喜欢物品A的用户
6.4 混合推荐
实际网站的推荐系统往往都不是单纯只采用了某一种推荐的机制和策略,往往是将多个方法混合在一起,从而达到更好的推荐效果。比较流行的组合方法有:
加权混合 – 用线性公式(linear formula)将几种不同的推荐按照一定权重组合起来,具体权重的值需要在测试数据集上反复实验,从而达到最好的推荐效果 切换混合 – 切换的混合方式,就是允许在不同的情况(数据量,系统运行状况,用户和物品的数目等)下,选择最为合适的推荐机制计算推荐 不同的情况选择不同的推荐系统 分区混合 – 采用多种推荐机制,并将不同的推荐结果分不同的区显示给用户 分层混合 – 采用多种推荐机制,并将一个推荐机制的结果作为另一个的输入,从而综合各个推荐机制的优缺点,得到更加准确的推荐 推荐方式一层一层的串起来,前一层推荐的结果作为后一层推荐的输入。因此更加复杂
7、推荐系统评测
目标:让三方共赢(用户、平台、商家)
7.1 推荐系统实验方法
离线实验 – 通过体制系统获得用户行为数据,并按照一定格式生成一个标准的数据集 – 将数据集按照一定的规则分成训练集和测试集 – 在训练集上训练用户兴趣模型,在测试集上进行预测 – 通过事先定义的离线指标评测算法在测试集上的预测结果 离线:利用的是历史数据,完全离线。 特点:方便,可能和实际的上线结果有差距
用户调查 – 用户调查需要有一些真实用户,让他们在需要测试的推荐系统上完成一些任务;我们需要记录他们的行为,并让他们回答一些问题;最后进行分析 特点:真实,可以获取用户的主观感受。需要真实用户,花费成本
在线实验 – AB测试 类似实验组,对照组。把用户随机分成两组,进入不同的推荐系统,考察指标测评哪种推荐系统更优 特点:真实,需要长周期才能收集到用户的行为结果
结论:混合使用 先离线实验,中间作基本的用户调查(少范围的),上线前作AB测试,同时收集用户数据,判断最优的推荐系统
7.2 推荐系统评测指标
• 预测准确度(重要但不好衡量) • 用户满意度(问卷调查) • 覆盖率(并非总是推荐的最热门物品,希望冷门小众物品也能推荐到对应用户) • 多样性(信息茧房,针对用户来说) • 惊喜度(挖掘出用户自己都不知道的喜爱物品) • 信任度 • 实时性 • 健壮性 • 商业目标(点击率、转化率等)
推荐准确度评测
评分预测: – 很多网站都有让用户给物品打分的功能,如果知道用户对物品的历史评分,就可以从中学习一个兴趣模型,从而预测用户对新物品的评分 – 评分预测的准确度一般用均方根误差(RMSE)或平均绝对误差(MAE)计算 预测评分与真实评分之间的误差 Top-N推荐 – 网站提供推荐服务时,一般是给用户一个个性化的推荐列表,这种推荐叫做Top-N推荐 – Top-N推荐的预测准确率一般用精确率(precision)和召回率(recall)来度量
准确率、精确率和召回率 假如某个班级有男生80人,女生20人,共计100人,,目标是找出所有女生。现在某人挑选出50个人,其中20人是女生,另外还错误的把30个男生也当作女生挑选出来了。怎么评估他的行为? 定义TP、FN、FP、TN四种情况:
准确率(accuracy) 正确分类的item数与总数之比:A=(20+50)/100 = 70%
精确率(precision) 所有被检索的item中,应该被检索到的item比例:P=20/(20+50) = 40% 推荐的50个物品中,其中20个是用户真正需要的
召回率(recall) 所有检索到的item占所有“应该检索到的item”的比例:R=20/(20+0)=100% 总共应该推荐20个物品,我全部推荐出来了。另一方面说明工作作的还不错
推荐系统算法详解
常用推荐算法分类:
基于人口统计学的推荐与用户画像(基于用户数据) 基于内容的推荐与特征工程(基于物品数据) 基于协同过滤的推荐(基于交互行为数据)
1、基于人口统计学的推荐
基于人口统计学的推荐机制 (Demographic-based Recommend at ion) 是一种最易于实现的推荐方法,它只是简单的根据系统用户的基本信息发现用 户的相关程度,然后将相似用户喜爱的其他物品推荐给当前用户 对于没有明确含义的用户信息(比如登录时间、地域等上下文信息),可以 通过聚类等手段,给用户打上分类标签 对于特定标签的用户,又可以根据预设的规则(知识)或者模型,推荐出对 应的物品 用户信息标签化的过程—般又称为用户画像 (User Profiling)
缺点:用户的个人信息很难收集,让用户填选问卷很影响用户体验。可以让用户选择喜爱标签
用户画像
用户画像 (User Profi le) 就是企业通过收集与分析消费 者社会属性、生活习惯、消费行为等主要信息的数据之后,完美地抽象出—个用户的商业全貌作 是企业应用大数据技术的基本方式 用户画像为企业提供了足够的信息基础,能够帮助企业快速找到精准用户群 体以及用户需求等更为广泛的反馈信息 作为大数据的根基,它完美地抽象出—个用户的信息全貌,为进—步精准、快速地分析用户行为习惯、消费习惯等重要信息,提供了足够的数据基础
喜马拉雅,支付宝中发出的个人的年度汇报,也属于简单的用户画像
2、基于内容的推荐算法
Content-based Recommendations (CB) 根据推荐物品或内容的元数据, 发现物品的相关性,再基于用户过去的喜好记录,为用户推荐相似的物品。 通过抽取物品内在或者外在的特征值,实现相似度计算。 – 比如—个电影, 有导演、演员、用户标签UGC、 用户评论、时长、风格等等, 都可以算是特征。 将用户 (user) 个人信息的特征(基于喜好记录或是预设兴趣标签) , 和物品 (it em) 的特征相匹配, 就能得到用户对物品感兴趣的程度 – 在—些电影、音乐、图书的社交网站有很成功的应用,有些网站还请专业的人员对物品进行基因编码/打标签(PGC).PGC–专家生产内容
相似度
推荐算法里的相似度评判,采用的是余弦相似度,而不是欧氏距离
数据源,内容分析,特征工程处理,特征学习器(构建模型)
特征工程
特征:作为判断条件的一组输入变量,是做出判断的依据 目标:判断和预测的目标,模型的输出变量,是特征所产生的结果
特征 (feat ure) : 数据中抽取出来的对结果预测有用的信息。 特征的个数就是数据的观测维度 特征工程是使用专业背景知识和技巧处理数据,使得特征能在机器学习算法上发挥更 好的作用的过程 特征工程—般包括特征清洗(ETL、采样、清洗异常样本),特征处理和特征选择 特征按照不同的数据类型分类,有不同的特征处理方法 – 数值型 – 类别型 – 时间型 – 统计型
总结:特征工程,是建模之前的数据处理。以便更好地建模
数值型特征处理
用连续数值表示当前维度特征,通常会对数值型特征进行数学上的处理,主要是归一化和离散化 ,又称为幅度调整/归一化
归一化:
特征与特征之间应该是平等的,区别应该体现在特征内部 栗子:房屋价格3000000~15000000(万),住房面积40 ~300(平方米)。由于本身的量级不同导致产生的效果不同。
离散化:
等步长VS等频:
等步长不一定有效,非常便宜非常贵的商品少量,大部分商品在中间价格 等频精准,但不固定。商品价格变化就需要重新划分切割
类别型特征处理
类别型数据本身没有大小关系,需要将它们编码为数字,但它们之间不能有预先设定的大小关系,因此既要做到公平,又要区分开它们,那么直接开辟多个空间。
One-Hot 编码/哑变量所做的就是将类别型数据 平行地展开, 也就是说, 经过One-Hot 编码/哑变量后, 这个特征的空间会膨胀
时间型特征处理
时间型特征即可以做连续值,又可以做离散值 连续值:持续时间、间隔时间等 离散值:一天中哪个时间段、星期几、工作日
统计型特征处理
加减平均:商品价格高于平均价格多少,用户在某个品类下消费超过多少。 分位线:商品属于售出商品价格的分位线处。 次序性:商品处于热门商品第几位。 比例类:电商中商品的好/中/差评比例。
特征处理后得到的数据,可以训练模型了。得到推荐结果后,还会收集反馈数据
推荐系统常见反馈数据
显示:明显地反映用户偏好 隐式:间接反映用户偏好
基于 UGC 的推荐
用户用标签来描述对物品的看法,所以用户生成标签(UGC)是联系用户和物品的纽带
一个用户打标签数据集,三元组的集合来表示(用户,物品,标签)-(u,i,b) 一个最简单的算法:
统计每个用户最常用的标签 – 用户对此标签感兴趣 对于每个标签,统计被打过这个标签次数最多的物品 – 物品与标签的关联度 对于一个用户,首先找到他常用的标签,找到具有这些标签的最热门的物品,推荐给他 所以用户u对物品i的兴趣公式:
p(u,i)越大,即用户对此物品越可能感兴趣
问题:倾向于给热门标签(例:“大片”,“搞笑”等)、热门物品(打标签的人数多)。这样会导致,热门标签+热门物品会霸榜,推荐的个性化、新颖度会降低 如何解决?— 对热门词汇进行一定程度的惩罚:TF-IDF
TF-IDF
词频-逆文档频率 (Term Frequency-Inverse Document Frequency, TF-IDF) 是一种用于资讯检索与文本挖掘的常用加权技术 TF-1DF 是—种统计方法, 用以评估—个字词对于一个文件集或一个语料库中的其中一份文件的重要程度。字词的重要性随着它在文件中出现的次数成正比增加,但同时会 随着它在语料库中出现的频率成反比下降 语料库:所有文章
TFIDF = TF x IDF
TF-1OF 的主要思想是: 如果某个词或短语在—篇文章中出现的频率 TF 高, 并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分能力,适合用来分类 TF-1OF 加权的各种形式常被搜索引 擎应用, 作为文件与用户查询之间相关程度的度量或评级
词频(Term Frequency,TF):
指某一个给定的词语在该文件中出现的频率。(归一化)
逆向文件频率(Inverse Document Frequency,IDF):
是一个词语普遍性重要性的度量。某一特定词语的IDF,可以由总文档数除以包含该词语的文档数目,再取对数 加1是防止为0
TF-IDF对基于 UGC 推荐的改进
改进:加入对热门标签和热门物品的惩罚项 代码
3、基于协同过滤的推荐算法
协同过滤(Collaborative Filtering,CF) 利用类似这样矩阵来判断: U1、U2、、用户 I1、I2、、物品 中间数据:评分
分成两大类:基于近邻和基于模型
基于近邻的协同过滤 – 基于用户(User-CF)的协同过滤 – 基于物品(Item-CF)的协同过滤 基于模型的协同过滤 – 奇异值分解(SVD) – 潜在语义分析(LSA) – 支撑向量机(SVM)
CF特点:
相比与CB,CF数据更好获得,只要用户与物品进行了交互,日志中就会保存有用户行为数据 缺点:得到的矩阵不完整的,是稀疏矩阵。比较依赖历史交互数据,对新上线的物品不够友好
基于近邻的协同过滤
User-CF 基于用户的协同过滤: 与基于用户数据的对比:没有用户的基本信息,依据的是用户的行为相似度
在—般的应用中是采用计算 " K- 近邻"的算法; 基于这 K 个邻居的历史偏好信息,为当前用户进行推荐 Item-CF 基于物品的协同过滤: 与基于物品数据CB的对比:没有物品的基本信息,依据的是物品被喜欢群体的相似度
同样是协同过滤,基于用户VS基于物品:
电商、电影、音乐网站,用户数量远多于物品数量 — 物品固定,用Item-CF 新闻网站,物品数量大于用户数量----用户群体稳定,用User-CF 推荐策略的选择其实和具体的应用场景有很大的关系
基于协同过滤的推荐优缺点
保证了推荐的个性度,新颖度 不需要对物品或者用户进行严格建模 基于历史数据,“冷启动”问题 用户历史偏好使用的是稀疏矩阵,会对计算带来问题
基于模型的协同过滤思想
对物品和用户同时打标签,有显性特征时(比如用户标签、物品分类标签)我们可以直接匹配做出推荐; 没有时,可以根据已有的偏好数据,去发掘出隐藏的特征,这需要用到隐语义模型 (LFM)
基于近邻的推荐VS基于模型的推荐:
基千近邻的推荐是在预测时直接使用已有的用户偏好数据,通过近邻数据来预测对新物品的偏好(类似分类) 而基千模型的方法,是要使用这些偏好数据来训练模型,找到内在规律,再用模型来做预测(类似回归)
隐语义模型(LFM)
揭示隐藏的特征,类特征可能是无法直接用语言解释描述的,类似“玄学” 栗子:啤酒尿布
通过矩阵分解进行降维分析
偏好矩阵往往是稀疏的;这就需要对原始数据做降维处理 分解之后的矩阵,方便寻找用户和物品的隐藏特征
隐语义模型的实例
基于概率的隐语义分析(pLSA) 隐式迪利克雷分布模型(LDA) 矩阵因子分解模型(基于奇异值分解的模型,SVD)
LFM 降维方法 —— 矩阵因子分解
假设用户物品评分矩阵为R,现在有m个用户,n个物品 目的:发现k个隐类,找到两个矩阵P和Q,使得这两个矩阵的乘积等于R,即R可以分解为两个低维度矩阵相乘
应该有—些隐藏的因素,影响用户的打分,比如电影:演员、题材、年代…甚至不— 定是人直接可以理解的隐藏因子 找到隐荡因子, 可以对 user 和 item 进行关联 ,就可以推测用户是否会喜欢某—部未看过的电影
得到 P和 Q的乘积R不再是稀疏的,之前 R中没有的项也可以由 P,Q 的乘积算出,这就得到了一个预测评分矩阵
如果得到的预测评分矩阵 R 与原评分矩阵 R 在已知评分位置上的值都近似 , 那么我们认为它们在预测位置上的值也是近似的
模型的求解 —— 损失函数
矩阵分解得到的预测评分矩阵R,与原评分矩阵R在已知的评分项上可能有误差,目标是找到一个使得误差最小的分解方式。
损失函数:选择平方损失函数,并加入正则化项,以防止过拟合 P特征值k越多,P,Q越复杂,越可能过拟合,所以正则化项选择P,Q的平方项和
模型的求解算法 —— ALS
现在,矩阵因子分解问题已经转化为一个优化问题。 求解P,Q,使得目标损失函数取最小值
交替最小二乘法(Alternating Least Squares,ALS) ALS思想:由于两个矩阵P和Q都未知,且通过矩阵乘法耦合在一起,为了使得他们解耦,可以先固定Q,把P当作变量,通过损失函数最小化求出P,这是一个经典的最小二乘问题,再反过来固定求出的P,把Q当作变量,求解出Q。交替执行,直到误差满足阈值条件,或者到达迭代上限。
求解过程:(以固定Q,求解P为例)
每个用户u的特征是相互独立的,当Q独立时,用户特征向量Pu与其他用户特征向量无关,所以求P可以单独求Pu,再拼接 优化目标minC转化为: 第一步先不管Q 的平方和,第二步把u求和提出来,现在目标变为:求每一个用户特征向量Pu,使得L(Pu)取最小值 L(Pu)中唯一可变的是Pu,求最小值----偏导 求偏导,向量积是个数,所以可以转置也可以交换位置,然后提取Pu,单位矩阵
展开: 逆矩阵 Ru指u那一行的评分 P公式得到了,但其中含有逆不好求,可以用梯度下降法进行迭代 梯度下降法: 不要让偏导等于0,而是作为偏导值,乘以步长,做迭代。
代码
Sparrow Recsys项目介绍
王喆老师的RecSysServer项目 查看项目运行结果 数据:来⾃于电影开源数据集movieLens。
movies.csv(电影基本信息数据):包含了电影ID(movieId)、电影名(title)、发布年份以及电影类型(genres)等基本信息。 ratings.csv(⽤⼾评分数据):ratings表包含了⽤⼾ID(userId)、电影ID(movieId)、评分(rating)和时间戳(timestamp)等信息。 links.csv(外部链接数据):links表包含了电影ID(movieId)、IMDB对应电影ID(imdbId)、TMDB对应电影ID(tmdbId)等信息。其中,imdb和tmdb是全球最⼤的两个电影数据库。 为你推荐⻚。是⽤⼾的个性化推荐⻚⾯。这个⻚⾯会根据⽤⼾的点击、评价历史进⾏个性化推荐。