天天看点

Metrics的选择问题(sensitivity和robustness)

有没有想过一个非常简单的问题?什么时候用median,什么时候用mean,他们的数学定义相应大家都非常清楚,无非就是取中位数和平均值。这篇文章主要讲解从两个方面选择metrics:sensitivity和robustness。sensitivity指我们的metric能否捕获一些我们需要的变化,robustnes指metric能否忽略一下我们不需要的数据。这里有点抽象,所以下面举一个例子:

假设我们需要对比一下两组数据,对应两个不同的网络a和b,假设数据是网页的加载延时:

group_a = [0.01, 0.1, 0.1, 0.1, 0.5]
group_b = [0.01, 0.1, 0.1, 0.1, 1.0]      

我们需要知道哪组网络数据的延时较低,我们尝试分别对比他们的median和mean值:

>> import numpy as np              >> print("median of group a is", np.median(group_a))              >> print("median of group b is", np.median(group_b))

median of group a is 0.1
median of group b is 0.1           

很明显,两组的延时数据的median值是相等的,这就导致我们无法知道哪个网络延时更低。

>> import numpy as np
>> print("mean of group a is", np.mean(group_a))
>> print("mean of group b is", np.mean(group_b))

mean of group a is 0.162
mean of group b is 0.262      

我们再用mean来对比不同的网络。发现网络a比网络b的延时要低,所以可以简单下一个结论说,网络a的延时更低。我们可以说mean更加sensitivity。

但是,反过来,假如数据中有一些outlier。譬如下面例子中的,假设我们认为group_b的100是一个outlier(客户打开页面瞬间,电脑休眠,接着再开机,ajax发送的延时)。

>> group_a = [0.01, 0.1, 0.1, 0.1, 0.5]
>> group_b = [0.01, 0.1, 0.1, 0.1, 100.0]

>> import numpy as np
>> print("mean of group a is", np.mean(group_a))
>> print("mean of group b is", np.mean(group_b))
>> print("median of group a is", np.median(group_a))
>> print("median of group b is", np.median(group_b))

mean of group a is 0.162
mean of group b is 20.062
median of group a is 0.1
median of group b is 0.1      

那么上面的对比,在mean中,b的网络延时是比a大很多,但是实际上两个网络是相似的。所以median具有robustness,可以忽略一下我们不需要的outliers。

当然,我们也可以认为100不是outlier,在具体的应用中,需要考虑100是哪里来的,才能知道哪种metric是我们需要的metric。