[ PROMPT_NODE_27458 ]
time_series
[ SKILL_DOCUMENTATION ]
# 时间序列分析参考
本文档提供了 statsmodels 中时间序列模型的综合指南,包括 ARIMA、状态空间模型、VAR、指数平滑及预测方法。
## 概述
Statsmodels 提供了广泛的时间序列功能:
- **单变量模型**:AR, ARIMA, SARIMAX, 指数平滑
- **多变量模型**:VAR, VARMAX, 动态因子模型
- **状态空间框架**:自定义模型,卡尔曼滤波
- **诊断工具**:ACF, PACF, 平稳性检验, 残差分析
- **预测**:点预测和预测区间
## 单变量时间序列模型
### AutoReg (AR 模型)
自回归模型:当前值取决于过去的值。
**适用场景:**
- 单变量时间序列
- 过去的值预测未来
- 平稳序列
**模型**: yₜ = c + φ₁yₜ₋₁ + φ₂yₜ₋₂ + ... + φₚyₜ₋ₚ + εₜ
python
from statsmodels.tsa.ar_model import AutoReg
import pandas as pd
# 拟合 AR(p) 模型
model = AutoReg(y, lags=5) # AR(5)
results = model.fit()
print(results.summary())
**带外生回归变量:**
python
# 带外生变量的 AR (ARX)
model = AutoReg(y, lags=5, exog=X_exog)
results = model.fit()
**季节性 AR:**
python
# 季节性滞后(例如:具有年度季节性的月度数据)
model = AutoReg(y, lags=12, seasonal=True)
results = model.fit()
### ARIMA (自回归积分滑动平均模型)
结合了 AR、差分 (I) 和 MA 组件。
**适用场景:**
- 非平稳时间序列(需要差分)
- 过去的值和误差预测未来
- 适用于多种时间序列的灵活模型
**模型**: ARIMA(p,d,q)
- p: AR 阶数 (滞后)
- d: 差分阶数 (实现平稳性)
- q: MA 阶数 (滞后预测误差)
python
from statsmodels.tsa.arima.model import ARIMA
# 拟合 ARIMA(p,d,q)
model = ARIMA(y, order=(1, 1, 1)) # ARIMA(1,1,1)
results = model.fit()
print(results.summary())
**选择 p, d, q:**
1. **确定 d (差分阶数)**:
python
from statsmodels.tsa.stattools import adfuller
# 用于平稳性的 ADF 检验
def check_stationarity(series):
result = adfuller(series)
print(f"ADF 统计量: {result[0]:.4f}")
print(f"p 值: {result[1]:.4f}")
if result[1] <= 0.05:
print("序列是平稳的")
return True
else:
print("序列是非平稳的,需要差分")
return False
# 检验原始序列
if not check_stationarity(y):
# 差分一次
y_diff = y.diff().dropna()