《Python 数据统计完全指南:时间序列数据的统计分析方法与实战》

一、时间序列基础概念
  1. 定义与特性
    时间序列数据是按时间顺序记录的观测值集合,如股票价格$(p_t)$或气温$(T_t)$,具有趋势性、季节性和自相关性。核心特征包括:

    • 平稳性:序列统计特性不随时间变化,满足$E(y_t) = \mu$(常数均值)和$Cov(y_t, y_{t-k}) = \gamma_k$(常数协方差)
    • 自相关函数(ACF):度量$y_t$与$y_{t-k}$的相关性,定义为$$\rho_k = \frac{Cov(y_t, y_{t-k})}{Var(y_t)}$$
  2. 数据预处理

    import pandas as pd
    # 缺失值处理(线性插值)
    df['sales'] = df['sales'].interpolate(method='linear')  
    # 平稳化处理(一阶差分)
    df['diff_sales'] = df['sales'].diff().dropna()
    


二、核心统计分析方法
  1. 分解模型
    加法模型:$$y_t = T_t + S_t + R_t$$
    乘法模型:$$y_t = T_t \times S_t \times R_t$$
    其中$T_t$为趋势项,$S_t$为季节项,$R_t$为残差项。

    from statsmodels.tsa.seasonal import seasonal_decompose
    result = seasonal_decompose(df['sales'], model='multiplicative', period=12)
    result.plot()
    

  2. ARIMA 建模

    • 自回归(AR):$$y_t = c + \phi_1 y_{t-1} + \cdots + \phi_p y_{t-p} + \varepsilon_t$$
    • 移动平均(MA):$$y_t = \mu + \varepsilon_t + \theta_1 \varepsilon_{t-1} + \cdots + \theta_q \varepsilon_{t-q}$$
    • ARIMA(p,d,q) 建模流程:
      from statsmodels.tsa.arima.model import ARIMA
      model = ARIMA(df['sales'], order=(2,1,1))  # p=2, d=1, q=1
      results = model.fit()
      results.summary()  # 输出模型参数
      


三、高级分析方法
  1. 波动率建模(GARCH)
    用于金融时间序列的波动聚集现象:
    $$\sigma_t^2 = \alpha_0 + \sum_{i=1}^q \alpha_i \varepsilon_{t-i}^2 + \sum_{j=1}^p \beta_j \sigma_{t-j}^2$$

    from arch import arch_model
    garch = arch_model(returns, vol='Garch', p=1, q=1)
    res = garch.fit(update_freq=5)
    

  2. 向量自回归(VAR)
    多变量时间序列建模:
    $$\begin{bmatrix} y_{1t} \ y_{2t} \end{bmatrix} = c + \Phi_1 \begin{bmatrix} y_{1,t-1} \ y_{2,t-1} \end{bmatrix} + \cdots + \Phi_p \begin{bmatrix} y_{1,t-p} \ y_{2,t-p} \end{bmatrix} + \varepsilon_t$$


四、实战案例:销售预测
# 完整代码示例
import matplotlib.pyplot as plt
from statsmodels.tsa.holtwinters import ExponentialSmoothing

# 1. 数据加载
df = pd.read_csv('sales_data.csv', parse_dates=['date'], index_col='date')

# 2. Holt-Winters 三指数平滑
model = ExponentialSmoothing(df['sales'], trend='add', seasonal='mul', seasonal_periods=12)
fit = model.fit()

# 3. 未来12期预测
forecast = fit.forecast(12)
plt.plot(df['sales'], label='Historical')
plt.plot(forecast, color='red', label='Forecast')
plt.legend()


五、评估指标
  • MAE:$$\frac{1}{n}\sum_{i=1}^n |y_i - \hat{y}_i|$$
  • RMSE:$$\sqrt{\frac{1}{n}\sum_{i=1}^n (y_i - \hat{y}_i)^2}$$
  • MAPE:$$\frac{100%}{n}\sum_{i=1}^n \left| \frac{y_i - \hat{y}_i}{y_i} \right|$$

本指南涵盖从基础概念到高级模型的全流程,结合Python代码实现,适用于金融、物流、气象等领域的时间序列分析需求。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐