2022年十個用于時間序列分析的Python庫推薦
時間序列是數據點的序列,通常由在一段時間間隔內進行的連續測量組成。時間序列分析是使用統計技術對時間序列數據進行建模和分析,以便從中提取有意義的信息并做出預測的過程。
時間序列分析是一個強大的工具,可以用來從數據中提取有價值的信息,并對未來的事件做出預測。它可以用來識別趨勢、季節模式和變量之間的其他關系。時間序列分析還可以用來預測未來的事件,如銷售、需求或價格變動。
如果你正在使用Python處理時間序列數據,那么有許多不同的庫可以選擇。所以在本文中,我們將整理Python中最流行處理時間序列的庫。
Sktime
Sktime是一個用于處理時間序列數據的Python庫。它提供了一組處理時間序列數據的工具,包括用于處理、可視化和分析數據的工具。Sktime的設計是易于使用和可擴展的,這樣新的時間序列算法就可以很容易地實現并且進行集成。
Sktime正如其名,它支持scikit-learn API,包含了有效解決涉及時間序列回歸、預測和分類問題的所有必要方法和工具。該庫包含專門的機器學習算法以及時間序列的獨特的轉換方法,在其他庫中并沒有提供,所以Sktime可以作為一個非常好的基礎庫。
根據sktime的文檔,“我們的目標是使時間序列分析生態系統作為一個整體更具互操作性和可用性。Sktime為不同但相關的時間序列學習任務提供了統一的接口。它的特點是專門的時間序列算法和工具,用于組合模型的構建,包括流水線管道、集成、調優和簡化,使用戶可以將一個任務的算法應用到另一個任務。
sktime還提供與相關庫的接口,例如scikit-learn、statsmodels、tsfresh、PyOD和[fbprophet]等等。”
下面是一個代碼樣例
from sktime.datasets import load_airline
from sktime.forecasting.model_selection import temporal_train_test_split
# from sktime.utils.plotting.forecasting import plot_ys
y = load_airline()
y_train, y_test = temporal_train_test_split(y)
plt.title('Airline Data with Train and Test')
y_train.plot(label = 'train')
y_test.plot(label = 'test')
plt.legend()
pmdarima
pmdarima是一個用于時間序列數據統計分析的Python庫。它基于ARIMA模型并且提供了各種分析、預測和可視化時間序列數據的工具。Pmdarima還提供了處理季節性數據的各種工具,包括季節性測試和季節性分解工具。
在時間序列分析中經常使用的預測模型之一是ARIMA(自回歸綜合移動平均)。ARIMA是一種預測算法,可以根據時間序列的過去值中的信息來預測未來的值。
pmdarima是ARIMA模型的包裝器,它自帶一個自動超參數搜索函數,可以自動為ARIMA模型找到最佳超參數(p,d,q)。該庫包括下面一些主要的功能點:
- 一組關于平穩性和季節性的統計測試
- 時間序列效用,如差分和逆差分
- 眾多的內生和外生轉換器和特征化器,包括Box-Cox和傅立葉變換
- 季節時間序列分解
- 交叉驗證工具
- 內置一個豐富的可用于原型和示例的時間序列數據集集合
AutoTS
顧名思義,它是一個用于自動時間序列分析的 Python 庫。AutoTS 允許我們用一行代碼訓練多個時間序列模型,以便我們可以選擇最適合的模型。
該庫是 autoML 的一部分,其目標是為初學者提供自動化庫。
TSFresh
tsfresh是一個可以自動從時間序列中提取特征的Python包。它基于時間序列中的信息可以分解為一組有意義的特征來實現的。tsfresh 負責手動提取這些特征的繁瑣任務,并提供自動特征選擇和分類的工具。它可以與 pandas DataFrames 一起使用,并提供廣泛的用于處理時間序列數據的函數,包括:
- 從時間序列中自動提取特征
- 自動特征選擇
- 時間序列分解
- 降維
- 異常值檢測
- 支持多種時間序列格式
- 支持缺失值
- 支持多種語言
Prophet
Prophet是由Facebook核心數據科學團隊發布的開源軟件。它基于一個相加模型,其中非線性趨勢適合每年、每周和每日的季節性,加上假日效應。它最適合具有強烈季節性效應的時間序列和幾個季節的歷史數據。Prophet對于缺失的數據和趨勢的變化具有很強的魯棒性,通常能夠很好地處理異常值。
根據官方文檔,fbprophet在處理具有顯著季節性影響的時間序列數據和幾個季節價值的之前數據時工作得非常好。此外fbprophet能夠抵抗缺失數據,并能夠有效地管理異常值。
Statsforecast
Statsforecast提供了一組廣泛使用的單變量時間序列預測模型,包括自動ARIMA和ETS建模并使用numba優化。它還包括大量的基準測試模型。根據官網的介紹:
- Python和R中最快最準確的AutoARIMA。
- Python和R中最快最準確的ETS。
- 兼容sklearn接口。
- ARIMA的外生變量和預測區間的包含。
- 比pmdarima快20倍,比Prophet快500倍,比NeuralProphet快100倍,比statmodels快4倍。
- 通過numba編譯為高性能機器代碼。
- 開箱即用的實現ADIDA, HistoricAverage, CrostonClassic, CrostonSBA, CrostonOptimized, seasonalwindowaaverage, SeasonalNaive, IMAPA Naive, RandomWalkWithDrift, windowaaverage, SeasonalExponentialSmoothing, TSB, AutoARIMA和ETS。
kats
Kats 是 Facebook 研究團隊最近開發的另一個專門處理時間序列數據的庫。該框架的目標是為解決時間序列問題提供一個完整的解決方案。使用此庫,我們可以執行以下操作:
- 時間序列分析
- 模式檢測,包括季節性、異常值、趨勢變化
- 產生65個特征的特征工程模塊
- 對時間序列數據建立預測模型,包括Prophet、ARIMA、Holt Winters等。
Darts
Darts 是由 Unit8.co 開發的用于預測時間序列,并且對scikit-learn 友好 的Python 包。它包含大量模型,從 ARIMA 到深度神經網絡,用于處理與日期和時間相關的數據。
該庫的好處在于它還支持用于處理神經網絡的多維類。
它還允許用戶結合來自多個模型和外部回歸模型的預測,從而更容易地對模型進行回測。
Pyflux
Pyflux 是一個為 Python 構建的開源時間序列庫。Pyflux選擇了更多的概率方法來解決時間序列問題。這種方法對于需要更完整的不確定性的預測這樣的任務特別有利。
用戶可以建立一個概率模型,其中通過聯合概率將數據和潛在變量視為隨機變量。
PyCaret
PyCaret是一個基于Python的開源、低代碼的機器學習庫,它是一個端到端機器學習和模型管理工具,可以成倍地加快實驗周期,讓工作效率更高。
與其他開源機器學習庫相比,PyCaret是一個可替代的低代碼庫,可以只用幾行代碼替換數百行代碼。這使得實驗的速度和效率呈指數級增長。PyCaret本質上是scikit-learn、XGBoost、LightGBM、CatBoost、spacacy、Optuna、Hyperopt、Ray等幾個機器學習庫和框架的Python包裝。
雖然PyCaret不是一個專門的時間序列預測庫,但它有一個專門用于時間序列預測的新模塊。它仍然處于預發布狀態,但是安裝時需要使用以下代碼進行安裝才能使用新的模塊
pip install --pre pycaret
PyCaret時間序列模塊與現有的API一致,并且可以使用完整的功能,例如:統計測試、模型訓練和選擇(30+算法模型)、模型分析、自動超參數調優、實驗日志、云部署等。所有這些都只用了幾行代碼就完成了。
總結
Python中有許多可用的時間序列預測庫(比我們在這里介紹的更多)。每個庫都有自己的優缺點,因此根據自己的需要選擇合適的是很重要的。如果你有什么更好的推薦,請留言告訴我們。