基於正態分布的前端性能數據分析(一)

前言

公司的前端項目是上報了各項性能數據的,如首屏時間、onload時間、網路用時等;由於用戶可能處於各類環境中,如不同的網路環境、機型差異、同一手機的不同運行狀態等,導致性能數據會有較大的波動,而這些異常數據對平均值的影響是非常大的,因此不能簡單地用平均值描述性能狀況,而應該做更加深入地分析數據。

通過對性能數據的統計分析,我們希望得到性能數據的分布情況,監控上線前後的性能變化,甚至運行期間的性能波動,分析原因出在哪個環節,從而有針對性地優化項目;並且針對每一次優化,我們能夠定量地確定優化成效有多大,而不是「嗯,好像優化有效果,在我的電腦上都變快了」

ps:由於不是專業做數據分析的,分析過程如果有不合理的地方,歡迎指正。

探索

由於我們主要關注用戶的首屏時間,因此我這裡拿到了一周內首屏數據的抽樣結果(約13萬條),為了了解首屏時間的分布情況,我以50ms為間距統計各個時間段內的數據量,繪製折線圖結果如下:

可以看到數據分布比較對稱,曲線呈鐘形,數據主要集中在550ms附近。

在傳統的統計分析當中,很多時候我們都希望用正態分布來分析數據,就算不符合正態分布的數據,也有可能將原始數據轉換為正態數據

從上圖可以看到,我們的數據是比較符合正態分布的特徵的,因此我們可以嘗試使用正態分布來分析。

這裡簡單回顧一下正態分布(也就是高中數學內容):

若隨機變數 X服從一個位置參數為 mu 、尺度參數為的sigma 的概率分布,且其概率密度函數為

則這個隨機變數就稱為正態隨機變數,正態隨機變數服從的分布就稱為正態分布,記作N( mu , sigma^{2} )。如果 mu=0sigma=1 ,稱作標準正態分布。其概率分布圖如下:

生活中,比如考試分數、身高、收入、智商等都符合正態分布或近似正態分布,也就是數據主要集中在一個範圍,向兩邊逐漸減少的分布趨勢。(ps:所以不要氣餒於自己的平凡,因為平凡人才是大多數,哈哈)。

在做正態分析之前,需要做正態性檢驗,也就是檢驗我們的數據與正態分布的相似程度,如果差得太遠,就需要做轉換或者改用其他分析方式。

驗證

我們可以使用IBM的數據分析工具SPSS來驗證數據是否符合正態分布,對於大樣本數據,SPSS使用的是K-S檢驗,其中K(Kurtosis)指峰度、S(Skewness)指偏度;並且SPSS會給出數據的直方圖、Q-Q圖,從而直觀地反應數據的正態性。這些數據SPSS都會幫我們算好,因此我們可以暫時不用深究,會用這些數據就行。

  • 峰度:可以理解為曲線的陡峭程度,正態分布的峰度為3,峰度越接近3,說明曲線的正態性越好,通常峰度大於峰度標準誤差的1.96倍,即可認為數據不符合正態分布。SPSS已經把正態分布的峰度轉換成了0,以方便比較,因此在SPSS中峰度越接近0,正態性越好。
  • 偏度:描述數據的對稱性,也就是偏離正態分布中心的程度。正態分布的偏度為0,偏度越接近0,說明數據正態性越好;同樣,通常偏度大於偏度標準誤差的1.96倍,即可認為數據不符合正態分布。
  • Q-Q圖:如果Q-Q圖中的散點數據主要分布於一條直線上,則可認為數據具有正態性。

峰度變化

偏度變化

QQ圖

圖源1、圖源2

在開始處理之前,我們還需要捨去原始數據中的異常數據;比如首屏時間10s以上、100ms以下的顯然不合理,進一步觀察發現,3000ms以上的各個時間段內的數據量都比較小,再結合項目實際情況,判斷3000ms是一個比較合理的異常界線,故捨去大於3000ms的數據(捨去數據量小於10%)。

接下來將過濾後的數據導入SPSS進行驗證,在SPSS中依次選擇 分析->描述統計->探索,並在 繪製 選項中選擇 正態檢驗 直方圖,結果如下:

可以看到,峰度和偏度大於1,直方圖程正偏態,Q-Q圖也不在一條直線上。因此我們的原始數據正態性並不是很好,需要轉換數據後再做驗證。

數據轉換

要將數據轉換為正態分布,通常可以計算原始數據的SQRT(開方)、LN(自然對數)、LG(10為底的對數)、倒數,它們的轉換力度依次增大;對於正偏態數據,可以直接轉換,而負偏態數據需要先求出數據的最大值(max),然後對於每一項數據(x),以求LN為例,計算方式為 LN(max+1-x)。

可以多次交替、循環使用上述的轉換方式,以達到更好的轉換效果。

多次嘗試過後,我採用了對原始數據開方三次的方式,也就是取1/8次方。將處理後的數據導入SPSS,分析結果如下:

可以看到,相較於未轉換的數據,正態性已經好了很多,峰度、偏度已經接近0,直方圖比較對稱,Q-Q圖的大部分已經在一條直線上了。

需要指出的是,在傳統的統計分析中,30個樣本以上就算是大樣本了,傳統的正態檢驗方法並不適應於驗證超大樣本數據(如我這裡有10萬條數據),並且由於正態性檢驗較為敏感,因此我們可以不做嚴格的顯著性檢驗,也就是不強制要求上述的 1.96倍標準,只是將峰度、偏度作為參考,越接近0越好,然後輔以直方圖、Q-Q圖的佐證。

另外根據中心極限定理,在樣本容量很大時,總體參數的抽樣分布是趨向於正態分布的,因此我們是可以使用正態分布來分析我們的數據的,當然,為了更好的效果,我們最好對原始數據進行轉換。

這一篇文章,主要介紹了正態分布的概念、對原始數據的轉換方式以及如何驗證數據的正態性,下一篇文章將會使用正態分布來分析數據。


推薦閱讀:

U4 2.0 新特性 —— Web Push
【 js 基礎 】【讀書筆記】作用域和閉包
前端技術體系大局觀
React Fiber是什麼
setState:這個API設計到底怎麼樣

TAG:前端开发 | 性能分析 | 数据统计 |