推荐系统实战第01课 推荐系统简介

本文介绍了推荐系统的基本概念、兴起原因、构建方法,并深入探讨了解决信息过载的策略。讲解了推荐系统的主要评估指标,如准确性、覆盖率、多样性,并通过Bandit算法阐述了开发与探索(Exploitation & Exploration)的重要性。此外,还讨论了推荐系统的实践应用,如冷启动问题的解决方案以及推荐系统的发展趋势。
摘要由CSDN通过智能技术生成

推荐系统介绍(what why where)

Industrial Recommendation System

1、推荐系统是什么(what)

•分类⽬录(1990s):覆盖少量热门⽹站。Hao123 Yahoo
•搜索引擎(2000s):通过搜索词明确需求。Google Baidu
•推荐系统(2010s):不需要⽤户提供明确的需求,通过分析⽤ 户的历史⾏为给⽤户的兴趣进⾏建模,从⽽主动给⽤户推荐能 够满⾜他们兴趣和需求的信息。
•2020s?

**一种数学定义: **

  • 设C为全体用户集合 n

  • 设S为全部商品/推荐内容集合

  • 设u是评判把 s i s_i si推荐 c i c_i ci的好坏评判函数

  • 推荐是对于c∈C,找到s∈S,使得u最大,即

∀ c ∈ C , s c ′ = argmax ⁡ ( u ( c , s ) ) s ∈ S \forall c \in C, s^{\prime}_{c}=\operatorname{argmax}(u(c, s)) s \in S cC,sc=argmax(u(c,s))sS

  • 部分场景下是通过TOP N推荐

搜索 vs 推荐的区别

在这里插入图片描述

搜索引擎热力图和长尾理论图

在这里插入图片描述

2、为什么推荐系统越来越火?(why)


推荐系统存在的前提:

  • 信息过载
  • ⽤户需求不明确

推荐系统的⽬标:

  • ⾼效连接⽤户和物品,发现长尾商品
  • 留住⽤户和内容⽣产者,实现商业⽬标

推荐系统意义

1、对用户而言:

找到好玩的东西

帮助决策

发现新鲜事物

2、对商家而言:

  • 提供个性化服务,提高信任度和粘性

  • 增加营收 …

3、推荐系统需要做怎么做? (How)

根据用户的:

a) 历史行为

b) 社交关系

c) 兴趣点

d) 所处上下文环境

e) …

去判断用户的当前需求/感兴趣的item

4、**寻求解决信息过载的思路 **

  • 之前解决相信过载的方式有:

分类导航页 => 雅虎

搜索引擎 => 谷歌,必应,度娘

  • 但是,人总是期望计算机尽量多地服务

    我们不愿意去想搜索词

    希望系统自动挖掘自己的兴趣点

    希望系统能给我们惊喜

  • 推荐系统就在这种环境下产生的。目前有今日头条,虾米音乐,电商猜你喜欢,豆瓣…等等。

5、推荐系统结构

在这里插入图片描述

推荐系统评估

在这里插入图片描述

一、评估指标

•准确性 •满意度 •覆盖率 •多样性 •新颖性 •惊喜度
•信任度 •实时性 •鲁棒性 •可扩展性 •商业⽬标 •⽤户留存

用户的偏好的显示反馈和隐式反馈(Explicit vs Implicit)

在这里插入图片描述

1、准确性

**①准确性(学术界) **

评分预测:

打分系统 设 r u i r_{u i} rui为用户u对物品i的实际评分, r ^ u i \hat{r}_{u i} r^ui为预测分,则有如下误差判定标准

  • 均方根误差

R M S E = ∑ u , i ∈ T ( r u i − r ^ u i ) 2 ∣ T ∣ \mathrm{RMSE}=\sqrt{\frac{\sum_{u, \mathrm{i} \in T}\left(r_{ui}-\hat{r}_{u i}\right)^{2}}{|T|}} RMSE=Tu,iT(ruir^ui)2

  • 平均绝对误差

M A E = ∑ u , i ∈ T ∣ r u i − r ^ u i ∣ ∣ T ∣ \mathrm{MAE}=\frac{\sum_{u, i \in T}\left|r_{u i}-\hat{r}_{u i}\right|}{|T|} MAE=Tu,iTruir^ui
topN推荐

设R(u)为根据训练建立的模型在测试集上的推荐, T(u)为测试集上用户的选择

准确率 vs 召回率

Recall ⁡ = ∑ u ∈ U ∣ R ( u ) ∩ T ( u ) ∣ ∑ u ∈ U ∣ R ( u ) ∣ \operatorname{Recall}=\frac{\sum_{u \in U}|R(u) \cap T(u)|}{\sum_{u \in U}|R(u)|} Recall=uUR(u)uUR(u)T(u)

Recall ⁡ = ∑ u ∈ U ∣ R ( u ) ∩ T ( u ) ∣ ∑ u ∈ U ∣ T ( u ) ∣ \operatorname{Recall}=\frac{\sum_{u \in U}|R(u) \cap T(u)|}{\sum_{u \in U}|T(u)|} Recall=uUT(u)uUR(u)T(u)

②准确性(⼯业界)

在这里插入图片描述

2、覆盖度

1、覆盖率
C o v e r a g e = ∣ ⋃ u ∈ U R ( u ) ∣ ∣ I ∣ Coverage=\frac{\left|\bigcup_{u \in U} R(u)\right|}{|I|} Coverage=IuUR(u)

在这里插入图片描述

2、信息熵

衡量一个事件的不确定性的。候选的越多,说明不确定性越强。
H = − ∑ i = 1 n p ( i ) log ⁡ p ( i ) H=-\sum_{i=1}^{n} p(i) \log p(i) H=i=1np(i)logp(i)

在这里插入图片描述

当信息熵越大,推荐的越是均匀,照顾的长尾越大的。

3、基尼系数

衡量财产分配平稳程度的指标(判断分配平等程度的指标)。

设实际收入分配曲线和收入分配绝对平等曲线之间的面积为A,实际收入分配曲线右下方的面积为B。并以A除以(A+B)的商表示不平等程度。

G = 1 n − 1 ∑ j = 1 n ( 2 j − n − 1 ) p ( i j ) G=\frac{1}{n-1} \sum_{j=1}^{n}(2 j-n-1) p\left(i_{j}\right) G=n11j=1n(2jn1)p(ij)

p ( i j ) 表 示 通 过 流 行 度 排 序 第 j 小 的 商 品 出 现 的 次 数 的 概 率 。 p\left(i_{j}\right)表示通过流行度排序第j小的商品出现的次数的概率。 p(ij)j

在这里插入图片描述

在这里插入图片描述

4、分层流量占比

3、多样性

优秀的推荐系统能保证推荐结果列表中物品的丰富性(两 两之间的差异性)。
设s(i,j)表示物品i 和 j之间的相似度,多样性表示如下:
D i v e r s i t y ( R ( u ) ) = 1 − ∑ i , j ∈ R ( u ) , i ≠ j s ( i , j ) 1 2 ∣ R ( u ) ∣ ( ∣ R ( u ) ∣ − 1 ) Diversity(R(u))=1-\frac{\sum_{i, j \in R(u), i \neq j} s(i, j)}{\frac{1}{2}|R(u)|(|R(u)|-1)} Diversity(R(u))=121R(u)(R(u)1)i,jR(u),i̸=js(i,j)

D i v e r s i t y = 1 ∣ U ∣ ∑ u ∈ U Diversity ( R ( u ) ) Diversity=\frac{1}{|U|} \sum_{u \in U} \text {Diversity}(R(u)) Diversity=U1uUDiversity(R(u))

多样性&新颖性&惊喜性

  • 多样性:推荐列表中两两物品的不相似性。(相似性如何度量?)

  • 新颖性:未曾关注的类别、作者;推荐结果的平均流⾏度

  • 惊喜性:历史不相似(惊)但很满意(喜)

  • 信任度:提供可靠的推荐理由

  • 实时性:实时更新程度

往往需要牺牲准确性

  • 使⽤历史⾏为预测⽤户对某个物品的喜爱程度
  • 系统过度强调实时性

4、Exploitation & Exploration (开发与探索)

什么是Bandit算法(为选择而生)

我们会遇到很多选择的场景。上哪个大学,学什么专业,去哪家公司,中午吃什么等等。这些事情,都让选择困难症的我们头很大。那么,有算法能够很好地对付这些问题吗?

当然有!那就是Bandit算法。

Bandit算法来源于历史悠久的赌博学,它要解决的问题是这样的[1]:

一个赌徒,要去摇老虎机,走进赌场一看,一排老虎机,外表一模一样,但是每个老虎机吐钱的概率可不一样,他不知道每个老虎机吐钱的概率分布是什么,那么每次该选择哪个老虎机可以做到最大化收益呢?这就是多臂赌博机问题(Multi-armed bandit problem, K-armed bandit problem, MAB)。

怎么解决这个问题呢?最好的办法是去试一试,不是盲目地试,而是有策略地快速试一试,这些策略就是Bandit算法。

这个多臂问题,推荐系统里很多问题都与它类似:

  1. 假设一个用户对不同类别的内容感兴趣程度不同,那么我们的推荐系统初次见到这个用户时,怎么快速地知道他对每类内容的感兴趣程度?这就是推荐系统的冷启动。
  2. 假设我们有若干广告库存,怎么知道该给每个用户展示哪个广告,从而获得最大的点击收益?是每次都挑效果最好那个么?那么新广告如何才有出头之日?
  3. 我们的算法工程师又想出了新的模型,有没有比A/B test更快的方法知道它和旧模型相比谁更靠谱?
  4. 如果只是推荐已知的用户感兴趣的物品,如何才能科学地冒险给他推荐一些新鲜的物品?

•Exploitation:选择现在可能最佳的⽅案

•Exploration:选择现在不确定的⼀些⽅案,但未来可能会有⾼收益 的⽅案。

在做两类决策的过程中,不断更新对所有决策的不确定性的认知,优化 长期的⽬标函数

在这里插入图片描述

推荐系统里面有两个经典问题:EE和冷启动。前者涉及到平衡准确和多样,后者涉及到产品算法运营等一系列。

Multi-armed bandit problem

在这里插入图片描述

  1. 推荐系统领域,领域有两个经典问题:EE问题和用户冷启动问题。[2]

​ EE问题:上面提到过的exploit-explore问题;比如已知某用户对A产品感兴趣,那么在大多数时间要给他推送A的链接才能赚钱,这就是exploit;但是为了赚更多的钱,就需要知道他还对哪些产品感兴趣,那么在有些时候就可以尝试一下给他推送B,C,D,E等选择看用户的反应,这就是explore

用户冷启动问题:面对新用户时如何用尽量少的次数,猜出用户的大致兴趣。[2]

  1. 临床测试场景clinical trials

​ 假设有一批用于治疗某种疾病的新药需要进行测试,目标肯定是在尽量少的测试体上进行尝试,找出效果最好的那一种然后应用于其他病患。由于测试需要等待并观察,尽早找出效果最好的药物类型也有利于救助更多的病患;同时,该方法也有助于减少承受不良药物副作用的测试体数量/增加病患存活率。[3]

**Bandit算法-原理 **
  • Epsilon-Greedy:以1-epsilon的概率选取当前收益最⼤大的臂, 以epsilon的概率随机选取⼀一个臂。(缺点是后续观察后就找到规律了,就不必要继续以当前概率探索)

  • Upper Confidence Bound:均值越⼤大,标准差越⼩小,被选中的 概率会越来越⼤大

x ‾ j ( t ) + 2 ln ⁡ t T j , t \overline{x}_{j}(t)+\sqrt{\frac{2 \ln t}{T_{j, t}}} xj(t)+Tj,t2lnt

(首先探索出了一些一定的价值,大概知道每个老虎机的收益率,Upper的意思是认为我们后面探索的是会更好。右边的上量表示总共试过多少,右边下量表示这个老虎机试过多少次,当前老虎机探索的越多,给的机会就越小。目的是相对均匀的选择老虎机去做探索,不让一个老虎机做过多的探索。)

  • Thompson Sampling:每个老虎机臂维护一个beta(wins, lose)分布, 每次⽤用现有的beta分布产⽣生⼀一个随机数,选择随机数最⼤大的臂继续做探索。探索完之后,去更新beta分布。

区别:

Upper Confidence Bound(UCB):对于一个老虎机来讲,每次返回的策略结果一样。从收敛的角度来讲,ucb比较慢。

Thompson Sampling(汤普森采样):有一定的随机策略,他是靠分布产生一个随机数,他不是一个确定的事件。只是满足一个分布。从收敛的角度来讲,汤普森采样实现简单,计算量复杂度小。

Bandit算法代码实现
import numpy as np
import matplotlib.pyplot as plt
import math
number_of_bandits=10
number_of_arms=10
number_of_pulls=10000
epsilon=0.3
min_temp = 0.1
decay_rate=0.999

def pick_arm(q_values,counts,strategy,success,failure):
	global epsilon
	if strategy=="random":
		return np.random.randint(0,len(q_values))

	if strategy=="greedy":
		best_arms_value = np.max(q_values)
		best_arms = np.argwhere(q_values==best_arms_value).flatten()
		return best_arms[np.random.randint(0,len(best_arms))]


	if strategy=="egreedy" or strategy=="egreedy_decay": 
		if  strategy=="egreedy_decay": 
			epsilon=max(epsilon*decay_rate,min_temp)
		if np.random.random() > epsilon:
			best_arms_value = np.max(q_values)
			best_arms = np.argwhere(q_values==best_arms_value).flatten()
			return best_arms[np.random.randint(0,len(best_arms))]
		else:
			return np.random.randint(0,len(q_values))

	if strategy=="ucb":
		total_counts = np.sum(counts)
		q_values_ucb = q_values + np.sqrt(np.reciprocal(counts+0.001)*2*math.log(total_counts+1.0))
		best_arms_value = np.max(q_values_ucb)
		best_arms = np.argwhere(q_values_ucb==best_arms_value).flatten()
		return best_arms[np.random.randint(0,len(best_arms))]

	if strategy=="thompson":
		sample_means = np.zeros(len(counts))
		for i in range(len(counts)):
			sample_means[i]=np.random.beta(success[i]+1,failure[i]+1)
		return np.argmax(sample_means)


fig = plt.figure()
ax = fig.add_subplot(111)
for st in ["greedy","random","egreedy","egreedy_decay","ucb","thompson"]:

	best_arm_counts = np.zeros((number_of_bandits,number_of_pulls))

	for i in range(number_of_bandits):
		arm_means = np.random.rand(number_of_arms)
		best_arm = np.argmax(arm_means)

		q_values = np.zeros(number_of_arms)
		counts = np.zeros(number_of_arms)
		success=np.zeros(number_of_arms)
		failure=np.zeros(number_of_arms)

		for j in range(number_of_pulls):
			a = pick_arm(q_values,counts,st,success,failure)

			reward = np.random.binomial(1,arm_means[a])
			counts[a]+=1.0
			q_values[a]+= (reward-q_values[a])/counts[a]

			success[a]+=reward
			failure[a]+=(1-reward)
			best_arm_counts[i][j] = counts[best_arm]*100.0/(j+1)
		epsilon=0.3


	ys = np.mean(best_arm_counts,axis=0)
	xs = range(len(ys))
	ax.plot(xs, ys,label = st)

plt.xlabel('Steps')
plt.ylabel('Optimal pulls')

plt.tight_layout()
plt.legend()
plt.ylim((0,110))
plt.show()        

Bandit算法-效果

在这里插入图片描述

Bandit算法的应用

•兴趣探索

•冷启动探索(新用户来了,不晓得他的兴趣爱好)

•LinUCB:加⼊特征信息。⽤User和Item的特征预估回报及其置信区 间,选择置信区间上界最⼤的Item推荐,观察回报后更新线性关系的参 数,以此达到试验学习的⽬的。

•COFIBA:bandit结合协同过滤

•基于⽤户聚类挑选最佳的Item(相似⽤户集体决策的Bandit);

•基于⽤户的反馈情况调整User和Item的聚类(协同过滤部分)

EE实践

•兴趣扩展:相似话题,搭配推荐

•⼈群算法:userCF、⽤户聚类

•Bandit算法

•graph walking

•平衡个性化推荐和热门推荐⽐例

•随机丢弃⽤户⾏为历史

•随机扰动模型参数

眼前的苟且&远⽅的⽥野

  • 探索伤害⽤户体验,可能导致⽤户流失

  • 探索带来的长期收益(留存率)评估周期长,KPI压⼒⼤

  • 如何平衡实时兴趣和长期兴趣?

  • 如何平衡短期产品体验和长期系统⽣态?

  • 如何平衡⼤众⼜味和⼩众需求?

  • 如何避免劣币趋势良币?

二、评估方法

  • 问卷调查:成本⾼

  • 离线评估:

​ 只能在⽤户看到过的候选集上做评估,且跟线上真实效果存在偏差

​ 只能评估少数指标

​ 速度快,不损害⽤户体验

  • 在线评估:A/B testing

(离线只能评估比较少的指标,比如说准确率,覆盖度,多样性。 但是留存率等只能在在线评估。)

实践:离线评估和在线评估相结合,定期做问卷调查。

AB testing

单层实验:以某种分流的⽅法(随机、uid%100),给每个实验组分配⼀定的流量。每个实验组配置不同的实验参数。

在这里插入图片描述

•只能⽀持少量实验,不利于迭代

•实验之间不独⽴,策略之间可能相互影响

•分流⽅式不灵活

多层重叠实验框架

•保留单层实验框架易⽤,快速的优点的同时,增加可扩展性,灵活 性,健壮性。

•核⼼思路:将参数划分到N个⼦集,每个⼦集都关联⼀个实验层, 每个请求会被N个实验处理,同⼀个参数不能出现在多个层中。

在这里插入图片描述

分配函数(流量在每层被打散的⽅法)如何设计?如何保 证每层流量分配的均匀性和正交性?

•如何处理实验样本的过滤(eg只选取某个地区的⽤户、只 选取新⽤户)?

•分配多⼤的流量可以使实验置信?

《Overlapping Experiment Infrastructure: More, Better, Faster Experimentation》

在这里插入图片描述

推荐系统实践

如何解决冷启动问题

推荐系统的冷启动问题

•⽤户冷启动:如何为新⽤户做个性化推荐

•物品冷启动:如何将新物品推荐给⽤户(协同过滤)

•系统冷启动:⽤户冷启动+物品冷启动 本质是推荐系统依赖历史数据,没有历史数据⽆法预测⽤户偏好

⽤户冷启动

1.收集⽤户特征

•⽤户注册信息:性别、年龄、地域

•设备信息:定位、⼿机型号、app列表

•社交信息、推⼴素材、安装来源

在这里插入图片描述

2.制造粗粒度选项,引导⽤户填写兴趣

在这里插入图片描述

3.transfer learning:使⽤其它站点的⾏为数据。例如腾讯视频 &QQ⾳乐,今⽇头条&抖⾳

在这里插入图片描述

4.新⽼⽤户推荐策略的差异

  • 新⽤户在冷启动阶段更倾向于热门排⾏榜,⽼⽤户会更加需要长尾 推荐(参考Performance of recommender algorithms on top-n recommendation tasks,Netflix@RecSys2010)

  • 推荐候选的代表性&多样性

  • Explore Exploit⼒度

  • 使⽤单独的特征和模型预估

  • 保护⽤户体验(物品冷启动探索、⼴告、推送)

物品冷启动
  • 物品冷启动时会遇到哪些问题?
  • 如何做物品冷启动推荐?和⽤户冷启动策略有哪些异同?
  • 如何评估物品冷启动推荐的质量及带来的收益?
  • 实验传统的ab testing⽅法是否能够验证冷启动优化效果?

⼯业界推荐系统架构

推荐系统架构

在这里插入图片描述

推荐系统架构-Netflix,2013

在这里插入图片描述

推荐系统架构-Taobao,2015

在这里插入图片描述
推荐系统架构-YouTube,2016

在这里插入图片描述

用户历史消息、特征、模型、候选池等

召回仓、预估仓、重排仓等。

推荐系统发展阶段

•1.0:关联规则、热门推荐等统计⽅法

•2.0:矩阵分解、协同过滤等ML⽅法,离线计算推荐列表

•3.0:召回 + learning to rank重排序

•4.0:召回&排序实时化

•5.0:end2end深度学习,⼀切皆embedding

•6.0:智能化推荐系统

推荐系统的发展趋势

在这里插入图片描述

学术界&⼯业界区别

在这里插入图片描述

推荐系统学习规划

在这里插入图片描述

推荐系统学习资料

在这里插入图片描述

  • 《Item-Based Collaborative Filtering Recommendation Algorithms 》

  • 《 Factorization Meets the Neighborhood: a Multifaceted Collaborative Filtering Model 》

  • 《Matrix factorization techniques for recommender systems》

⼯业实践学习资料

•Facebook实践:recommending items to more than a billion people

•Quora是如何做推荐的? •《Real-time Personalization using Embeddings for Search Ranking at Airbnb》 •《Deep Neural Networks for YouTube Recommendations》

•《Wide & Deep Learning for Recommender Systems》

•《Ad Click Prediction: a View from the Trenches

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值