1. 程式人生 > 實用技巧 >Matrix Profile 與 Stumpy (時間序列挖掘,矩陣畫像)

Matrix Profile 與 Stumpy (時間序列挖掘,矩陣畫像)

Matrix Profile 矩陣畫像 (下文中簡稱為MP)是由UCR(加州大學河濱分校)提出的一個時間序列的分析演算法——————————————————————————目錄:演算法簡介演算法庫演算法應用其他整合應用——————————————————————————演算法簡介通過一個時間序列,可計算出它的MP,MP也是一個向量(時間序列)下文的計算分解參考: https://stumpy.readthedocs.io/en/latest/Tutorial_The_Matrix_Profile.html 以下面的時間序列為例:[0, 1, 3, 2, 9, 1, 14, 15, 1, 2, 2, 10, 7]

比較兩個子序列的距離,以尤拉距離為例:
第一個子序列向後滑動逐個計算距離:

逐個計算後,會得到一個n*n的矩陣,取每行的最大值,得到的向量,即為MP

(中文定義摘自論文《基於矩陣畫像的金融時序資料預測方法》,但此定義也是翻譯自MP的英文論文,此處主要看計算距離的公式,不再是尤拉
還有一點需要注意的是,計算距離的矩陣,在取最小值時,會考慮exclusion zone,可以避免計算距離的兩個子序列是有較大重疊的帶來的影響。 exclusion zone 一般取 i ± int(np.ceil(m / 4))

演算法庫(工具)1. UCR提供的matrixprofile https://matrixprofile.docs.matrixprofile.org/Quickstart.html
2. STUMPY https://github.com/TDAmeritrade/stumpy 後面的演算法應用的例子,主要採用stumpy演算法應用1. motif發現與異常發現 https://stumpy.readthedocs.io/en/latest/Tutorial_STUMPY_Basics.htmlmotif挖掘(利用MP的最小值)異常發現(利用MP的最大值)下面是計程車乘客量的例子,與平常不一致的日期是一些節假日2. 時間鏈Time Series Chains https://stumpy.readthedocs.io/en/latest/Tutorial_Time_Series_Chains.html
在此處,時間鏈被認為是 隨著時間的推移在某個方向上演化或漂移的motif, 即重複出現的motif下圖是科顏氏在谷歌上的搜尋量的統計圖,可以看到彩色部分的波峰,具有一定的相似性

此處主要是利用stumpy計算返回後的陣列,mp = stumpy.stump(df['volume'], m=m) 會返回一個n*4的矩陣,每一列分佈表示:out : ndarray The first column consists of the matrix profile, MP值 the second columnconsists of the matrix profile indices, MP的索引,即第幾個子序列 the third column consists ofthe left matrix profile indices, MP的左索引,即與該子序列最為相似的左邊序列的索引 the fourth column consists ofthe right matrix profile indices. MP的右索引,即與該子序列最為相似的右邊序列的索引all_chain_set, unanchored_chain = stumpy.allc(mp[:, 2], mp[:, 3]) 計算得到的鏈
3. 場景分類 Semantic Segmentation https://stumpy.readthedocs.io/en/latest/Tutorial_Semantic_Segmentation.html 找到分界線Fast low-cost unipotent semantic segmentation (FLUSS),計算“arc curve” 標識時間序列區域更迭的可能性, ac標識跨過該節點的弧線的數量Fast low-cost online semantic segmentation (FLOSS) is a variation of FLUSS, 計算的是corrected arc curve (CAC) ,是一個單向的,可以處理實時時間流的資料。計算CAC,首先需要計算IAC,IAC是指跨過該節點的理想數量
此處使用的是動脈血壓的監測資料,陰影處為平放和豎直放的分界首先,需要計算arc curve ,使用的是mp的索引列
m = 210
mp = stumpy.stump(abp, m=m)
L = 210
cac, regime_locations = stumpy.fluss(mp[:, 1], L=L, n_regimes=2, excl_factor=1)   (L--子序列長度,n_regimes-分類數目,excl_factor——使圓弧曲線的起點和終點無效,取值在1-5)
4. 快速近似的MP計算 https://stumpy.readthedocs.io/en/latest/Tutorial_Fast_Approximate_Matrix_Profiles.html 使用scrump5. 對實時流的處理 https://stumpy.readthedocs.io/en/latest/Tutorial_Matrix_Profiles_For_Streaming_Data.html 使用stumpyi6. 快速模式識別 https://stumpy.readthedocs.io/en/latest/Tutorial_Pattern_Searching.html 輸入一個查詢序列,與一段時間序列,查詢最為相近的時間序列 例子中使用的資料為機器狗在不同區域(地毯carpet,水泥cement)走動時的加速器資料需要查詢匹配的序列:計算結果:
其他整合應用1. 基於矩陣畫像的金融時序資料預測方法這篇文章是用於預測股票市場首先是構建主要交易行為的序列知識庫(換手率?)進行模式匹配,文章說效果比arima和lstm好 2. 基於事件序列聚類的文獻主題分析研究通過NLP得到主題詞的關聯詞關聯詞的時間熱度使用MP計算時間熱度序列間的關聯度,最近鄰的作為連線,從而構建詞網使用社群挖掘的技術,進行挖掘,得到的團即為聚好的類