我有一个执行
函数 foo(( {...}
每个用户会话多次。我可以将 2 种替代算法实现为"foo"函数,我的目标是使用 A/B 测试根据执行延迟评估它们。
每个用户会话调用 foo(( 的次数是可变的,但不会超过 10000。 每个值的范围介于 [1 - 400] 毫秒之间。 假设延迟值为:
Algo1: [ [12, 30, 20, 40, 280] , [13, 14, 15, 100, 10], [20, 40] , ... ]
Algo2: [ [1, 10, 5, 4, 150] , [14, 10, 20], [21, 33, 41, 79], ... ]
我的问题是选择获胜者的最佳指标是什么?
可能的选项
每次会话的平均值,然后评估 CDF
每次会话的中位数,然后评估 CDF
别的东西?
同时捕获平均性能和波动性(变异性(的一种可能性是二次损失:l = (Y - τ(2,其中 Y 是单个结果,τ 是期望的目标值(在您的例子中为零(。 计算每个算法的所有观测值的平均损失,以估计预期损失 E[l],然后选择平均损失最小的算法。
这很容易表明,在期望下 E[l] = (E[Y] - τ(2 + σ2Y。 换句话说,二次损失有两个组成部分:
- Y的期望值与目标τ有多远;和
- Y 的可变性。
通过始终接近目标来实现低损耗。 如果目标为零,这意味着您获得的值平均接近于零,并且不会受到很大差异的影响。 较大的均值或较大的方差都会使损失膨胀,因此最小损失要求两个方面同时表现良好。