系统学习《推荐系统》-- 基础架构
一、通用推荐系统框架
- 数据收集
ETL MapReduce Spark Flink
- 数据存储
Hive HBase MySQL Redis
持久化存储收集数据
通常按照数据的冷热,结构化和非结构化等特征分布存储
- 算法召回
热门 协同过滤 内容 画像 替补
将海量的数据集,根据特定算法进行初步的筛选
从数十万降低至数百及数千
- 结果排序
LR SVD DNN GBDT
进行精准排序
针对多个目标进行优化
- 结果应用
猜你喜欢 相似推荐 看了又看
根据不同场景给用户展示最终的推荐结果
推荐常用特征
用户特征
- 自然属性
- 画像特征:兴趣,行为
- 关系特征:人群属性,关注关系,亲密度
物品特征
- 静态特征:分类标签
- 动态特征
- 相关性特征
- 上下文特征
今日头条
二、推荐常用算法
-
基于流行度
最热门 最新 最多人点赞 -
基于内容
相同标签 相同关键词 相似主题 -
基于关联规则
看了A的人也看了B -
近邻推荐
协同过滤:基于用户 基于物品 基于模型
三、结果评估指标
- 准确率 Accuracy
正确预测的样本数/总采样数 - 曲线下面积AUC
不同阈值下,预测结果中真阳性和假阳性之比
AUG = 1 : 完美分类器
AUG > 0.5 : 绝大部分真是分类器的区间
AUG = 0.5 : 基线分类器(扔硬币)
AUG < 0.5 : 对于负样本更加准确,可以转化为正分类器
*ROC指标*
对于输出值连续的分类器(如概率预测),在某一阈值下真阳性(TP)的概率/假阳性(FP)的概率
评估标准
- 满意度:准确率、停留时长、转化率
- 覆盖率:长尾物品是否能被推荐
- 多样性:推荐的物品是否两两不相似、尽可能覆盖多兴趣点
- 新颖性:是否能推荐用户之前没见过的东西
- 惊喜度(很难):推荐的东西和用户历史行为记录都不相似,但是用户很喜欢
- 实时性:根据用户最新的喜好实时更新推荐结果
- 商业目标:是否能达成商业目标如GMV
四、项目构建 (Concrec)
数据源:Kaggle Anime Recommenations Dataset(动漫数据来源:myanimelist.net)
1. 数据预处理
汇总各方数据源 可视化检视数据 对数据进行清洗和转换
2. 召回
根据多种策略对候选集进行初步的召回
3. 排序
针对优化目标进行精准排序
实现特定规则的重排序
4. 接口服务
组装排序结果,并暴露接口供前端消费
5. 前端页面
结果展示 & 用户交互
五、Concrec技术选型
编程语言:python
微服务框架:Flask
前端页面:Vue
数据分析:pandas
大数据处理:spark + Flink(spark为主)
机器学习框架:TensorFlow(谷歌研发)
Spark:分布式大数据处理平台 解决了计算能力和存储能力分布的问题 不同于Hadoop,Spark基于内存计算,速度更快 提供多种编程接口 如SparkSQL,Mllib等
Flink:流式数据(stream)处理平台 以流为核心,高吞吐,低延迟 良好的容错性
TensorFlow:机器学习框架 专注于神经网络、深度学习 在分布式训练、模型可视化等方面十分的出色