1. 推荐算法的作用
在应用系统中,推荐算法发挥着越来越重要的作用:
- 提升用户体验:精准推送感兴趣内容,减少查找成本
- 挖掘潜在需求:发现用户未主动关注的喜好品类
- 提高平台收益:增加内容播放、商品下单、停留时长
- 盘活存量资源:冷门内容/商品获得曝光机会
- 实现千人千面:差异化分发,适配不同用户偏好
- 增强用户粘性:贴合喜好留住用户,提升回访率
2. 推荐算法应用举例
案例:用户看视频时,系统应该怎样利用用户的观看历史,为用户推荐下一个视频?
2.1. 已有数据
已有用户看过的视频编号及停留时间,如下:
| 用户 | 视频1 | 视频2 | 视频3 | 视频4 | 视频5 |
|---|---|---|---|---|---|
| 用户1 | 4 | 0 | 3 | 2 | 0 |
| 用户2 | 0 | 4 | 0 | 5 | 0 |
| 用户3 | 5 | 0 | 2 | 0 | 3 |
| 用户4 | 3 | 2 | 0 | 3 | 4 |
- 横坐标:有的视频编号;
- 纵坐标:用户编号;
- 值:用户看视频停留的时间;
2.2. 问题
对于用户1,已经看过:视频1,视频3,视频4,分别观看时间为:4,3,2分钟;
接下来系统应该推荐视频2 还是视频5?
3. 余弦相似度
3.1. 余弦相似度计算公式
sim(A,B)=A⋅B∣∣A∣∣×∣∣B∣∣\text{sim}(A,B)=\frac{A\cdot B}{||A||\times||B||}sim(A,B)=∣∣A∣∣×∣∣B∣∣A⋅B
或者
cos(a,b)=∑i=1naibi∑i=1nai2⋅∑i=1nbi2\cos(\boldsymbol{a},\boldsymbol{b})=\frac{\sum_{i=1}^n a_ib_i}{\sqrt{\sum_{i=1}^n a_i^2}\cdot\sqrt{\sum_{i=1}^n b_i^2}}cos(a,b)=∑i=1nai2 ⋅∑i=1nbi2 ∑i=1naibi
- A⋅BA\cdot BA⋅B:向量点积
- ∣∣A∣∣、∣∣B∣∣||A||、||B||∣∣A∣∣、∣∣B∣∣:向量模长
值域:[−1, 1]\boldsymbol{[-1,\ 1]}[−1, 1]
- 111:向量完全同向,喜好高度一致
- 000:向量相互垂直,喜好无关联
- −1-1−1:向量完全反向,喜好截然相反
3.2. 实例演示
设用户行为向量(影视标签:科幻/喜剧/悬疑)
用户A:[5,1,2][5,1,2][5,1,2]
用户B:[4,2,1][4,2,1][4,2,1]
用户C:[1,5,4][1,5,4][1,5,4]
直观看用户A和用户B 都喜看科幻(分别为5,4),不喜欢戏剧和悬疑(得分都比较低),用户C喜看喜剧和悬疑(分别为5,4),不喜欢科幻(得分1)。所以用户A和用户B的相似度更高,
3.2.1. 计算公式
cosθ=x1x2+y1y2+z1z2x12+y12+z12⋅x22+y22+z22\cos\theta=\frac{x_1x_2+y_1y_2+z_1z_2}{\sqrt{x_1^2+y_1^2+z_1^2}\cdot\sqrt{x_2^2+y_2^2+z_2^2}}cosθ=x12+y12+z12 ⋅x22+y22+z22 x1x2+y1y2+z1z2
设向量
A=(5,1,2)A=(5,1,2)A=(5,1,2),B=(4,2,1)B=(4,2,1)B=(4,2,1),C=(1,5,4)C=(1,5,4)C=(1,5,4)
3.2.2. 计算用户A与用户B的余弦相似度
点积:5×4+1×2+2×1=245\times4+1\times2+2\times1=245×4+1×2+2×1=24
A模长:52+12+22=30\sqrt{5^2+1^2+2^2}=\sqrt{30}52+12+22 =30
B模长:42+22+12=21\sqrt{4^2+2^2+1^2}=\sqrt{21}42+22+12 =21
cosθAB=2430×21≈0.956\cos\theta_{AB}=\frac{24}{\sqrt{30}\times\sqrt{21}}\approx0.956cosθAB=30 ×21 24≈0.956
3.2.3. 计算用户A与用户C的余弦相似度
点积:5×1+1×5+2×4=185\times1+1\times5+2\times4=185×1+1×5+2×4=18
C模长:12+52+42=42\sqrt{1^2+5^2+4^2}=\sqrt{42}12+52+42 =42
cosθAC=1830×42≈0.507\cos\theta_{AC}=\frac{18}{\sqrt{30}\times\sqrt{42}}\approx0.507cosθAC=30 ×42 18≈0.507
3.2.4. 结论
- A与B相似度:≈0.95\approx0.95≈0.95,喜好高度相近,可互相推荐影片
- A与C相似度:≈0.51\approx0.51≈0.51,喜好差异偏大
- A、B相似度更高,喜好更贴合。
4. 推荐算法计算过程
4.1. 步骤1:计算用户之间的相似度,得到相似度矩阵
向量
u1=(4,0,3,2,0)u_1=(4,0,3,2,0)u1=(4,0,3,2,0)
u2=(0,4,0,5,0)u_2=(0,4,0,5,0)u2=(0,4,0,5,0)
u3=(5,0,2,0,3)u_3=(5,0,2,0,3)u3=(5,0,2,0,3)
u4=(3,2,0,3,4)u_4=(3,2,0,3,4)u4=(3,2,0,3,4)
-
用户1&用户2
cos=4×0+0×4+3×0+2×5+0×042+02+32+22+02⋅02+42+02+52+02=102941≈0.290\cos=\frac{4{\times}0+0{\times}4+3{\times}0+2{\times}5+0{\times}0}{\sqrt{4^2+0^2+3^2+2^2+0^2}\cdot\sqrt{0^2+4^2+0^2+5^2+0^2}}=\frac{10}{\sqrt{29}\sqrt{41}}\approx0.290cos=42+02+32+22+02 ⋅02+42+02+52+02 4×0+0×4+3×0+2×5+0×0=29 41 10≈0.290 -
用户1&用户3
cos=4×5+0×0+3×2+2×0+0×342+02+32+22+02⋅52+02+22+02+32=262938≈0.783\cos=\frac{4{\times}5+0{\times}0+3{\times}2+2{\times}0+0{\times}3}{\sqrt{4^2+0^2+3^2+2^2+0^2}\cdot\sqrt{5^2+0^2+2^2+0^2+3^2}}=\frac{26}{\sqrt{29}\sqrt{38}}\approx0.783cos=42+02+32+22+02 ⋅52+02+22+02+32 4×5+0×0+3×2+2×0+0×3=29 38 26≈0.783 -
用户1&用户4
cos=4×3+0×2+3×0+2×3+0×442+02+32+22+02⋅32+22+02+32+42=182938≈0.542\cos=\frac{4{\times}3+0{\times}2+3{\times}0+2{\times}3+0{\times}4}{\sqrt{4^2+0^2+3^2+2^2+0^2}\cdot\sqrt{3^2+2^2+0^2+3^2+4^2}}=\frac{18}{\sqrt{29}\sqrt{38}}\approx0.542cos=42+02+32+22+02 ⋅32+22+02+32+42 4×3+0×2+3×0+2×3+0×4=29 38 18≈0.542 -
用户2&用户3
cos=0×5+4×0+0×2+5×0+0×302+42+02+52+02⋅52+02+22+02+32=04138≈0.000\cos=\frac{0{\times}5+4{\times}0+0{\times}2+5{\times}0+0{\times}3}{\sqrt{0^2+4^2+0^2+5^2+0^2}\cdot\sqrt{5^2+0^2+2^2+0^2+3^2}}=\frac{0}{\sqrt{41}\sqrt{38}}\approx0.000cos=02+42+02+52+02 ⋅52+02+22+02+32 0×5+4×0+0×2+5×0+0×3=41 38 0≈0.000 -
用户2&用户4
cos=0×3+4×2+0×0+5×3+0×402+42+02+52+02⋅32+22+02+32+42=234138≈0.584\cos=\frac{0{\times}3+4{\times}2+0{\times}0+5{\times}3+0{\times}4}{\sqrt{0^2+4^2+0^2+5^2+0^2}\cdot\sqrt{3^2+2^2+0^2+3^2+4^2}}=\frac{23}{\sqrt{41}\sqrt{38}}\approx0.584cos=02+42+02+52+02 ⋅32+22+02+32+42 0×3+4×2+0×0+5×3+0×4=41 38 23≈0.584 -
用户3&用户4
cos=5×3+0×2+2×0+0×3+3×452+02+22+02+32⋅32+22+02+32+42=273838≈0.711\cos=\frac{5{\times}3+0{\times}2+2{\times}0+0{\times}3+3{\times}4}{\sqrt{5^2+0^2+2^2+0^2+3^2}\cdot\sqrt{3^2+2^2+0^2+3^2+4^2}}=\frac{27}{\sqrt{38}\sqrt{38}}\approx0.711cos=52+02+22+02+32 ⋅32+22+02+32+42 5×3+0×2+2×0+0×3+3×4=38 38 27≈0.711
4.1.1. 相似度矩阵
通过上面的计算可以得到用户之间的相似度矩阵,如下:
| 用户1 | 用户2 | 用户3 | 用户4 | |
|---|---|---|---|---|
| 用户1 | 1.000 | 0.290 | 0.783 | 0.542 |
| 用户2 | 0.290 | 1.000 | 0.000 | 0.584 |
| 用户3 | 0.783 | 0.000 | 1.000 | 0.711 |
| 用户4 | 0.542 | 0.584 | 0.711 | 1.000 |
这个相似度矩阵,可以告诉我们基于偏好两个用户之间的相似度。例如用户1和有用户3的相似度是0.783,是其他用户中最高的一个,即用户1和用户3的喜好高度相近,可互相推荐视频。
4.2. 步骤2:根据相似度矩阵,预测用户在未播放视频的停留时间
这里使用用户相似度的加权平均值来预测某用户对某视频的停留时间。
-
用户1还未观看的视频有:视频2和视频5。
-
用户1在视频2的预计停留时间为
看过视频2的用户有:用户2看了4分钟;用户4看了2分钟。
与用户2相似度∗用户2观看视频2时长+与用户4相似度∗用户4观看视频2时长与用户2相似度+与用户4相似度=0.290×4+0.542×20.290+0.542=1.16+1.0840.832=2.2440.832≈2.697\frac{与用户2相似度*用户2观看视频2时长+与用户4相似度*用户4观看视频2时长}{与用户2相似度+与用户4相似度}=\frac{0.290\times4+0.542\times2}{0.290+0.542}=\frac{1.16+1.084}{0.832}=\frac{2.244}{0.832}\approx\boldsymbol{2.697}与用户2相似度+与用户4相似度与用户2相似度∗用户2观看视频2时长+与用户4相似度∗用户4观看视频2时长=0.290+0.5420.290×4+0.542×2=0.8321.16+1.084=0.8322.244≈2.697
- 用户1在视频5的预计停留时间为
看过视频5的用户有:用户3看了3分钟;用户4看了4分钟。
与用户3相似度∗用户3观看视频5时长+与用户4相似度∗用户4观看视频5时长与用户3相似度+与用户4相似度=0.783×3+0.542×40.783+0.542=2.349+2.1681.325=4.5171.325≈3.409\frac{与用户3相似度*用户3观看视频5时长+与用户4相似度*用户4观看视频5时长}{与用户3相似度+与用户4相似度}=\frac{0.783\times3+0.542\times4}{0.783+0.542}=\frac{2.349+2.168}{1.325}=\frac{4.517}{1.325}\approx\boldsymbol{3.409}与用户3相似度+与用户4相似度与用户3相似度∗用户3观看视频5时长+与用户4相似度∗用户4观看视频5时长=0.783+0.5420.783×3+0.542×4=1.3252.349+2.168=1.3254.517≈3.409
4.3. 步骤3:根据预测的停留时间,推荐给用户1的视频
根据前面的计算,用户1预计在视频2的停留时间为2.697分钟,在视频5预计停留时间为3.409分钟。用户1在视频5的预计停留时间较长,因此下面推荐给用户1的视频是视频5。