本文来自Netflix的技术博客,文章介绍了如何通过统计学的方法来减少播放缓冲时间或减少码率。LiveVideoStack对原文进行了摘译。
文 / Martin Tingley
译 / 元宝
审校 / Ant
原文 https://medium.com/netflix-techblog/streaming-video-experimentation-at-netflix-visualizing-practical-and-statistical-significance-7117420f4e9a
Netflix的流媒体视频实验旨在优化我们向全球1.3亿会员流式传输的视频的体验质量(简称QoE)。为了衡量QoE,我们会查看每个回放会话的各种指标,包括播放延迟; 重新缓冲(视频缓冲区清空时的播放中断)出现比率,播放错误和用户启动的中止; 整个播放时的平均比特率; 和视频多方法评估融合,这是Netflix开发的感知视频质量的衡量标准。
我们的许多实验都是“系统测试”:短期运行(数小时到一周)的A / B实验,旨在改善一个QoE指标而不会降低其他指标。例如,我们可以测试自适应流式算法的生产配置,该算法根据设备性能选择视频质量,基于Netflix计划层的分辨率限制和针对新参数配置的时变网络条件,它旨在减少播放延迟而不降低其他度量。虽然一次新的生产体验推出的每项测试可能只会逐步改善一个或两个QoE指标,并且仅针对某些成员,但随着时间的推移,对于我们所有的不同成员来说,逐渐累积的影响使得我们有效提供大规模高质量流视频的能力在稳步提升。
这些流式实验中的处理效果在网络条件和其他因素方面往往是异构的。作为示例,我们可能是旨在通过预测预先缓存视频的前几秒来减少播放延迟,我们的算法预测该成员最有可能发挥作用。这种创新可能对我们在高质量网络中观察到的短暂播放延迟产生很小的影响——但它可能会导致在低吞吐量或不稳定网络中的播放延迟显着减少。
由于流式实验中的处理可能对给定度量的高(或低)值产生更大的影响,因此平均值,中位数或其他汇总统计数据的变化通常不足以来说明测试处理以及如何来改变该指标的行为。 一般而言,我们感兴趣的是相关指标的分布在测试体验(在Netflix中称为“单元格”) 之间的差异。我们的目标是建立一个推理和可视化解决方案,同时指出分布的哪些部分已经发生变化,以及这些变化的实质和统计意义。
我们已经成功地总结了测试单元中度量的分布,以及这些分布在单元之间的差异,使用分位数函数和分位数函数之间的差异,以及来自快速自举程序的不确定性。我们工程的同事很快就适应了通过分位数函数报告的测试结果,因为他们可以从熟悉的概念中挖掘出预先存在的方法。
分位数函数
分位数函数Q(τ)是给定随机变量的累积分布函数的倒数。它接受概率τ(在0和1之间)作为参数并返回阈值,使得在绘制随机变量时要以概率τ小于该值。从形式上看,
其中F(x)是随机变量X的累积分布函数。Q(0.50)返回中位值,Q(0.95)返回百分之95分位数,等等。
分位数函数是总结分布的好方法,因为统计学家和非统计学家都对它们有相当多的描述。像中位数,十分位数和百分位数这样的概念 - 分位数的所有特殊情况 - 都是大众媒体报道经济问题的主要内容(“ 你有多少百分比? ”)并且在标准化考试评分中很常见。
下面是一个模拟 示例(与实际值无关,并且y值被抑制) 可能由流式实验产生的数据,旨在减少某些成员子集的播放延迟:
在此示例中,单元1对应于当前的生产经验,而其他单元对应于三个建议的参数配置。注意,y轴以秒为单位,并且可以从图中容易地读取中值和其他熟悉的分位数的点估计值。在这种情况下,与单元1相比,单元1和4的分位数函数几乎相同,而单元2和3的特征分别在播放延迟的所有分位数中减少和增加。
接下来,我们需要确定处理单元和控制单元之间的差异是否具有实际和统计学意义。
一个图表中的实践和统计意义
为了量化给定度量的在单元之间的分布是如何不同的,我们绘制每个处理单元分位数函数与当前生产经验的分位数函数之间的差异(单元1)。
由于这些“delta deltale”图的Y轴是度量的原始单位,我们对该度量的所有直觉都可以用来理解测试单元之间差异的实际意义。在上面的这个模拟示例中,单元2成功地减少了播放延迟:播放延迟的上分位数比单元1中的低约5秒,表明我们已经为经验最差的观众改进了该度量。这是一个易于直观的测试结果摘要。
为了量化分位数函数之间差异的统计显着性,我们使用两种不同的自举程序。首先,为了理解生产体验中的可变性,我们通过重新采样(替换)两次来自我引导该单元,在每种情况下估计分位数函数,然后计算delta分位数函数。重复此过程,然后计算置信区间作为τ的函数,得到上面绘制的不确定性包络(下面有一些更多的技术细节)。提供了平衡的实验设计,这些置信区间告诉我们delta分位数函数在零假设下的分布,即度量分布在测试单元中是不变的。
在我们的模拟播放延迟示例中,单元4的分位数函数与单元1的分位数函数无统计学意义。相比之下,与单元1相比,单元2和3分别具有统计上显着的减少和大多数分位数的增加。上分位数的幅度差异最大。这种不确定性量化方法的一个优点是我们可以快速评估每种测试处理对生产经验的重要性。缺点是不考虑处理分位数函数估计值的可变性。
作为第二个不确定性量化,在这种情况下,对于特定的delta分位数函数,我们通过从每个处理单元重新采样(替换)来引导每个处理单元对生产单元; 估计分位数函数; 采取差异; 然后计算置信度包络。即使样品大小在细胞之间不同,该程序仍然有效,考虑到生产经验和处理经验的估计分位数函数的不确定性,并且如果处理单元中的不确定性将产生更宽,更保守的置信区间。分位数函数大于对照单元的分位数函数。缺点是在单个图中可视化多个不确定性包络变得难以驾驭。
以下是我们的模拟播放延迟示例中单元2和单元1分位数函数与不确定性包络之间的差异:
这一个图提供了显着性的测试处理的统计(不确定性包)和实际(y轴是秒的单位)以及它们如何在分位数上变化的图示。简单的问题,例如“第95百分位变化了多少,变化是多少?”可以通过检查来回答。
一些技术细节
我们的引导程序的两个有趣的技术方面是重要性调整,以考虑跨多个分位数的比较,以及通过操作压缩数据结构实现的速度增益。
多重比较。三角形分位数函数上的置信包络最初是逐点计算的:对于τ的每个值,我们取自举样本的0.025和0.975百分位数。这样的间隔在名义上具有覆盖每个 τ 值的真实变化的概率为95%。我们想要的是同步或路径方面的间隔,其特征在于不确定性包络的标称95%概率覆盖整个真实函数。为了产生同时的不确定区间,我们根据Bonferroni校正调整逐点置信水平 - 使用delta-分位数函数的独立值的数量的估计(参见索洛和波拉斯基,1994年):
这里,r(i,j)是在第i个和第j个值处评估的Δ分位数函数之间的样本相关系数,在自举样本上计算,并且N是分位数函数的τ值的数量估计。注意,当N增加时,附近τ值的相关性r(i,j)同样会增加,结果是Neq的值对于足够大的N值饱和,并且同时不确定性包络不会继续变宽。N增加。
快速引导大数据。Netflix的流媒体实验可能涉及数千万个数据点,我们的目标是即时执行统计分析,因此报告可以是交互式的。因此,我们要求上述自举程序非常快,即使在大型数据集上也是如此。
我们的方法是使用具有有限数量的唯一值的压缩数据对象来近似每个测试单元的数据。特别地,我们使用单位间隔上的几千个均匀间隔点来近似每个经验分位数函数。直观地,该近似假设度量的变化小于dQ(τ)= Q(τ+ 1 / N)-Q(τ) ,其中N是几千阶,但是没有实际重要性。注意,dQ(τ)随τ变化; 在播放延迟示例的上下文中,分布是右倾斜的,使得dQ(τ)随τ增加。直观地,我们假设游戏延迟的微小变化对于那些通常经历短暂游戏延迟的成员来说可能是重要的,而对于习惯于长时间游戏延迟的那些成员来说,最小的实际重要变化要大得多。
然后将每个测试单元的数据表示为一组(值,计数)对,并且我们可以使用多项式的绘制来引导计数。通过利用多项式的泊松近似来实现进一步的速度增益,这是一种已经确定的自举方法。
由于近似,自引导的计算成本与原始数据集的大小无关,而是通过用于近似原始的量化函数的惟一值的数量来设置。与原始数据的基数进行扩展的惟一步骤是压缩步骤,在我们的实现中,它需要一个全局排序和线性近似。
大多数数据分级或压缩方法(如直方图或t-digest等数据草图)都可用于大型数据集的快速自举。在所有情况下,自举所需的重采样可以通过对多项式的泊松近似来实现。由于t-digest可以很容易地组合在一起,我们正在探索的下一步是预先计算可能对给定实验感兴趣的每个可能的维度过滤器组合的t-摘要,例如设备类型和Netflix订阅计划。当分析人员选择特定的数据片段时,可以组合相关的t-摘要并将其用作快速自举算法的输入。
结论
分位数函数以及测试体验之间的分位数函数的差异已被证明是有意义且直观的工具,用于总结流测试体验度量的分布(例如播放延迟或平均比特率)在测试体验之间的差异。分位数和delta分位数函数的一个关键优势是y轴处于度量的有意义单位:图表很容易为我们的工程合作伙伴提供实际意义。通过从通过降低原始数据的基数实现的快速自举得到的置信区间来提供统计显着性。
这只是我们改进Netflix流媒体实验的一种方式,而分位数函数只是我们某些指标的一个很好的总结。我们正在积极致力于比率,速率,零膨胀观测和其他具有挑战性的指标的快速自举技术。我们研究的另一个方面涉及在一维或二维中拟合灵活的条件分位数函数,通过交叉验证估计所需的正则化参数,并使用分布式“ 小包装袋 ”估计不确定性。更多信息将在以后的帖子中提到。