有没有想过一个非常简单的问题?什么时候用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。