資料分析終極一問:指標波動多大才算是異常?

語言: CN / TW / HK

導讀:

先舉個例子,體溫37.4度vs體溫36.5度,只有2.5%的波動,可如果有人在測溫點被發現體溫37.4度,估計馬上就被拉走做核酸。為啥?因為人們不是 2.5%的波動,而是怕新冠!

所以:指標波動不可怕,指標波動代表的業務場景才可怕!脫離業務場景談指標波動就是耍流氓。

在各種業務指標中,資料往往不是靜止不變的,尤其是當一些核心的指標發生了變化、波動時,就需要判斷這樣的波動是否屬於異常的情況。那麼波動了多大才能算是異常?本文將結合一些實際業務場景,來說明資料波動的異常判別方法。

指標資料波動,是各種業務場景下都會遇見的情況,如每日GMV、每日訂單量等,都是在不斷變化的。大多數情況下,變化是“正常”的波動,但有一些波動,源於突然發生的外部原因或其他未被預期的因素,導致其表現出不同於正常模式的異常狀態。若能準確地識別異常波動,從而做出波動預警,並及時應對,就能一定程度上保證所關心的業務場景系統的整體穩定性。 

1

波動型別

資料波動繞不開時間特性。業務中最常遇到的就是今天的指標是什麼樣子?過去幾天是什麼趨勢?未來一段時間會怎麼樣的變化?資料+時間構成了波動的兩個基本屬性。

根據時間的不同特徵,常見的波動型別有:

一次性波動: 偶發的、突然性的波動。一般是由於短期、突發的事件而影響的指標的波動,比如說某頭部主播在某次直播裡上了嚴選的商品、某明星的同款商品在嚴選有庫存等,就會造成訂單量臨時性的超出預期的上漲。

這樣的波動影響時間短,往往幾天的時間便會恢復正常波動。舉個單量的例子,在大促期間都是單量的爆發期,大促即為一次“偶發事件”,此時單量的波動即為一次性波動。其具有如下的特徵圖:

週期性波動: 這種波動和時間節點強相關,且經常以周或者季、年為迴圈節點。如羽絨服秋冬季節賣的比較好,到了春天銷量就下降,夏天幾乎沒有銷量,且每年幾乎都是這樣。

持續性波動: 從某一時間開始,指標一直呈現上漲/下降趨勢。如從今年4月開始,浴室香氛品類的銷售量一直呈現上漲趨勢,這就屬於持續性波動。而持續性波動背後的原因往往是更深刻的,如訂單結構的變化、環境因素的影響,從而出現了這種持續性趨勢。

2

異常識別

那麼什麼樣的波動可以看作是“異常”呢?異常識別也可以認為是異常檢測。這裡主要從絕對值預警、相對值預警兩個方面來說明。

2.1 絕對值預警

絕對值預警,即是通過設定一定的閾值,當指標低於/高於閾值的時候,就認為此時指標波動為異常,並進行預警。

舉個例子,嚴選作為一個品牌,毛利是其核心的一個指標。對毛利可設定絕對值預警:當毛利為負時,就認為此時是異常的情況,需要探究其發生的原因,並解釋這種異常的波動。通過對毛利的絕對值預警,嚴選及時發現了部分使用者利用咖啡機進行薅羊毛、從而導致咖啡機毛利為負的行為,並完善了規則減少了嚴選的損失。

不僅可以設定低於某一個定值,也可以當指標高於某一定值的時候進行預警,比如在供應鏈中,某個大倉的分倉比高於40%,就會導致倉庫負荷過重從而影響生產。

絕對值預警往往是一次性的波動,這樣的異常判定比較簡單,只需要設定對應的閾值即可。而閾值的設定可以根據具體的業務的不同和規則而變化。

目前在有數BI中可以直接設定絕對值預警:

2.2 相對值預警

然而實際業務中,絕對的閾值只能提供一個“底線”。除了一些非常確定性的業務場景外,在其他情況下,過高的“底線”就會導致誤報,過低的“底線”可能會漏掉很多需要預警的情況。於是作為絕對值預警的補充,相對值預警可以根據歷史資料及波動情況,來判斷當前的波動是否為異常。

(1)同比環比

同比環比是業務場景中比較常用的一種異常檢測方式,利用當前時間週期與前一個時間週期(同比)和過去的同一個時間週期(同比)比較,超過一定的閾值即認為該點是異常的。實際中常用周/日環比、年同比來進行比較。

如上圖,(1)的資料為所要判斷的值。當(1)的數值為百分比時,如來源於主站訂單的比例,則同比環比一般為:

環比:(1)-(2) pt

同比:(1)-(3) pt

而當(1)的數值為非百分比時,如來源於主站的訂單數量時:

環比:((1)-(2))/(2) %

同比:((1)-(3))/(3) %

根據值得正負來判斷是上漲還是下降。通過與上週/昨天和去年同期的資料表現進行對比,計算波動值,再將波動值和閾值進行對比,從而得到當前時刻數值是否在正常的波動中(閾值的設定方法在後面介紹)。

如在上述的週期性波動的例子中,在11月環比波動都會較大,這時設定同比波動預警會比設定環比波動預警更為合理。於是在波動判別中,需要注意業務實際背景。

(2)週期平滑

同比/環比僅使用1~2個時間點的資料,容易受到資料本身質量的影響:當歷史同期或上個週期的資料本身就是“異常”的時候,用“異常”的資料來判斷是否“異常”就不太合適。


一個很自然的想法就是將所參考的時間點拓展,利用多個時間點的週期數據進行平滑,得到當前時刻指標的對比值。如:

則比較值:

其中 為平滑係數,當 都為相同的值的時候,此時即為平均值。也可越靠近所研究時間點,賦予更高的平滑係數。所選的時間點可以根據業務需求自行定義。

利用比較值b和所研究的值(1)對比,超過一定的閾值即可認為是“異常”,其波動需要關注。

(3)假設檢驗(3σ原則)

前面提到比較值需要和所研究的值進行對比,通過閾值來判斷波動是否異常。閾值的定義方法和預警方法類似,分為絕對值閾值和自適應(相對值)閾值。

  • 絕對值閾值:根據歷史正常情況下的資料波動情況,計算比較值和所研究的值之間的差異情況,從而定義一個上/下限值,即為閾值。

  • 自適應閾值:根據資料波動情況而變化的閾值,其理論基礎為假設檢驗和大數定律,來判斷是否為異常。

不妨假設當前時間點的指標資料為b,歷史用於對比的指標資料為: 

其中:

分別表示對比資料的平均水平和波動情況。則根據大數定律和假設檢驗,當

即可認為當前時間點的指標資料為異常波動。其中z為置信水平所對應的值,如當z=1.96時,置信水平為95%,即可認為在100次的波動下,有95次是在正常範圍內波動的(置信水平及其對應的值可參考標準正態分佈表)。當z=2.58,置信水平為99%,即為著名的 “3 σ 原則”。

3.3 其他方法

除了以上所介紹的一些常用的、便捷的方法外,也可以通過時間序列、演算法模型等來判斷異常值。異常值判別是比較常見的研究場景,但由於實操的複雜性,這裡僅做一個介紹。

(1)時間序列

業務上的資料往往具有時間屬性,如單量隨時間的變化、GMV隨時間的變化等。那麼在時間序列中,通過異常檢測的方法,也可以對當前波動是否異常做出判斷。常用的方法有:

  • 平均法:移動平均、加權移動平均、指數加權移動平均、累加移動平均等。和上述的“週期平均”的方法類似,可自定義視窗大小和加權係數。

  • ARIMA模型:自迴歸移動平均模型(ARIMA)是時間序列中一個基礎模型,利用過去的幾個資料點來生成下一個資料點的預測,並在過程中加入一些隨機變數。使用該模型需要確定ARIMA所需的引數,即需要對資料點進行擬合。利用擬合後的方程確定下一個時間點的資料的區間,從而判斷當前波動是否為異常。

  • 此外還有ESD、S-ESD、S-H-ESD、STL分解等演算法,來檢測異常點。

(2)演算法模型

  • 基於分類方法:根據歷史已有的資料,將其分為正常、異常的兩類,之後產生的新的觀測值,就可以使用分類的方法去判斷新的觀測值是否為異常。如使用距離判別的K-means演算法、SVM演算法等。

  • 神經網路方法:可以對具有時間特性進行建模的LSTM演算法、用卷積神經網路來做時間序列分類的Time  Le-Net,以及各種的監督式模型,都是能夠對異常資料進行識別的演算法。

3

總結

在實際應用中,還需要結合業務背景來進行方法的選擇。一般來說,判斷異常的主要方法有:

作者簡介

九數,網易嚴選資料分析師,負責嚴選供應鏈倉配域的分析工作。

獲取最新動態

最新的推文無法在第一時間看到?

以前的推文還需要複雜漫長的翻閱?

進入“網易有數”公眾號介紹頁,點選右上角

“設為星標”

置頂公眾號,從此訊息不迷路

設為星標,最新推文不迷路

分享,點贊,在看,安排一下?