SuperAPI AI 工具集

Time Series Analysis

数据与分析

查看项目

更新于 10-15 09:43

技能介绍

用途

时间序列分析用于检查按时间顺序采集的数据点,识别其中的模式、趋势与季节性,从而进行预测并理解时间动态。它适合以下场景:基于历史趋势预测未来值;检测数据中的季节性与周期性模式;分析销售、股价或网站流量随时间的变化趋势;理解自相关与时间依赖关系;进行带置信区间的时间预测;将数据分解为趋势、季节与残差分量。

核心概念

  • 趋势(Trend):长期方向性运动。
  • 季节性(Seasonality):固定间隔上的重复模式。
  • 周期性(Cyclicity):长期振荡(周期不固定)。
  • 平稳性(Stationarity):均值、方差随时间保持恒定。
  • 自相关(Autocorrelation):与过去值的相关性。

主要技术

  • 分解(Decomposition):分离趋势、季节、残差分量。
  • 差分(Differencing):使数据平稳化。
  • ARIMA:自回归积分滑动平均模型。
  • 指数平滑(Exponential Smoothing):过去值的加权平均。
  • SARIMA:带季节项的 ARIMA 模型。

使用方式(Python 实现)

该技能提供完整的 Python 代码示例,依赖 pandas、numpy、matplotlib 与 statsmodels。主要步骤包括:

  1. 创建或载入时间序列数据,并可视化原始序列。
  2. 使用 seasonal_decompose 进行加性分解,绘制趋势、季节与残差分量。
  3. 使用 adfuller 进行增广迪基-福勒(ADF)平稳性检验;若 p 值大于 0.05 则说明非平稳,需进行差分。
  4. 对差分后序列再次进行 ADF 检验。
  5. 使用 plot_acf 与 plot_pacf 绘制自相关与偏自相关图。
  6. 拟合 ARIMA 模型(示例 order=(1,1,1)),输出摘要。
  7. 使用 get_forecast 进行多步预测,并绘制带置信区间的预测图。
  8. 使用 ExponentialSmoothing 拟合指数平滑模型,并绘制诊断图。
  9. 计算不同窗口(如 7、30、90)的移动平均并绘图。
  10. 绘制季节子序列图。
  11. 使用 grangercausalitytests 进行格兰杰因果检验(多序列场景)。
  12. 计算 ACF/PACF 数值。
  13. 计算季节强度(seasonal_strength)。
  14. 绘制多步前瞻预测。
  15. 输出模型比较摘要,包括趋势强度与季节强度。

关键代码片段(保留原样):

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from statsmodels.tsa.seasonal import seasonal_decompose
from statsmodels.tsa.stattools import adfuller, acf, pacf
from statsmodels.graphics.tsaplots import plot_acf, plot_pacf
from statsmodels.tsa.arima.model import ARIMA
from statsmodels.tsa.holtwinters import ExponentialSmoothing
result = adfuller(ts)
print(f"ADF Test Statistic: {result[0]:.6f}")
print(f"P-value: {result[1]:.6f}")
print(f"Critical Values: {result[4]}")
arima_model = ARIMA(ts, order=(1, 1, 1))
arima_result = arima_model.fit()
print(arima_result.summary())
exp_smooth = ExponentialSmoothing(
    ts, seasonal_periods=30, trend='add', seasonal='add', initialization_method='estimated'
)
exp_result = exp_smooth.fit()
def calculate_forecast_metrics(actual, predicted):
    mae = np.mean(np.abs(actual - predicted))
    rmse = np.sqrt(np.mean((actual - predicted) ** 2))
    mape = np.mean(np.abs((actual - predicted) / actual)) * 100
    return {'MAE': mae, 'RMSE': rmse, 'MAPE': mape}

平稳性

  • 平稳:均值、方差、自相关随时间恒定。
  • 非平稳:存在趋势或季节模式。
  • 解决方案:差分、对数变换或去趋势。

模型选择

  • ARIMA:适合单变量预测。
  • SARIMA:包含季节分量。
  • 指数平滑:更简单,适合趋势。
  • Prophet:可处理节假日与变化点。

评估指标

  • MAE:平均绝对误差。
  • RMSE:均方根误差。
  • MAPE:平均绝对百分比误差。

交付物

  • 分解分析图表
  • 平稳性检验结果
  • ACF/PACF 图
  • 带诊断信息的拟合模型
  • 带置信区间的预测
  • 精度指标比较

适用场景

适用于销售预测、股价分析、网站流量趋势分析等随时间变化的数据场景,帮助理解时间依赖关系并做出带置信区间的预测。

限制

资料未提供关于收费、价格、平台支持范围、具体使用步骤之外的额外限制说明,暂未提供。