學(xué)AI,好工作 就找北大青鳥(niǎo)
關(guān)注小青 聽(tīng)課做題,輕松學(xué)習(xí)
周一至周日
4000-9696-28

一文教你如何輕松實(shí)戰(zhàn)Python時(shí)間序列數(shù)據(jù)挖掘

來(lái)源:北大青鳥(niǎo)總部 2023年02月14日 16:00

摘要: 本文將介紹時(shí)間序列數(shù)據(jù)挖掘開(kāi)源庫(kù)——MatrixProfile,并在Python的環(huán)境下使用高效簡(jiǎn)潔的程序來(lái)完成復(fù)雜的時(shí)間序列數(shù)據(jù)挖掘。

前言

隨著云計(jì)算和物聯(lián)網(wǎng)(IoT)的急速發(fā)展,我們無(wú)時(shí)無(wú)刻都被時(shí)間序列數(shù)據(jù)包圍著。從經(jīng)濟(jì)管理再到工程領(lǐng)域,時(shí)間序列數(shù)據(jù)挖掘有著廣泛應(yīng)用。例如證券市場(chǎng)中股票的交易價(jià)格與交易量、外匯市場(chǎng)上的匯率、期貨和黃金的交易價(jià)格以及各種類型的指數(shù)等,這些數(shù)據(jù)都形成一個(gè)持續(xù)不斷的時(shí)間序列。利用時(shí)間序列數(shù)據(jù)挖掘,可以獲得數(shù)據(jù)中蘊(yùn)含的與時(shí)間相關(guān)的有用信息,實(shí)現(xiàn)知識(shí)的提取。時(shí)間序列數(shù)據(jù)挖掘是大數(shù)據(jù)挖掘研究領(lǐng)域里的一個(gè)重要方向之一。

眾所周知,時(shí)間序列數(shù)據(jù)本身所具備的高維性、復(fù)雜性、動(dòng)態(tài)性、高噪聲特性以及容易達(dá)到大規(guī)模的特性。因此如何輕松進(jìn)行時(shí)間序列數(shù)據(jù)挖掘是具有大挑戰(zhàn)性。本文將介紹時(shí)間序列數(shù)據(jù)挖掘開(kāi)源庫(kù)——MatrixProfile,并在Python的環(huán)境下使用高效簡(jiǎn)潔的程序來(lái)完成復(fù)雜的時(shí)間序列數(shù)據(jù)挖掘。


MatrixProfile 工作原理

MatrixProfile的基本原理很簡(jiǎn)單??梢韵仍囅胍粋€(gè)問(wèn)題,如果從時(shí)間序列數(shù)據(jù)中提取一個(gè)片段并沿著時(shí)間序列的其余部分滑動(dòng),那么它在每個(gè)新位置與時(shí)間序列片段的重疊相似的程度是什么樣子的?更具體地說(shuō),我們可以計(jì)算子序列與同一長(zhǎng)度的每個(gè)時(shí)間序列片段之間的歐幾里德距離,從而建立所謂的時(shí)間序列片段的距離模式(distanceprofile)。

如果子序列在數(shù)據(jù)中重復(fù)自身,則將至少有一個(gè)完全匹配,并且最小歐氏距離將為零(或在存在噪聲的情況下接近于零)。如圖所示,如果提取的子序列為重復(fù)模式(RepeatedPatterns)片段,那么重復(fù)模式片段沿著整個(gè)時(shí)間序列滑動(dòng)時(shí),與自身重復(fù)片段的最小歐式距離為零(紅色部分)。從紅色曲線可以看出,相比之下,如果子序列是高度唯一的(比如它包含一個(gè)顯著的異常值),那么匹配將很差(藍(lán)色曲線中的anomaly)。然后,在時(shí)間序列中滑動(dòng)每個(gè)可能的片段,建立一個(gè)距離模式的集合。


MatrixProfile 工作原理示意圖


MatrixProfile主要是進(jìn)行識(shí)別異常事件(或不協(xié)調(diào)“discords”)和重復(fù)模式(或模體“motifs”)。這是兩項(xiàng)基本的時(shí)間序列任務(wù)。其中MatrixProfile分為兩個(gè)重要組成部分:距離模式(distanceprofile)和模式索引(profileindex)。距離模式是歸一化最小歐氏距離向量。模式索引包含其第一近鄰索引。換句話說(shuō),它是其最相似子序列的位置。

MatrixProfile主要采用了用滑動(dòng)窗口的算法來(lái)計(jì)算,如下圖所示。圖中的滑動(dòng)窗口X2到X5在時(shí)間序列(X1,…,X12)上滑動(dòng),分別計(jì)算滑動(dòng)窗口與每個(gè)子序列的點(diǎn)積。當(dāng)計(jì)算完所有的點(diǎn)積(D1,2,…,D9,2)后,應(yīng)用排除區(qū)域(exclusionzone)進(jìn)行處理。并將最小距離存儲(chǔ)在MatrixProfile的距離模式中,丟棄其余的距離。其中,由于子序列是從時(shí)間序列本身提取的,因此需要設(shè)置圖中排除區(qū)域來(lái)防止無(wú)價(jià)值匹配。比如,子序列片段(X1,X2,X3,X4)與滑動(dòng)窗口(X2,X3,X4,X5)相似度非常高,被視為無(wú)價(jià)值匹配或平凡匹配。


MatrixProfile 滑動(dòng)窗口動(dòng)態(tài)圖解


MatrixProfile API(MPA)應(yīng)用接口庫(kù)

MatrixProfile庫(kù)支持三種最常用的數(shù)據(jù)科學(xué)語(yǔ)言Python、R和Golang。它提供易于使用的接口函數(shù)MatrixProfileAPI(MPA),這是一個(gè)用R、Python和Golang編寫(xiě)的通用代碼庫(kù)。不管是對(duì)時(shí)間序列分析毫無(wú)經(jīng)驗(yàn)的新手還是專家都很有幫助。而且它已經(jīng)被廣泛地使用,包括如何挖掘網(wǎng)站用戶數(shù)據(jù)、訂單量和其他關(guān)鍵業(yè)務(wù)應(yīng)用之間的關(guān)系。下面使用Python來(lái)進(jìn)行實(shí)戰(zhàn)訓(xùn)練。

MPA由三個(gè)核心組件組成:

  • 計(jì)算(分析數(shù)據(jù)的各個(gè)成分,例如趨勢(shì),周期性)

  • 發(fā)現(xiàn)(對(duì)有序數(shù)據(jù)序列的feature提取與分類、發(fā)現(xiàn)不協(xié)調(diào)序列等)

  • 可視化(通過(guò)基本繪圖顯示結(jié)果)

這三個(gè)核心功能作為底層嵌套在具有用戶可視化的界面Analyze的模塊里面,可以使那些對(duì)MatrixProfile內(nèi)部工作原理一無(wú)所知的人能夠快速地利用它來(lái)處理自己的時(shí)間序列數(shù)據(jù)。


實(shí)戰(zhàn)分析

首先需要配置MatrixProfile的安裝環(huán)境,建議使用Anaconda。Anaconda是一個(gè)用于科學(xué)計(jì)算的Python發(fā)行版,內(nèi)置很多用于學(xué)計(jì)算工具Python第三方庫(kù),非常方便使用。然后,在AnacondaPrompt終端使用下面語(yǔ)句來(lái)安裝MatrixProfile庫(kù)。

pipinstall matrixprofile

安裝完后,我們將使用MatrixProfile API(MPA)應(yīng)用接口庫(kù)來(lái)分析如下所示的合成時(shí)間序列。


Python環(huán)境下使用MPA合成時(shí)間序列數(shù)據(jù)


合成時(shí)間序列生成代碼如下:

import matrixprofile as mp

import numpy as np

from matplotlib import pyplot as plt

dataset =mp.datasets.load('motifs-discords-small')

window_size = 32

profile = mp.compute(dataset['data'],window_size)

profile = mp.discover.discords(profile)

# time series

mp_adjusted = np.append(profile['mp'],np.zeros(profile['w'] - 1) + np.nan)

# Create a plot

plt.plot(np.arange(len(profile['data']['ts'])),profile['data']['ts'])


從合成的時(shí)間序列數(shù)據(jù)圖中可以發(fā)現(xiàn),明顯存在模式不協(xié)調(diào)現(xiàn)象。圖中前面是規(guī)律震蕩變化的正弦曲線模式,而后面是兩種不同的模式。然而,一個(gè)直接的問(wèn)題是,該如何選擇子序列長(zhǎng)度。圖中橫坐標(biāo)0-500范圍內(nèi)是否只有兩個(gè)正弦模體?我們可以使用應(yīng)用接口庫(kù)MPA中的analyze函數(shù)來(lái)自動(dòng)處理這個(gè)問(wèn)題,完整程序代碼如下。


import matrixprofile as mp

import numpy as np

from matplotlib import pyplot as plt

dataset =mp.datasets.load('motifs-discords-small')

window_size = 32

profile = mp.compute(dataset['data'],window_size)

profile = mp.discover.discords(profile)

profile, figures =mp.analyze(profile['data']['ts'])

由于沒(méi)有指定任何關(guān)于子序列長(zhǎng)度的信息,“analyze”首先利用稱為panmatrix profile(簡(jiǎn)稱PMP)的強(qiáng)大計(jì)算來(lái)生成有助于評(píng)估不同子序列長(zhǎng)度的模式圖,如下所示。


所有可能的子序列長(zhǎng)度的全局計(jì)算模式圖


簡(jiǎn)而言之,它是對(duì)所有可能的子序列長(zhǎng)度的全局計(jì)算,并壓縮為一個(gè)可視化模式圖。X軸是矩陣模式的索引,Y軸是相應(yīng)的子序列長(zhǎng)度。圖中顏色越暗,代表歐幾里德距離就越低。

這里,analyze函數(shù)將結(jié)合PMP和一個(gè)隱藏的算法,從所有可能的滑動(dòng)窗口大小中選擇合理的模體和不協(xié)調(diào)。由“analyze”創(chuàng)建的附加圖形顯示前三個(gè)模體和前三個(gè)不協(xié)調(diào),以及相應(yīng)的窗口大小和在矩陣模式中的索引位置(以及擴(kuò)展的時(shí)間序列)。



下圖中藍(lán)色部分代表合成時(shí)間序列數(shù)據(jù),紅色部分代表模體,黑色部分是相似近鄰。



這里采用的是程序默認(rèn)的參數(shù),運(yùn)行后會(huì)自動(dòng)得到很多結(jié)果。我們也可以更改滑動(dòng)窗口的大小。程序會(huì)自動(dòng)找出不協(xié)調(diào)的點(diǎn),如下圖所示。


profile,figures = mp.analyze(profile['data']['ts'],windows=203)


滑動(dòng)窗口大小為203時(shí),出現(xiàn)不協(xié)調(diào)的點(diǎn)(紅色五角星)


比起常規(guī)的時(shí)間序列挖掘算法,MatrixProfileAPI(MPA)應(yīng)用接口庫(kù)提供了一個(gè)較為簡(jiǎn)潔的方式,能讓你更輕松地分析和挖掘時(shí)間序列數(shù)據(jù),當(dāng)然,上面只是采用了MPA內(nèi)置函數(shù)默認(rèn)的參數(shù)來(lái)進(jìn)行說(shuō)明。如果想進(jìn)一步了解MPA的用法,并將其應(yīng)用到自己特定的應(yīng)用場(chǎng)景中,可以在網(wǎng)上查找MPA官方使用手冊(cè)。


標(biāo)簽: python
熱門(mén)班型時(shí)間
人工智能就業(yè)班 即將爆滿
AI應(yīng)用線上班 即將爆滿
UI設(shè)計(jì)全能班 即將爆滿
數(shù)據(jù)分析綜合班 即將爆滿
軟件開(kāi)發(fā)全能班 爆滿開(kāi)班
網(wǎng)絡(luò)安全運(yùn)營(yíng)班 爆滿開(kāi)班
報(bào)名優(yōu)惠
免費(fèi)試聽(tīng)
課程資料
官方微信
返回頂部
培訓(xùn)課程 熱門(mén)話題 站內(nèi)鏈接