天天看點

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。