协同过滤 CF(Collaborative Filtering)
隐语义模型 LFM(Latent Factor Model)
交替最小二乘法 ALS(Alternating Least Square)
词频-逆文本频率 TF-IDF(term frequency–inverse document frequency)
ETL是将业务系统的数据经过抽取、清洗转换之后加载到数据仓库的过程,目的是将企业中的分散、零乱、标准不统一的数据整合到一起,为企业的决策提供分析依据
概述
推荐系统的目的
推荐系统是大数据最好的落地应用之一
亚马逊被业内称为“推荐系统之王”
亚马逊20%-30%的销售额是来自于推荐系统
推荐系统的基本思想
推荐系统的数据分析
显式的反馈(评分、评价、收藏、购买),业务系统肯定会存到相应的数据库里面
隐式反馈(点击、浏览),从日志里面去收集——大数据的数据采集、日志采集、数据清洗
推荐系统的分类
根据数据源分类
- 基于人口统计学的的推荐与用户画像
- 基于内容的推荐与特征工程
- 基于协同过滤的推荐
基于统计的推荐是非个性化的推荐,大家看到的内容都是一样的
基于模型的推荐就是用一个机器学习问题了。我现在还不知道所有的数据里面有什么规律、有什么规则,我要去设计一个模型训练它,训练好了之后就知道有什么规律了,然后根据这个规律去做推荐
根据数据源的分类就是依据我们的数据来源有三部分。如果主要基于的数据是用户的基本数据的话,就叫基于人口统计学的推荐(统计人口的基本信息,然后可以贴上标签,之后可以进一步做用户画像)。主要基于物品的话就叫基于内容的推荐。基于协同过滤的推荐的来源就是行为数据。
基于知识推荐就是比如大家都知道程序员就喜欢电子类的设备多一些这样
推荐算法简介
CF矩阵是稀疏矩阵
CF很依赖于历史数据,一开始没有历史数据的时候就不能用CF了,这时用其他推荐方法,取长补短
我们做的就是用分区混合
推荐系统评测
用离线实验去做测评的时候,可能都是自己去定义一些指标、定义一些标准。但如果我们需要用户的点击率会提升多少,用户的购买率会提升多少、用户的好评率等指标,这些我们离线实验是拿不到的
AB测试就是相当于实际上线的系统做了一个导游分流,分成了2套推荐系统
所以我们都是三种方法综合在一起使用。首先先离线实验,快速测试大量的算法,先找出表现还不错的算法,先保证在我离线数据集上,跑出来的效果比我之前的算法要好。然后做用户调查,目标是为了保证用户体验不比之前差,不要换了新的推荐系统反而用户却不想用了。然后真正上线做AB测试,原有系统和新的系统同时使用,同时来做推荐、收集用户数据,跑一段时间之后,假如说确实它的评测指标真正优于之前的系统,那就做一个切换
推荐系统算法详解
文本信息就是例如新闻、文章之类的,提取它们特征的方法
特征工程
特征和特征之间应该是平等的,如果要是有不平等的话,我们应该在模型里面,给一个不同的系数,来调整它们的差别。
可能不同的特征因为单位的问题或者本身的原因数值上差别较大,有的特征取值范围在0-9,有的在100-1000之间,这样就可能由于数值的幅度而导致原本是平等的两个特征产生了差别
做特征处理(特征工程)完了之后得到的数据就可以去训练模型了
一个词在其他文档中出现的次数越多,也就是更多的文档都包含这个词,那么Ni就会越大,那整个的IDFi就会越小,相当于乘起来对它做了一个惩罚
基于协同过滤的推荐
比如用户对电影的评分不只能够体现出用户个体对这个物品的兴趣,还能够表达出物品本身的质量。这个物品本身的质量可能就是基于内容的方法没办法表现出来的。一个电影,我们根据它的标题、它的导演、它的拍摄时间是看不出它是个好片还是差片的,通过用户的评价却可以得到
Alice和Cary比较像,对黑客帝国和龙胆虎威评分都较低,而对阿甘正传和机器人总动员评分都较高,由此Alice对泰坦尼克号打了5分,Cary应该也会喜欢泰坦尼克号,应该给Cary推荐
通过Alice和Cary的选择相似就得出应该推荐泰坦尼克号给Cary的结论,不需要有什么严格的理论支持,只要它好用就可以了
对应相乘相当于这两个向量做了一个点积,能够代表这两个向量的一个相关的程度。这两个向量越相关,就代表用户的特征和电影的特征就匹配起来了
那么,矩阵该怎么去求解呢
预测的偏差就是损失
TF-IDF算法示例
LFM梯度下降算法实现
项目系统设计
四大模块
统计推荐模块、离线推荐模块、实时推荐模块、基于内容的推荐模块
教训:一定要和视频用的软件的版本保持一致,因为你项目配置文件的用的是它的内容,也自然是它的版本
保存到ES主要是为了方便做查询
做模糊查询
协同过滤是基于历史数据
基于内容推荐模块成功
相似度为什么能成1,因为我们的内容信息只有类别,有些电影的类别标签是完全一样的