一、引言
在推荐系统中,Intervaling 可以用于分析用户行为的时间间隔分布,从而更好地理解用户的兴趣变化和行为模式。通过对时间间隔的分析,可以捕捉用户的活跃周期、兴趣转移的时间特征等信息,进而为推荐算法提供更有价值的特征。
例如,对于一个在线购物平台,如果发现用户购买商品的时间间隔呈现一定的规律,如每隔一段时间就会购买特定类型的商品,那么推荐系统可以根据这个时间间隔特征,在合适的时间向用户推荐相关商品,提高推荐的准确性和及时性。
Netflix为了优化推荐算法,推出了交错测试(interleaving)技术。该技术在测量用户偏好和为用户推出个性化推荐视频方面,速度比传统A/B测试快100倍。本报告将深入分析交错测试的原理、相关公式以及通过案例展示可视化过程。
二、Intervaling原理
-
基本概念 -
交错测试是一种在线实验方法,它将不同算法的推荐结果混合展示给用户。例如,对于视频推荐,用户看到的推荐列表中可能会交替出现不同算法推荐的视频。 -
优势 -
快速筛选:能够在较短时间内从多个算法中筛选出性能较好的算法。与传统A/B测试相比,不需要大量的样本和长时间的测试周期。 -
直接比较:通过在同一用户界面展示不同算法的结果,可以更直接地比较用户对不同算法的偏好,减少因用户群体差异导致的偏差。
三、公式分析
(一)评估指标相关公式
-
用户偏好得分公式 -
假设用户对算法 推荐的第 个项目的交互行为指标为 (例如,观看时长、是否点击等),项目权重为 ,算法 推荐的项目数量为 ,则用户对算法 的偏好得分 计算公式为: -
同理,对于算法 ,用户偏好得分 。 -
算法胜率公式 -
设总交互次数为 (例如用户观看视频的总次数、点击推荐的总次数等),算法 获胜的交互次数为 (即用户选择算法 推荐结果的次数),则算法 的胜率 为: -
算法 的胜率 ,其中 是算法 获胜的交互次数。
(二)样本量相关公式
-
传统A/B测试样本量公式 -
在传统A/B测试中,为了达到一定的统计显著性水平(通常用 表示,如 )和检测到一定的效应大小(用 表示),所需的样本量 可以根据以下公式计算(假设是比较两个算法,方差相等且已知为 ):其中, 是标准正态分布的分位数(例如,当 时,), 是对应于功效(,如设定功效为0.8,则 )的标准正态分布分位数。 -
交错测试样本量公式 -
交错测试声称可以从更小的样本量中可靠地识别出最佳算法。设交错测试所需的样本量为 ,虽然没有一个通用的精确公式,但可以根据经验和理论研究大致表示为与传统A/B测试样本量的关系。例如,如果交错测试比传统A/B测试快 倍(在Netflix的案例中,),且假设两种测试在检测能力上相似,则可以近似表示为:
四、Netflix案例分析
(一)案例背景
假设Netflix有两个视频推荐算法:算法 和算法 。为了比较这两个算法的性能,进行交错测试。测试周期为一周,记录用户对推荐视频的观看时长和点击情况。
(二)数据收集与预处理
-
数据收集 -
在一周内,收集了1000次用户与推荐视频的交互数据,包括用户是否点击视频以及观看时长。 -
数据预处理 -
对于观看时长,将其标准化到0 – 1之间,以便于不同视频之间的比较。例如,如果视频最长观看时长为60分钟,某个视频实际观看时长为30分钟,则标准化后的观看时长为 。
(三)计算用户偏好得分
-
确定权重 -
假设点击视频的权重 ,观看时长的权重 。 -
计算得分 -
对于算法 ,假设其推荐的视频被点击了 次,平均观看时长标准化后为 ,推荐视频数量 。则算法 的用户偏好得分: -
对于算法 ,假设其推荐的视频被点击了 次,平均观看时长标准化后为 ,推荐视频数量 。则算法 的用户偏好得分:
(四)计算算法胜率
-
统计获胜次数 -
统计用户选择算法 推荐结果的次数(即算法 获胜次数)为 次,算法 获胜次数为 次。 -
计算胜率 -
总交互次数 ,则算法 的胜率 ,算法 的胜率 。
(五)数据分析
-
用户偏好得分 -
使用Matplotlib库绘制柱状图展示算法 和算法 的用户偏好得分。 -
柱状图
import matplotlib.pyplot as plt
scores = {'A': 260, 'B': 213}
algorithms = list(scores.keys())
values = list(scores.values())
plt.bar(algorithms, values)
plt.xlabel('Algorithms')
plt.ylabel('User Preference Score')
plt.title('User Preference Scores for Different Algorithms')
plt.show()
-
箱线图 -
假设收集了10个用户的数据,每个用户对算法 和算法 都有偏好得分(这里是模拟数据),将数据整理后使用Seaborn库绘制箱线图。
import seaborn as sns
import pandas as pd
import matplotlib.pyplot as plt
data = {'Algorithm': [], 'User Preference Score': []}
for user in range(10):
data['Algorithm'].append('A')
data['User Preference Score'].append(random.randint(200, 300))
data['Algorithm'].append('B')
data['User Preference Score'].append(random.randint(150, 250))
df = pd.DataFrame(data)
g = sns.boxplot(x="Algorithm", y="User Preference Score", data=df)
plt.xlabel('Algorithms')
plt.ylabel('User Preference Score')
plt.title('Distribution of User Preference Scores for Different Algorithms')
plt.show()
-
算法胜率 -
使用Matplotlib库绘制饼图展示算法 和算法 的胜率。 -
饼图
import matplotlib.pyplot as plt
win_rates = [0.4, 0.6]
labels = ['Algorithm A', 'Algorithm B']
plt.pie(win_rates, labels=labels, autopct='%1.1f%%')
plt.title('Win Rates of Different Algorithms')
plt.show()
-
折线图(随时间变化) -
假设在一周内每天记录算法 和算法 的胜率(这里是模拟数据),将数据整理后使用Matplotlib库绘制折线图。
import matplotlib.pyplot as plt
import pandas as pd
data = {'Day': [1, 2, 3, 4, 5, 6, 7], 'Algorithm A Win Rate': [0.3, 0.35, 0.4, 0.45, 0.5, 0.4, 0.35], 'Algorithm B Win Rate': [0.7, 0.65, 0.6, 0.55, 0.5, 0.6, 0.65]}
df = pd.DataFrame(data)
plt.plot(df['Day'], df['Algorithm A Win Rate'], label='Algorithm A')
plt.plot(df['Day'], df['Algorithm B Win Rate'], label='Algorithm B')
plt.xlabel('Day')
plt.ylabel('Win Rate')
plt.title('Win Rates of Different Algorithms over Time')
plt.legend()
plt.show()
五、结论
通过对Netflix交错测试个性化推荐算法的分析,我们可以看到交错测试在快速评估推荐算法性能方面具有优势。可以更直观地了解不同算法的表现,为推荐算法的优化提供有力支持。
本人耗时半年打造的因果分析-AB实验分析&数分高频面试考点,欢迎扫码观看学习(或者阅读原文)
作者介绍:数分36计OpenDogs
● 腾讯、滴滴、阿里数据分析专家;
● 帮助上百位同学进入互联网大厂 ;
● 非常了解数据分析关注的核心节能 ;
● 晚上不定期XHS直播,和大家交流心得;
● 数分必备技能等课程见小红书:数分36计OpenDogs
● 微信公众号:数分36计开源狗
进群 & 学习沟通等可添加微信,欢迎一起学习~
原文始发于微信公众号(数分36计开源狗):Netflix Interleaving AB实验个性化推荐算法分析