大数据——推荐系统

1 推荐系统的发展

推荐系统是指面对没有需求的用户在进入产品时,要给用户推荐什么东西,现在的APP基本上都会采用推荐系统。
从一开始的1990s开始的门户网站,像Yahoo、搜狐和Hao123等等,都是基于分类目录的网页导航网站,将各个网页聚合在一个网页中,方便用户跳转访问;到了2000s开始,进入搜索引擎,例如百度、google和必应,用户通过有目的的搜索,找到自己的需求网站;而进入2010s开始,进入推荐系统,不需要用户提供明确需求,通过分析用户的历史行为,主动给用户推荐他们感兴趣的东西,典型的APP有:快手、抖音和B站等等,基本上现在的APP都是基于推荐系统。
在这里插入图片描述

2 推荐系统的工作原理

推荐系统是基于以下四种推荐来进行的:

  1. 社会化推荐 让用户的社会关系进行推荐,例如好友推荐,例如分享功能;
  2. 基于内容推荐 根据用户的搜索的东西,了解用户的兴趣;
  3. 基于热点推荐 向用户推荐当前的热点资讯;
  4. 基于协同过滤推荐 向同一类用户推荐东西,拓展用户的边界。

综合应用以上四种推荐,可以高效链接用户和商品,提高用户的活跃度和停留时间,从而提高产品的商业价值。目前最成功的的APP当属抖音。
在这里插入图片描述

3 推荐系统的总体架构

用户服务
用户行为反馈
数据采集
推荐算法

如上图所示,其中用户服务主要是前端界面,数据采集会采用Lambda架构,推荐算法包含召回和排序两个方面。
其中推荐系统的数据采集架构Lambda架构图如下:

实时处理
批处理
数据收集Flume
数据收集Flume
视图存储数据库
Memcached
Redis
Spark streaming
Storm
Flink
Kafka
HBase
HDFS
HDFS
MySQL
Oracle
分布式计算
MapReduce
Spark
数据源

在批处理层,数据不可变,并且能进行任何计算同时可水平扩展;但对于及时性要求不高,可以是几分钟的延迟也可以是几个小时的延迟。
在实时处理层需要低延迟(最好在秒级)同时进行持续计算。
推荐算法架构可以分为召回、排序和策略调整三个主要阶段,其主要架构图如下:

海量Item
召回
候选集合
排序
排序列表
规则
topN
展示到页面

4 推荐算法

推荐算法部分跟业务数据分析中的机器学习过程很类似,包含以下步骤:

  1. 数据处理
  2. 特征工程
  3. 算法模型训练
  4. 产生推荐结果并评估

前两个不具体展开,原理同机器学习数据分析一样,算法模型部分会不同,这里主要会采用协同过滤算法。

协同过滤算法

该算法的核心思想为:物以类聚,人以群分,一般基于两种假设:

  • 基于用户协同过滤:跟你有相同喜好的用户喜欢的东西,你也可能会喜欢。
  • 基于物品系统过滤:你喜欢的东西同性质的东西,你也可能会喜欢。

协同过滤算法主要是两个步骤:

  1. 找出TopN相似的人或者物品:一般通过计算两两的相似度来进行排序。
  2. 根据相似的人或者物品进行推荐:利用TopN的推荐结果,过滤掉已有的东西或者明确不喜欢的东西,就是最后的结果。

以下是基于用户协同过滤步骤:
在这里插入图片描述
基于物品协同过滤步骤:
在这里插入图片描述
上面的相似度计算公式如下(以用户协同过滤为例):
用户1和用户2相同的物品数量:2
用户1物品数量:3
用户2物品数量:3
2/3×2/3 = 0.67×0.67

相似度计算

相似度的计算方法主要包含以下四种:

  • 欧式距离
    欧式距离公式: E = ∑ i = 1 n ( p i − q i ) 2 E = \sqrt{\sum_{i=1}^{n}(p_i - q_i)^2} E=i=1n(piqi)2
    因为相似度的结果是[-1,1]之间,所以进行如下转换: 1 1 + E \frac{1}{1+E} 1+E1

  • 余弦相似度
    在这里插入图片描述

  • Pearson相关系数
    余弦相似度的变形,对向量去中心化,即各自减去向量均值。

  • 杰卡德相似度Jaccard
    在这里插入图片描述

在选择相似度计算方法:

  • 数值型的采用余弦相似度或者Person相关系数;
  • 布尔型数据一般采用杰卡德相似度。

协同过滤算法代码

导入模块

import pandas as pd
import numpy as np
from sklearn.metrics import jaccard_score
from sklearn.metrics.pairwise import pairwise_distances
from pprint import pprint

准备数据


users = ["User1", "User2", "User3", "User4", "User5"]
items = ["Item A", "Item B", "Item C", "Item D", "Item E"]
# ⽤户购买记录数据集,1表示购买,0表示没有购买
datasets = [[1,0,1,1,0],[1,0,0,1,1],[1,0,1,0,0],[0,1,0,1,1],[1,1,1,0,1],
]
df = pd.DataFrame(datasets, columns=items, index=users)
df

在这里插入图片描述

基于用户之间的相似度

# 计算⽤户间相似度
user_similar = 1 - pairwise_distances(df.values,metric='jaccard')
user_similar = pd.DataFrame(user_similar, columns=users, index=users)
print("⽤户之间的两两相似度:")
print(user_similar)

在这里插入图片描述

每个用户相似用户top2

topN_user = {}
for i in user_similar.index:# 取出每列数据,并删除自己的数据df_ = user_similar.loc[i].drop([i])# 按照相似度降序排序df_sorted = df_.sort_values(ascending=False)# 取前两条结果top2 = list(df_sorted.index[:2])topN_user[i] = top2pprint(topN_user)

在这里插入图片描述

过滤掉已购买物品,筛选出其余的东西

# 相似用户的物品,并过滤已购买的东西
rs_results = {}
for user, sim_users in topN_user.items():rs_result = set()for sim_user in sim_users:# 将所有推荐人买过的东西合并在一起rs_result = rs_result.union(set(df.loc[sim_user].replace(0,np.nan).dropna().index))# 过滤掉自己已经买过的东西rs_result -= set(df.loc[user].replace(0,np.nan).dropna().index)rs_results[user] = rs_resultpprint(rs_results)

在这里插入图片描述

基于物品相似度


# 计算物品间相似度
item_similar = 1 - pairwise_distances(df.T.values, metric='jaccard')
item_similar = pd.DataFrame(item_similar, columns=items, index=items)
print("物品之间的两两相似度:")
print(item_similar)

计算物品相似top2物品

topN_items = {}
for i in item_similar.index:# 取出每列数据,并删除自己的数据df_ = item_similar.loc[i].drop([i])# 按照相似度降序排序df_sorted = df_.sort_values(ascending=False)# 取前两条结果top2 = list(df_sorted.index[:2])topN_items[i] = top2pprint(topN_items)

在这里插入图片描述

构建推荐列表

it_results = {}
# 构建推荐结果
for user in df.index: # 遍历所有⽤户it_result = set()for item in df.loc[user].replace(0,np.nan).dropna().index: # 取出每个⽤户当前已购物品列表# 根据每个物品找出最相似的TOP-N物品,构建初始推荐结果it_result = it_result.union(topN_items[item])# 过滤掉⽤户已购的物品it_result -= set(df.loc[user].replace(0,np.nan).dropna().index)# 添加到结果中it_results[user] = it_result
print("最终推荐结果:")
pprint(it_results)

在这里插入图片描述

5 推荐系统评估

好的算法可以实现三方共赢,即用户满足、服务方实现商业价值、内容方获得收益。其中评估的数据也分为直接评估和间接评估,像电影评分或者推荐量表示用户喜欢该内容的属于直接评估,准确性高,但数量少获取成本也较高;更多需要我们间接评估像播放量、点击量、购买量、评论和下载等等,这种方式虽然准确性较低,但数量多成本少。

评估指标

常用的评估指标如下:
• 准确性 • 信任度 • 满意度 • 实时性 • 覆盖率 • 鲁棒性 • 多样性 • 可扩展性 • 新颖性 • 商业⽬标 • 惊喜度 • ⽤户留存

评估方法

  • 问卷调查:成本高
  • 离线评估:只能评估少数指标,与线上真实效果存在偏差
  • 在线评估:灰度发布/AB测试

一般会采用离线评估和在线评估相结合,然后定期做问卷调查。

推荐系统冷启动

推荐系统冷启动本质上是缺失历史数据的情况下,怎么预测用户的偏好。其中可分为用户冷启动、物品冷启动和系统冷启动。

用户冷启动:

即如何为新用户做个性化推荐。一般会尽可能收集用户特征数据:

  1. 收集用户的基本信息:性别、年龄、地域、手机型号、GPS定位和APP列表
  2. 引导用户填写兴趣,即进入APP的兴趣选择
    在这里插入图片描述
  3. 关联其他app的行为数据,例如腾讯产品都会跟QQ和微信进行关联
  4. 新老用户推荐差异:一般新用户推荐热门,老用户推荐个性化。

物品冷启动:

如何将新物品推荐给用户。

  1. 给物品打标签:标签从系统业务中产生,也可以从其他网站爬取。
  2. 利用物品的标签将其推荐给曾喜欢类似物品的用户。

系统冷启动:

⽤户冷启动+物品冷启动。

  1. 系统早期基于内容推荐;
  2. 然后过渡到协同过滤;
  3. 内容推荐和协同过滤结合。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/80460.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Llama 2:开放基础和微调聊天模型

介绍 大型语言模型(llm)作为高能力的人工智能助手,在复杂的推理任务中表现出色,这些任务需要广泛领域的专家知识,包括编程和创意写作等专业领域。它们可以通过直观的聊天界面与人类进行交互,这在公众中得到了迅速而广泛的采用。 法学硕士的能力是显著的考虑到训练的表面上…

产业互联网-跨境电商B2B平台

【背景】:互联网已经进入web3.0时代,产业互联网是互联网关键时点,特别是跨境电商,速卖通,亚马逊,wish Ebay,还有出海的titok,temu等,中国企业或平台走出来也是一条光明大通&#xff…

3.4 网络安全管理设备

数据参考:CISP官方 目录 IDS (入侵检测系统)网络安全审计漏洞扫描系统VPN(虚拟专网)堡垒主机安全管理平台 一、IDS (入侵检测系统) 入侵检测系统(IDS)是一种网络安全设备,用于监测和检测网络中的入侵行…

【TypeScript】交叉类型联合类型(四)

【TypeScript】交叉类型&联合类型(四) 【TypeScript】交叉类型&联合类型(四)一、简介二、交叉类型2.1 交叉类型使用的注意点2.2 基本数据类型交叉2.3 对象类型交叉 三、联合类型四、类型缩减 一、简介 TypeScript 中的交…

坐标转换-使用geotools读取和转换地理空间表的坐标系(sqlserver、postgresql)

前言: 业务上通过GIS软件将空间数据导入到数据库时,因为不同的数据来源和软件设置,可能导入到数据库的空间表坐标系是各种各样的。 如果要把数据库空间表发布到geoserver并且统一坐标系,只是在geoserver单纯的设置坐标系只是改了…

jvm-程序计数器

1、是什么 4 学习路线 类加载器 内存结构方法区 类堆 对象虚拟机栈程序计数器本地方法栈 执行引擎解释器编译器 热点代码 5 程序计数器–作用 java源代码编译蛏二进制字节码 jvm指令。 对所有平台保持一致性。记住下一条jvm指令的执行地址。寄存器,cpu中读取速度…

从零开始学习 Java:简单易懂的入门指南之API、String类(八)

常用API 1.API1.1API概述1.2如何使用API帮助文档 2.String类2.1String类概述2.2String类的特点2.3String类的构造方法2.4创建字符串对象两种方式的区别2.5字符串的比较2.5.1号的作用2.5.2equals方法的作用 2.6用户登录案例2.6.1案例需求2.6.2代码实现 2.7遍历字符串案例2.7.1案…

elementUi select下拉框触底加载异步分页数据

在Element UI中,可以通过监听select下拉框的visible-change事件来实现触底加载下一页的效果。 方式一:利用elementUi的事件 具体步骤如下: 首先,在select组件中设置:visible-change"handleVisibleChange"…

【代码解读】RRNet: A Hybrid Detector for Object Detection in Drone-captured Images

文章目录 1. train.py2. DistributedWrapper类2.1 init函数2.2 train函数2.3 dist_training_process函数 3. RRNetOperator类3.1 init函数3.1.1 make_dataloader函数 3.2 training_process函数3.2.1 criterion函数 4. RRNet类(网络模型类)4.1 init函数4.…

【GitOps系列】如何实施自动化渐进式交付?

文章目录 前言自动渐进式交付概述自动渐进式交付准备创建生产环境创建 AnalysisTemplate访问生产环境安装Prometheus配置 Ingress-Nginx 和 ServiceMonitor验证 Ingress-Nginx 指标 自动渐进式交付实战自动渐进式交付成功自动渐进式交付失败 结语 前言 在实施金丝雀发布的过程中…

无涯教程-Perl - References(引用)

Perl引用是一个标量数据类型,该数据类型保存另一个值的位置,该值可以是标量,数组或哈希。 创建引用 变量,子程序或值创建引用很容易,方法是在其前面加上反斜杠,如下所示: $scalarref \$foo; $arrayref …

Linux下的环境变量

目录 一、环境变量是什么?二、常见的环境变量三、查看环境变量的方法四、和环境变量相关的命令五、命令行参数五、环境变量通常是具有全局属性的 一、环境变量是什么? 环境变量通俗来说就是一种存储系统和应用程序运行需要的配置信息的方式。可以把环境…

OPENCV C++(四)形态学操作+连通域统计

形态学操作 先得到一个卷积核 Mat kernel getStructuringElement(MORPH_RECT,Size(5,5)); 第一个是形状 第二个是卷积核大小 依次为腐蚀 膨胀 开运算 闭运算 Mat erodemat,dilatemat,openmat,closemat;morphologyEx(result1, erodemat, MORPH_ERODE, kernel);morphologyEx…

计算机网络(4) --- 协议定制

计算机网络(3) --- 网络套接字TCP_哈里沃克的博客-CSDN博客https://blog.csdn.net/m0_63488627/article/details/132035757?spm1001.2014.3001.5501 目录 1. 协议的基础知识 TCP协议通讯流程 ​编辑 2.协议 1.介绍 2.手写协议 1.内容 2.接口 …

MVC配置原理

如果你想保存springboot的mvc配置并且还想自己添加自己的配置就用这个。 视图解析器原理,它会从IOC容器里获取配置好视图解析器的配置类里的视图解析器集合, 然后遍历集合,生成一个一个的视图对象,放入候选 视图里,…

Spark、RDD、Hive 、Hadoop-Hive 和传统关系型数据库区别

Hive Hadoop Hive 和传统关系型数据库区别 Spark 概念 基于内存的分布式计算框架 只负责算 不负责存 spark 在离线计算 功能上 类似于mapreduce的作用 MapReduce的缺点 运行速度慢 (没有充分利用内存)接口比较简单,仅支持Map Reduce功能…

微信云开发-数据库操作

文章目录 前提初始化数据库插入数据查询数据获取一条数据获取多条数据查询指令 更新数据更新指令 删除数据总结 前提 首先有1个集合(名称:todos). 其中集合中的数据为: {// 计划描述"description": "learn mini-program cloud service",// 截止日期"…

【Linux】操作系统与冯诺依曼体系——深度解析(软硬件层面)

​ 前言 大家好吖,欢迎来到 YY 滴 Linux系列 ,热烈欢迎! 本章主要内容面向接触过Linux的老铁,从软硬件层面向大家介绍操作系统与冯诺依曼体系, 主要内容含: 欢迎订阅 YY滴Linux专栏!更多干货持…

学习笔记|简单分享一下自建Gravatar镜像

目录 前言 Gravatar 使用 思路 操作 步骤一:注册或登录华为云 步骤二:创建委托账号 步骤三:创建OBS桶 步骤四:数据回源配置 步骤五:配置生命周期规则 步骤六:绑定自定义域名 步骤七&#xff1a…

吉利科技携手企企通,打造集团化数智供应链系统

近日,吉利科技集团有限公司(以下简称“吉利科技”)联合企企通成功召开SRM采购供应链管理项目启动会。企企通与吉利科技高层、项目负责人与团队成员出席此次启动会。 双方将携手在企业供应商全生命周期管理、采购全流程、电子招投标、采购分析…