作為一位多產的作家,我邀請您在亞馬遜上探索我的書籍。請記住要關注我在 Medium 上的工作以獲得持續的見解和支持。 您的參與非常寶貴!
Python 在時間序列分析方面的能力是不可否認的,它提供了豐富的庫和技術生態系統,用於高效的時態資料處理。 作為一名資料科學家,我親眼目睹了掌握這些工具如何顯著提高我們從基於時間的資訊中獲取有意義的見解並建立準確的預測模型的能力。
Pandas 構成了許多基於 Python 的時間序列分析的基礎。 它的 DatetimeIndex
和相關函數簡化了日期和時間操作。我經常利用 Pandas 進行初步資料清理、重採樣和基本視覺化。 將每日數據重新取樣為月平均值,例如:
<code class="language-python">import pandas as pd # Assuming 'df' is your DataFrame with a DatetimeIndex monthly_avg = df.resample('M').mean()</code>
這在處理需要聚合進行分析或報告的高頻資料時特別有用。
Statsmodels 提供了先進的時間序列統計建模工具。它實現了許多經典模型,包括 ARIMA(自回歸綜合移動平均線)。 擬合 ARIMA 模型:
<code class="language-python">from statsmodels.tsa.arima.model import ARIMA # Fit the model model = ARIMA(df['value'], order=(1,1,1)) results = model.fit() # Make predictions forecast = results.forecast(steps=30)</code>
ARIMA 模型擅長短期預測,有效捕捉趨勢和季節性。
Facebook 的 Prophet 庫以其用戶友好的介面和強大的季節性處理而聞名。它特別適合具有強烈季節性影響的業務時間序列和多個季節的歷史資料。 一個基本的先知例子:
<code class="language-python">from prophet import Prophet # Prepare the data df = df.rename(columns={'date': 'ds', 'value': 'y'}) # Create and fit the model model = Prophet() model.fit(df) # Make future predictions future = model.make_future_dataframe(periods=365) forecast = model.predict(future)</code>
Prophet 自動偵測每年、每週和每天的季節性,這在許多業務環境中可以顯著節省時間。
Pyflux 對於貝葉斯推理和機率時間序列建模很有價值。它允許複雜的模型規範並提供各種推理方法。 使用 Pyflux 擬合簡單的 AR 模型:
<code class="language-python">import pyflux as pf model = pf.ARIMA(data=df, ar=1, ma=0, integ=0) results = model.fit('MLE')</code>
Pyflux 的優點在於它的適應性以及將先驗知識融入模型的能力。
Tslearn 是一個專注於時間序列資料的機器學習庫,對於動態時間扭曲和時間序列聚類等任務特別有用。 執行 k 均值聚類:
<code class="language-python">from tslearn.clustering import TimeSeriesKMeans kmeans = TimeSeriesKMeans(n_clusters=3, metric="dtw") clusters = kmeans.fit_predict(time_series_data)</code>
這對於識別模式或對相似的時間序列進行分組非常有用。
Darts,一個較新的庫,正迅速成為人們的最愛。 它為許多時間序列模型提供了統一的接口,簡化了不同預測方法的比較。 模型與 Dart 的比較:
<code class="language-python">from darts import TimeSeries from darts.models import ExponentialSmoothing, ARIMA series = TimeSeries.from_dataframe(df, 'date', 'value') models = [ExponentialSmoothing(), ARIMA()] for model in models: model.fit(series) forecast = model.predict(12) print(f"{type(model).__name__} MAPE: {model.mape(series, forecast)}")</code>
這有助於快速試驗各種模型,這對於找到最適合您的數據至關重要。
有效處理缺失值至關重要。 策略包括向前/向後填充:
<code class="language-python">import pandas as pd # Assuming 'df' is your DataFrame with a DatetimeIndex monthly_avg = df.resample('M').mean()</code>
更複雜的插補使用內插法:
<code class="language-python">from statsmodels.tsa.arima.model import ARIMA # Fit the model model = ARIMA(df['value'], order=(1,1,1)) results = model.fit() # Make predictions forecast = results.forecast(steps=30)</code>
季節性管理是另一個關鍵面向。 雖然 Prophet 會自動處理這個問題,但其他模型需要明確建模。 季節性分解是一種方法:
<code class="language-python">from prophet import Prophet # Prepare the data df = df.rename(columns={'date': 'ds', 'value': 'y'}) # Create and fit the model model = Prophet() model.fit(df) # Make future predictions future = model.make_future_dataframe(periods=365) forecast = model.predict(future)</code>
這種分解揭示了潛在的模式並為建模選擇提供資訊。
使用 MAE、MSE 和 MAPE 等指標進行準確的預測評估至關重要:
<code class="language-python">import pyflux as pf model = pf.ARIMA(data=df, ar=1, ma=0, integ=0) results = model.fit('MLE')</code>
我經常結合這些指標來進行全面的績效評估。
時間序列分析有廣泛的應用。在金融領域,它用於股票價格預測和風險評估。計算庫存資料的滾動統計:
<code class="language-python">from tslearn.clustering import TimeSeriesKMeans kmeans = TimeSeriesKMeans(n_clusters=3, metric="dtw") clusters = kmeans.fit_predict(time_series_data)</code>
在物聯網中,它檢測異常並預測設備故障。 一個簡單的基於閾值的異常檢測:
<code class="language-python">from darts import TimeSeries from darts.models import ExponentialSmoothing, ARIMA series = TimeSeries.from_dataframe(df, 'date', 'value') models = [ExponentialSmoothing(), ARIMA()] for model in models: model.fit(series) forecast = model.predict(12) print(f"{type(model).__name__} MAPE: {model.mape(series, forecast)}")</code>
需求預測利用指數平滑等技術:
<code class="language-python"># Forward fill df_ffill = df.fillna(method='ffill') # Backward fill df_bfill = df.fillna(method='bfill')</code>
根據歷史銷售資料預測未來需求。
非平穩性(即統計屬性隨時間變化)是常見的陷阱。 增強迪基-富勒檢定檢查平穩性:
<code class="language-python">df_interp = df.interpolate(method='time')</code>
非平穩序列在建模之前可能需要差分或轉換。
異常值可能會導致結果出現偏差。 四分位數間距 (IQR) 方法可識別潛在的異常值:
<code class="language-python">from statsmodels.tsa.seasonal import seasonal_decompose result = seasonal_decompose(df['value'], model='additive') trend = result.trend seasonal = result.seasonal residual = result.resid</code>
處理異常值取決於領域知識和分析要求。
Pandas 有助於將資料重新取樣到不同的頻率:
<code class="language-python">from sklearn.metrics import mean_absolute_error, mean_squared_error import numpy as np mae = mean_absolute_error(actual, predicted) mse = mean_squared_error(actual, predicted) mape = np.mean(np.abs((actual - predicted) / actual)) * 100</code>
這在組合來自不同來源的資料或對齊資料進行分析時非常有用。
特徵工程建立捕捉重要特徵的特徵。提取星期、月份或季度中的某一天:
<code class="language-python">import yfinance as yf # Download stock data stock_data = yf.download('AAPL', start='2020-01-01', end='2021-12-31') # Calculate 20-day rolling mean and standard deviation stock_data['Rolling_Mean'] = stock_data['Close'].rolling(window=20).mean() stock_data['Rolling_Std'] = stock_data['Close'].rolling(window=20).std()</code>
這些功能通常透過捕捉循環模式來提高模型性能。
向量自迴歸(VAR)處理多個相關時間序列:
<code class="language-python">def detect_anomalies(series, window_size, num_std): rolling_mean = series.rolling(window=window_size).mean() rolling_std = series.rolling(window=window_size).std() anomalies = series[(series > rolling_mean + (num_std * rolling_std)) | (series < rolling_mean - (num_std * rolling_std))]</code>
這對時間序列之間的交互作用進行建模,有可能改善預測。
Python 為時間序列分析提供了強大的生態系。 從用於資料操作的 Pandas 到用於高級預測的 Prophet 和 Darts,這些庫提供了強大的功能。 將這些工具與領域專業知識相結合並仔細考慮資料特徵,可以在各種應用程式中產生有價值的見解和準確的預測。 請記住,成功取決於理解基本原則和特定問題的要求。 批判性評估、假設驗證和迭代細化是有效時間序列分析的關鍵。
101本書
101 Books是一家人工智慧出版社,由作家Aarav Joshi共同創立。 我們先進的人工智慧技術使出版成本顯著降低——一些書籍的價格低至4 美元——讓所有人都能獲得高品質的知識。
探索我們在亞馬遜上的書Golang Clean Code。
隨時了解我們的最新消息。 在亞馬遜上搜尋 Aarav Joshi 即可發現更多作品並獲得特別折扣!
我們的出版品
發現我們的其他出版品:
投資者中心 | 投資者中心(西班牙語) | 投資者中心(德語) | 智能生活 | 時代與迴響 | 令人費解的謎團 | 印度教 | 菁英發展 | JS學校
在 Medium 上追蹤我們
科技無尾熊洞察 | 時代與迴響世界 | 投資人中央媒體 | 令人費解的謎團 | | 令人費解的謎團 | >科學與時代媒介 |
現代印度教以上是掌握 Python 時間序列分析:資料科學家的工具與技術的詳細內容。更多資訊請關注PHP中文網其他相關文章!