什麼是 TimeSeries 關聯性分析(Correlation Analysis)
假設有基於時間序列採集的兩組同樣大小的數據,關聯性分析是指量化這兩組數據間的關聯程度。再次強調一下,本文中討論的關聯性分析是針對 TimeSeries 數據類型的,在自然語言處理中用到的關聯性分析方法是基於信息熵,與文本中討論的方法不相同,雖然他們都屬於關聯性分析。
如果數據 A 上漲時,數據 B 上漲(同樣適應於下跌的情況)則說明這兩組數據有關聯性,表示爲正向關聯。
如果數據 A 上漲時,數據 B 下跌則說明這兩組數據有關聯性,表示爲反向關聯。
關聯程度取決於兩組數據間的變化幅度。
爲什麼要做關聯性分析
包括但不限於:
使用聚類算法定位性能瓶頸。
結合數據可視化,進行信息挖掘。
根因分析。
實踐中比較實用的用法是分析某個指標的變動會引起哪類其他指標的變動。比如可以回答如下問題:
Memory Cached 與 Memory Free 間是什麼關係?關聯程度如何?
IO WriteBack 頻繁程度與哪種指標有關聯?
在設計系統資源調度策略與參數配置上,這類信息有助於系統最優設計。當優化某個關鍵指標時,需要查看與其關聯的其他指標以確保不會出現指標失衡情況(改善一個指標時導致另一個指標的惡化)。通過此方法還可以分析出設備的硬件配置在運行用戶負載程序時它的主要瓶頸是什麼,針對不同資源瓶頸,配置不同的資源調度參數以實現能效的最優化。
常用算法之 - Pearson Correlation Coefficient
公式 - 來自 Wikipedia
Python Code: Scipy.stats.pearson()
取值範圍: [-1.0 ~ 1.0]
使用 Pearson 時的注意點如下:
函數結果的絕對值越接近 1.0 則關聯性越強,越趨近於 0.0 則表明沒有關聯性。
兩組數據間需要有獨立性。
樣本間需要有線性關係。
常用算法之 - Spearman Rank Correlation Coefficient
公式 - 來自 Wikipedia
Python Code: Scipy.stats.spearmanr()
取值範圍: [-1.0 ~ 1.0]
使用 Spearman 時的注意點如下:
函數結果的絕對值越接近 1.0 則關聯性越強,越趨近於 0.0 則表明沒有關聯性。
兩組數據間需要有獨立性。
樣本間不止線性關係,滿足單調關係時也適用。
不過從實際表現來看,Pearson 與 Spearman 不需要嚴格的遵從關係函數(線性,單調)。
常用算法之 - Normalized Cross-Correlation
公式 - 來自 Anomaly.io
函數結果的絕對值越接近 1.0 則關聯性越強,越趨近於 0.0 則表明沒有關聯性。
抗異常值的干擾能力較強,這也意味着肉眼上看不是很明顯的關聯關係使用 NCC 計算時得分是比較高的。
NCC 適合量化兩組數據間的數值上的浮動程度(波動)。
從 PCC 與 SCC 的結果上看兩組數據沒有明顯的關聯性,但從 NCC 上看是有較強關係的。從肉眼上分析,兩組數據間有較強的”貼合”關係,但不具備明顯的關聯性關係。
兩種關係
將不同指標間的關聯性屬性劃分爲:
直接關係(Direct Correlation)
間接關係(Indirect Correlation)
直接關係是指兩個 metric 間有正向關聯或反向關聯,總之是有某種的直接關聯。間接關係是指兩個 metric 間通過某種邏輯關係關聯在一起且數值的變化可能不是實時的,會有一段時間的延遲。需要特殊說明的是,嚴格意義上來說在一個系統中的任意兩個指標都會有關聯關係,區別在於關聯關係強弱與時效性。
案例分析
Memory Free 與 Memory Cached 間的對比
NCC 較高但 Pearson 與 Spearman 給出的低分來看,這兩個指標在這段時間內屬於間接關聯。
從 free 與 cached 回收原理上看,兩個雖然有關係但並不是直接關係。這個依賴具體的 PageCache 與 Memory Reclaim 算法。
Memory Buffers 與 Memory Cached 間的對比
Pearson 與 Spearman 都給出 0.5 以上的分,說明兩者有一些直接關係,只是強度不是很大。
從 buffers 與 cached 回收原理上看,兩者其實都算是 PageCache 緩存。當遇到內存喫緊,IO 回寫情景時兩個 buffer 都會受到影響。
Memory Free 與 UX FrameDrop 間的對比
Pearson 與 Spearman 給出的分數來看,兩個指標屬於間接關係。
從原理上看低內存有可能會引起前臺 UX 應用的卡頓,但這兩者間並不具備直接關係。
這裏只給出了某個設備在某個時段的信息,而且還只是某個特定 UX 應用的關聯性分析。在實際中,不同 UX 應用針對不同的 metric 間的關聯性是不同的。比如有些應用是 Memory sensitive,而有些是 IO sensitive。只有經過大量數據(不同時段)的計算後才能給出較爲準確的結論。
其他常見的關聯性分析算法,根據特性適用於不同領域。
Apriori/FP Growth(Tree): 經典的超市關聯分析中用到的算法。在多個異常指標的聚類時,也可以用此算法做初步篩查。
Canonical Correlation Analysis
Maximum Information Coeffcient
Kendall Correlation Coefficient
Euclidean distance
Mutual Information
寫在最後
這個世界很複雜,無法用一個指標或者量化方法理解所有現象。
使用指標時應根據現實數據情況採用不同的量化指標。
先採用數據可視化的方式觀察下數據間的大致關係,之後根據其結果選擇合適的量化指標。
數據可視化工具中可以同時展示關聯性指標的計算結果,有助於數據解讀。
Reference
https://en.wikipedia.org/wiki/Pearson_correlation_coefficient
https://en.wikipedia.org/wiki/Spearman%27s_rank_correlation_coefficient
https://anomaly.io/understand-auto-cross-correlation-normalized-shift/