時間序列分析是一類經(jīng)典問題,常見的場景需求包括時序預(yù)測、時序分裂、時序聚類、異常檢測等。
作為一名算法工程師,當(dāng)調(diào)包遇上時間序列,有哪些好用的工具包呢?本篇首先介紹3個: tsfresh、tslearn、sktime 。
本 文主要對三個時序工具包進行簡要介紹, 包括工具包的功能定位、主要特色及優(yōu)劣勢等,并列出了相關(guān)的論 文、文檔和github地址可供詳細查閱 。
tsfresh工具包,是一個定位于時間序列特征工程相關(guān)的工具包,包括對時間序列自動提取特征、特征選擇、特征轉(zhuǎn)換等,最早于2018年由德國的幾名學(xué)者提出和開發(fā)。也正因為是定位于特征工程,所以 tsfresh本身是不能用于實現(xiàn)時序預(yù)測或者時序分類等任務(wù)的,但可以基于其特征提取的結(jié)果完成后續(xù)的操作 ,例如進行多時序聚類時首先應(yīng)用tsfresh完成對不同時序數(shù)據(jù)的特征是一個很好的選擇。
tsfresh接收的時序數(shù)據(jù)類型為pandas的dataframe格式,時序數(shù)據(jù)的組織形式既可以長表也可以是寬表。在其提取的特征中, 主要是關(guān)于時序數(shù)據(jù)的各項統(tǒng)計指標(biāo),例如最大最小值、均值、中位數(shù)、峰值 個數(shù)等等,另外也可以自定義一些參數(shù)來提取更為定制化的特征,直接調(diào)用extract_features函數(shù)大概會得到幾百個維度的特征提取結(jié)果,其中根據(jù)具體的時序數(shù)據(jù)取值可能會有較多的空值。
從某種意義上講,tsfresh提取的特征是關(guān)于時序數(shù)據(jù)的元特征,所以對于時序分類或聚類可能會更加有用,但用于時序預(yù)測則意義不大。
關(guān)于tsfresh的相關(guān)參考信息如下:
論文:https://doi.org/10.1016/j.neucom.2018.03.067文檔:https://tsfresh.readthedocs.io/en/latest/index.htmlGitHub:https://github.com/blue-yonder/tsfresh(6.1k star)
二、tslearn
tslearn,從其名字中大體可以推斷出這是一個用于對時序數(shù)據(jù)(time series)的機器學(xué)習(xí)相關(guān)工具包,其實際定位也確實如此。
該工具包是基于scikit-learn、numpy和scipy進行二次開發(fā)的工具包,所以其本質(zhì)上可看做是將scikit-learn中的主要功能面向時序數(shù)據(jù)進行了定制化的轉(zhuǎn)換和開發(fā) ,例如數(shù)據(jù)預(yù)處理、分類、回歸(預(yù)測是一種特殊形式的回歸任務(wù))以及聚類等功能,總體而言是功能相近、風(fēng)格一脈相承的。tslearn中主要支持的功能特性如下:
除了提供的功能與sklearn中的風(fēng)格和使用方式十分接近外,tslearn有一個比較具有優(yōu)勢的特性在于,tslearn可以與其他時序工具包進行整合使用,除了scikit-learn外,還有前面剛剛提到的tsfresh、后續(xù)要介紹的sktime以及pyts等等,某種程度上為了更加靈活快速的使用多個工具包提供了便利。
然而,就我個人而言,tslearn其實并沒有太大的吸引力,一方面其并未提供具有時序特色的獨立功能,而主要是對sklearn中相關(guān)模塊面向時序數(shù)據(jù)的定制化改造和適配,更別提時序數(shù)據(jù)中一系列經(jīng)典的統(tǒng)計學(xué)模型和近年來火熱的循環(huán)神經(jīng)網(wǎng)絡(luò)等;另一方面,該工具包的更新頻率是比較遲滯的,從github中可以看出其最近一次更新也在7個月前。
關(guān)于tslearn的相關(guān)參考信息如下:
論文:https://jmlr.org/papers/volume21/20-091/20-091.pdf文檔:https://tslearn.readthedocs.io/en/stable/quickstart.htmlGitHub:https://github.com/tslearn-team/tslearn/(1.9k star)
三、sktime
sktime與tslearn比較接近,也是一個scikit-learn風(fēng)格的時序分析工具包,主要功能大體也可分為時序預(yù)測、時序分類、時序回歸(與時序預(yù)測任務(wù)較為接近)、時序聚類等,其中有些功能屬于已經(jīng)比較成熟,而有些模塊則仍在實驗開發(fā)中。sktime工具包的功能特性如下:
雖然sktime與tslearn類似,同樣 延續(xù)了sklearn的API風(fēng)格(例如模型訓(xùn)練用fit、預(yù)測用predict,評分用score等等),但在功能上sktime卻并沒有太多sklearn中的元素,例如對于時序預(yù)測任務(wù),sktime中主要提供的是經(jīng)典的統(tǒng)計學(xué)模型系列(ARIMA,ETS,以及比較火熱的prophet等),同時也提供了模型Ensemble能力和AutoML功能(可便于模型自動調(diào)參和優(yōu)化)。
與此同時,sktime也集結(jié)了一些深度學(xué)習(xí)的模型,包括Transformer等,這也為sktime提供了更強的競爭力。
關(guān)于sktime的相關(guān)參考信息如下:
論文:https://arxiv.org/abs/1909.07872文檔:https://www.sktime.org/en/stable/index.htmlGitHub:https://github.com/alan-turing-institute/sktime(4.8k star)
四、小結(jié)
總體而言,三個時序工具包各有特色,提供的功能也互為補充:
在實際使用過程中,三個工具包本無優(yōu)劣高下之分,需靈活選取調(diào)用,這樣才不失為一名優(yōu)秀的算法工程師調(diào)包俠。