作为一位多产的作家,我邀请您在亚马逊上探索我的书籍。请记住关注我在 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中文网其他相关文章!