時間序列特征提取:18 種高效工具庫及其應用分析
時間序列特征提取是數據科學工作流程中的關鍵環節,能夠將原始時間序列數據轉化為具有分析價值的特征表示。本文詳細介紹 18 種專業的 Python 庫,這些庫可用于從時間序列數據中提取關鍵特征,支持數據科學家進行更深入的分析與建模。
時間序列特征提取的理論基礎與價值
時間序列特征是對時間序列數據的統計量化表示,例如均值、方差、季節強度等指標。特征提取在時間序列分析中具有多重價值:
首先,特征提取提供了統一的數據表示方法。不同時間序列可能具有不同長度和采樣頻率,通過將其轉換為固定維度的特征向量,可實現降維處理并使不同序列間的比較更加標準化和有意義。
其次,提取的特征具有較高的可解釋性。通過諸如季節性強度、趨勢變化率等指標,分析人員能夠快速理解時間序列的基本結構和動態特性,而這些洞察往往難以直接從原始數據點中獲取。
第三,精心設計的特征可顯著提升模型性能。在聚類、分類或預測等多種機器學習任務中,良好的特征工程通常比復雜的模型架構更能提高最終效果。
鑒于時間序列特征提取的重要性,學術界和工業界開發了眾多專業框架。下文將詳細介紹 18 個基于 Python 的框架,這些框架涵蓋了通用特征提取以及針對特定領域(如醫療健康、金融)和特定任務(如預測、異常檢測)的專業化特征。
以下框架按功能特點進行介紹,而非按重要性排序。
1、 tsfeatures
tsfeatures 是時間序列特征提取領域的開創性框架,提供了豐富的特征集,包括基于自相關函數的特征、分解統計特征、熵測量以及平穩性檢驗等。
該框架最初設計用于預測模型選擇,特別是在組合預測模型方面表現突出。基于 tsfeatures 開發的 FFORMA(特征型預測模型平均)方法在著名的 M4 預測競賽中獲得第二名的優異成績,驗證了其特征提取的有效性。
tsfeatures 最初在 R 語言環境中開發,后由 Nixtla 團隊實現了同名的 Python 版本。Python 版本與 Nixtla 的時間序列分析生態系統實現了良好集成,提供了一致的用戶體驗。對于 R 用戶,feasts 包提供了 tsfeatures 與 tsibble 和 tidyverse 的集成,并擴展了額外功能。
資源鏈接:https://github.com/Nixtla/tsfeatures
2、 tsfresh
tsfresh 是一個綜合性的時間序列特征提取框架,其核心優勢在于能自動計算數百種特征,并通過統計檢驗方法篩選出最相關且非冗余的特征子集。
該框架與 scikit-learn 生態系統完全兼容,可無縫集成到機器學習工作流中。此外,tsfresh 支持用戶自定義特征,允許研究人員將領域知識融入特征工程流程中,從而提高模型的適應性和精確度。
資源鏈接:https://tsfresh.readthedocs.io/en/latest/index.html
3、 tsfel
tsfel(時間序列特征提取庫)是另一個專業的時間序列特征提取 Python 庫,提供了全面的特征提取功能。
tsfel 的特征體系分為四個主要類別:統計類特征(如熵測量、基于直方圖的特征)、時域特征(如自相關系數)、頻域特征(如功率譜密度)以及分形特征(如去趨勢波動分析)。這種多維度的特征體系使其能夠捕捉時間序列的不同方面。
tsfel 的一個顯著優勢是其考慮了計算資源約束的場景,特別適用于從嵌入式設備(如可穿戴設備)收集的數據分析。實證研究表明,tsfel 在人類活動識別、康復監測和異常檢測等應用中表現出色。研究[1]進一步證實,相較于其他同類工具,tsfel 在計算效率方面具有明顯優勢。
資源鏈接:https://github.com/fraunhoferportugal/tsfel
4、 TODS
TODS(時間序列異常檢測系統)是一個專為多元時間序列異常檢測設計的自動化框架。
除了提供各種異常檢測算法外,TODS 還包含了豐富的時間序列預處理和特征提取功能。其特征集涵蓋了從基本統計量(如均值、方差)到高級時間序列濾波器(如 Baxter-King 濾波器、Hodrick-Prescott 濾波器)以及小波變換等技術,這些工具能有效識別時間序列中的異常模式。
資源鏈接:https://tods-doc.github.io/index.html
5、 librosa
librosa 是一個專門用于音樂和音頻數據分析的 Python 庫,其應用場景特別聚焦于音頻信號處理。
從數據科學的角度看,音頻信號本質上是一種特殊的時間序列,表示聲壓隨時間的變化。下圖展示了一個鼓點節奏逐漸加快的梅爾頻譜圖:
在音頻分析中,特征提取是基礎工作,librosa 提供了多種專業特征,包括:
- 譜質心,用于量化聲音的"亮度"
- 梅爾頻率倒譜系數 (MFCC),作為音色的低維表示
- 色度特征,用于和聲分析
- 過零率,反映信號頻率變化特性
這些特征在音頻處理中各自捕獲不同的聲學屬性。盡管 librosa 主要針對音頻數據,其提供的特征提取方法同樣可應用于其他領域的時間序列數據分析。
資源鏈接:https://librosa.org/doc/main/tutorial.html
6、 mlforecast
mlforecast 是 Nixtla 預測生態系統中的核心組件,提供了基于機器學習算法構建預測模型的完整框架。
該庫的特點是提供了系統化的特征工程流程,尤其適用于時間序列預測任務。通過 mlforecast 的 lag_transform 功能,用戶可以進行基于窗口的特征提取操作,例如簡便地構建移動平均特征,該特征能有效概括每個時間點前序列的平均水平,為預測提供重要信息。
資源鏈接:https://nixtlaverse.nixtla.io/mlforecast/docs/how-to-guides/lag_transforms_guide.html
7、 eeglib
eeglib 是一個專門用于腦電圖(EEG)時間序列分析的 Python 庫,通過特征提取技術解析神經電生理數據。
考慮到腦電信號的特殊性,eeglib 包含了一系列在其他通用庫中不常見的特征提取方法,這些方法特別適用于神經信號分析:
- Petrosian 和 Higuchi 分形維數,用于量化信號的復雜度
- Hjorth 參數,描述信號的活動度、移動度和復雜度
- 去趨勢波動分析,測量長程相關性
- Lempel-Ziv 復雜度,評估信號的隨機性
這些特征在癲癇發作檢測、睡眠階段分類和腦機接口等神經科學應用中具有顯著價值。
資源鏈接:https://eeglib.readthedocs.io/en/latest/index.html
8、 pywavelets
PyWavelets 是一個專業的小波變換庫,提供了全面的小波分析工具,包括正向和逆向離散小波變換、連續小波變換等多種變換方法。
小波變換是一種先進的信號處理技術,能將時間序列分解為多尺度成分,揭示信號在不同頻率和時間尺度上的特性。這種分解可用于提取高信息量的特征,支持下游分類或異常檢測任務。研究文獻[2]展示了一個實際應用案例,其中基于 Meyer 小波的離散小波分解被用于提取不同頻帶的相對能量,以預測醫院 ICU 中的低血壓事件發生。
資源鏈接:https://pywavelets.readthedocs.io/en/latest/index.html
9、 hctsa
hctsa(高度比較時間序列分析)是一個基于 Matlab 開發的綜合時間序列特征提取工具,通過 PYOPY 包可在 Python 環境中使用。
hctsa 的特點是能生成數千種特征類型,包括基于經驗模式分解、可見性圖、信息論度量等高級特征。這種大規模的特征集雖然在實際應用中可能顯得過于龐大,但對于數據科學家探索新穎特征和拓展特征工程思路具有重要參考價值。
資源鏈接:https://github.com/benfulcher/hctsa
10、 catch22
catch22(CAnonical 時間序列特征)是從 hctsa 中精選出的 22 個時間序列特征子集,這些特征專為時間序列分類任務優化選擇。此精簡子集在保持可比分類性能的同時,顯著提高了計算效率。
catch22 同樣基于 Matlab 開發,但已有 Python (pycatch22) 和 R (Rcatch22) 語言的實現,方便不同技術棧的用戶使用。
資源鏈接:https://github.com/DynamicsAndNeuralSystems/catch22
11、 ta-lib
ta-lib 是一個專為金融時間序列技術分析設計的庫,包含了數百種技術指標,例如廣泛應用的移動平均收斂/發散 (MACD) 和相對強度指數 (RSI) 等。
雖然 ta-lib 主要面向金融領域,但其技術指標和特征提取方法同樣適用于其他類型的時間序列分析。ta-lib 中的許多特征專門設計用于應對金融時間序列中常見的高噪聲環境,這一特性使其在處理其他領域的噪聲數據時也具有應用價值。
資源鏈接:https://ta-lib.org/functions/
12、 nolds
nolds(動態系統的非線性度量)是一個基于動態系統理論的庫,提供了一系列從時間序列中提取非線性特征的工具。
非線性時間序列分析將序列視為復雜系統的表現,這種視角使得可以應用多種動態系統分析技術。nolds 提供的方法包括:
- Lyapunov 指數,用于量化序列的混沌程度和可預測性
- 相關維數,評估序列的復雜度和嵌入維度
- Hurst 指數,測量序列的長期自相關性和持久性
這些非線性特征能捕捉傳統線性分析方法難以識別的時間序列模式。
資源鏈接:https://pypi.org/project/nolds/
13、 scipy
scipy 作為科學計算的基礎庫,其中包含許多可用于時間序列特征提取的功能模塊。除了基本統計函數外,scipy 的信號處理模塊提供了豐富的分析工具:
- 頻譜分析功能,通過周期圖或頻譜圖提取頻域特征
- 多種濾波器實現,包括帶通、低通或高通濾波器
- 精確的峰值檢測算法,對于基于事件的時間序列分析尤為重要
scipy 的主要優勢在于其計算效率(核心組件用 C/C++ 實現)和穩定性。作為一個自 2000 年代初就存在的成熟庫,scipy 與其他科學計算生態系統的集成度極高。
資源鏈接:https://docs.scipy.org/doc/scipy/index.html
14、 statsmodels
statsmodels 雖主要定位于計量經濟學和統計建模,但其中的多個模塊可有效用于時間序列特征提取。
statsmodels 的時間序列分析(tsa)模塊包含了多種高級技術,如季節性分解、平穩性檢驗、季節性測試和時間序列建模方法。這些功能可用于提取描述時間序列關鍵屬性的特征。值得注意的是,前文提到的一些特征提取框架(如 tsfeatures、tsfel)在內部實現中也使用了 statsmodels 提供的計算功能。
與 scipy 類似,statsmodels 也是一個歷經驗證的成熟庫,其實現穩定可靠,適合用于生產環境。
資源鏈接:https://www.statsmodels.org/stable/index.html
15、 Featuretools
Featuretools 是一個針對時間數據庫和關系數據庫的自動化特征工程框架,其核心技術"深度特征合成"能夠從輸入數據庫構建綜合特征矩陣。
在時間序列分析方面,Featuretools 包含了多種基于事件的特征提取方法:
- 時間間隔特征,如自上次特定值或統計量(最大值、最小值等)出現以來的時間
- 基于計數的指標,如大于特定閾值的連續值數量
- 時間相關特征,如與節假日的距離(天數)
這類特征在對時間序列中的事件或特殊日期進行建模時(如零售銷售分析、用戶行為建模)具有重要價值。
資源鏈接:https://featuretools.alteryx.com/en/stable/index.html
16、 FATS
FATS(時間序列特征分析)是一個專為天文光變曲線數據設計的特征提取框架,針對天體物理學研究中的時間序列分析進行了優化。
雖然 FATS 中的大多數特征最初設計用于區分不同類別的光變曲線,但這些特征同樣適用于其他時間序列數據的分析。天文光變曲線數據通常具有不規則采樣和多重周期性等特點,因此 FATS 提供的特征集對于具有類似特性的時間序列數據分析具有參考價值。
資源鏈接:https://isadoranun.github.io/tsfeat/
17、 Cesium
Cesium 是一個集成了時間序列特征提取和建模功能的 Python 庫,專注于天文數據分析但具有廣泛適用性。
Cesium 提取的特征包括基于 Lomb-Scargle 模型的統計量和節奏度量等。后者能估計下一次觀測出現在特定時間范圍內(如接下來 10 分鐘內)的概率分布,這類特征對于客戶到達預測、事件觸發建模等應用場景具有重要意義。
資源鏈接:https://cesium-ml.org/docs/index.html
18、 Kats
Kats 是 Facebook Research 開發的時間序列分析庫,其特征提取模塊是該庫的核心組件之一。
雖然 Kats 的基礎特征集與其他特征提取庫有相當程度的重疊,但它特別強調了適用于異常檢測和短期預測的專門特征。這些包括多種變化點檢測方法產生的估計結果,如 CUSUM(累積和控制圖)等技術,這些特征能有效識別時間序列中的結構性變化。
資源鏈接:https://github.com/facebookresearch/Kats
總結
本文綜述了 18 個時間序列特征提取庫,這些庫針對不同領域(如音頻分析、醫療健康、金融)和不同任務(如預測、分類、異常檢測)提供了專業化的特征提取功能。這些庫的多樣性反映了時間序列數據的復雜性,以及分析此類數據所需的多元化方法論。
盡管這些框架之間存在功能重疊,但它們也在各自專注的領域提供了獨特價值。在實際應用中,數據科學家可以根據具體需求組合使用這些工具。例如,可以使用 tsfel 獲取全面的基礎特征集,同時結合 nolds 提供的非線性度量來捕捉更復雜的時間序列模式。